日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构-王道-绪论

發布時間:2024/4/14 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构-王道-绪论 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 緒論
    • 四種邏輯關系
    • 儲存方式
    • 空間復雜度

緒論
  • 數據:客觀事物的符號表示.在計算機科學中指的是所有能輸入到計算機中冰杯計算機程序處理的符號的總稱. 數據又分為數值型數據,非數值型數據
  • 數據元素:是數據的基本單位,在程序中通常會作為一個整體來進行處理和考慮.
  • 數據項:一個數據元素可由多個數據項(Data Item)組成。
  • 最小單位數據項是數據的不可分割的最小單位數據項是對客觀事物某一方面特性的數據描述

例如:按照學生的成績進行排名。1:在計算機中找到學生們的數據,每一個學生的數據都是一個數據元素(基本單位),其中含有關于學生各方面屬性的數據項(最小單位),然后我們按照每個學生(數據元素)成績(數據項)學生(數據元素)這個整體進行排名。


  • 數據對象(Data Object):是性質相同的數據元素(基本單位,整體考慮)的集合,是數據的一個子集。如字符集合\(C=\{'A','B','C',...\}\)
  • 數據結構:指的是相互之間存在一定的關系的數據元素的集合。元素之間的相互聯系稱為邏輯結構。

四種邏輯關系
  • 集合:結構中的數據元素除了“同屬于一個集合”外,沒有其他的任何關系。
  • 線性結構:結構中的數據元素見存在一對一的關系。
  • 樹形結構:結構中的數據元素之間存在一對多的關系。
  • 圖狀結構或網狀結構:結構中的數據存在多對多的關系。

儲存方式

???? ??數據結構在計算機內存中的儲存包括數據元素的儲存和數據關系的儲存。
??????元素之間的關系在計算機中有兩種表示方法:順序表示非順序表示\(\rightarrow\) 順序儲存結構和鏈式儲存結構。

  • 順序儲存結構:用數據元素在儲存器中的相對位置來表示數據元素之間的邏輯結構關系。
  • 鏈式儲存結構:在每一個數據元素中增加一個存放另一個元素地址的指針(pointer),應該指針來表示順居元素剪得邏輯結構。

    數據結構的三個組成部分
  • 邏輯結構:數據元素之間邏輯關系的描述\(D_S=(D,S)\)
  • 存儲結構:數據元素在計算機中的儲存及其邏輯關系的表現稱為數據的儲存結構或者物理結構。
  • 數據操作:對數據進行的運算。

    抽象數據類型 ??????抽象數據類型(Abstract Data Type)簡稱(ADT):是指一個數學模型以及定義在該模型上的一組操作。
  • ADT定義是一組邏輯特性的描述。
  • ADT形式化定義是三元組:\(ADT=(D,S,P)\)
  • D是數據對象,S是D上的關系集,P是對D的基本操作集。

    算法
  • 算法(algorithm):是對特定問題求解方法(步驟)的一種描述,是指令的有限序列,其中每一條指令表示一個或者多個操作。

    特性
  • 輸入:有0個(也就是沒輸入)或者多個輸入。
  • 輸出:有一個(沒輸出的話就沒意義了)或多個輸出。
  • 確定性:每步的定義都是確切的,無歧義的。
  • 有窮性:算法應該在執行有窮步之后結束。
  • 可執行性:每一條運算都行該通過有限次完成。

    時間/空間 復雜度

    ???? ??算法執行時間需要通過一句根據該算法編制的程序在執行上運行所消耗的時間來度量。

    計算的方法通常有兩種
  • 事后統計:計算機內部進行執行的時間和實際占用空間的統計。
  • 事前分析:求出該算法的一個時間/空間界限函數。


  • 運行時間 \(=\) 算法每條語句執行時間的總和。(每條語句執行的時間=該語句執行的次數\(*\)語句執行一次所需的時間)。
  • 語句執行一次所需的時間取決于機器的指令性能和速度和編譯所產生的代碼質量,很難確定。
  • 通常設每條語句執行一次所需的時間為單位時間,則一個算法的運行時間就是該算法中所有語句的頻度之和。
  • 算法中基本操作重復執行的次數是問題規模n的某個函數,七時間度量記作\(T(n)=O(f(n))\),稱作算法的漸進時間復雜度
  • 一般情況下用最深層循環內的語句中的原操作執行頻度(重復執行次數)來表示。
for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++){c[i][j]=0;for(int k=1;k<=n;k++){c[i][j] += a[i][k]+b[k][j]}} }

???? ??可以看出上述代碼是一個三重循環,則時間復雜度的計算按照執行次數最多的語句來計算 \(~O(n^3)\)

{++x;s=0; }

???? ??將x自增看做基本操作,則語句頻度為1,時間復雜度為\(O(1)\)
???? ??如果將s=0也看為基本操作,則語句的頻度為2,其時間復雜度仍未\(O(1)\),即常量階

for(int i=1;i<=n;i++) {x++;s+=x; }

???? ??語句頻度為:\(2n\),時間復雜度為:\(O(n)\),線性階。

for(int i=0;i<=n;i++) {for(j=1;j<=n;j++){x++;s+=x;} }

???? ??語句頻度為:\(2n^2\),時間復雜度為:\(O(n^2)\),即平方階。

for(int i=2;i<=n;i++) {for(int j=2;j<=i-1;j++){x++;a[i][j]=x;} }

???? ??語句頻度為:\(1+2+3+...+(n-2)=\frac{(1+n-2)*(n-2)}{2}\)
???? ??時間復雜度為:\(O(n^2)\)

六種常用計算算法時間的多項式
\(O(1)<O(log_n)<O(n)<O(nlogn<O(n^2)<O(n^3)\)
指數的時間關系為:
\(O(2^n)<O(n!)<O(n^n)\)
??????當n取得非常大的時候,指數時間算法和多項式時間算法在所需的時間上非常的懸殊。
??????有的情況下,算法中基本操作重復執行的次數還隨問題的輸入數據集不同而不同。
素數的判斷算法。

void prime(int n) {int i=2;while((n%i)!=0&&i*1.0<sqrt(n))i++;if(i*1.0>sqrt(n))printf("%d 是一個素數\n",n);elseprintf("%d 不是一個素數\n",n); }

??????嵌套的最深層語句是i++;其頻度由條件

(n%i)!=0&&i*1.0<sqrt(n)

所確定,顯然i*1.0<sqrt(n),時間復雜度為\(O(n^\frac{1}{2})\)

case 1:基本語句和n無關。時間復雜度 \(O(1)\)
case 2:分裂原則\(\frac{n}{2}\) 。時間復雜度\(\log_2n\)
case 3:單一循環,依賴n。時間復雜度\(O(n)\)
case 4:雙循環,分裂原則。時間復雜度\(O(n\log_2n)\)
case 5:雙循環。時間復雜度\(O(n^2)\)

空間復雜度
  • 指令常數變量所占用的儲存空間。
  • 輸入數據所占用的儲存空間。
  • 輔助(儲存)空間。

    算法的空間復雜度指的是輔助空間。

轉載于:https://www.cnblogs.com/A-FM/p/9653288.html

總結

以上是生活随笔為你收集整理的数据结构-王道-绪论的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。