freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

程序員復習資料全-在線瀏覽

2025-06-04 07:45本頁面
  

【正文】 拓撲排序有兩種方法,一是無前趨的頂點優(yōu)先算法,二是無后繼的頂點優(yōu)先算法。當然,后一種排序出來的結(jié)果是“逆拓撲有序”的。理解關鍵路徑的關鍵有三個方面:  一是何謂關鍵路徑。  三是最晚時間是什么意思、如何求?! ≡趯嶋H設計關鍵路徑的算法時,還應該注意以下這一點:采用鄰接表的存儲結(jié)構(gòu),求最早時間和最晚時間要采用不同的處理方法,即:在算法初始時,應該首先將所有頂點的最早時間全部置為0?! ?. 最短路徑問題:  與關鍵路徑問題并稱為圖一章的兩只攔路虎。最短路徑問題分為兩種:一是求從某一點出發(fā)到其余各點的最短路徑(單源最短路徑)。這個問題也具有非常實用的背景特色,一個典型的應該就是旅游景點及旅游路線的選擇問題。查找(search)  先弄清楚以下幾個概念:關鍵字、主關鍵字、次關鍵字的含義。平均查找長度ASL的概念及在各種查找算法中的計算方法和計算結(jié)果,特別是一些典型結(jié)構(gòu)的ASL值,應該記住。在樹表上的查找?! ?1) 線性表上的查找:  主要分為三種線性結(jié)構(gòu):  順序表——傳統(tǒng)查找方法:逐個比較?! ∷饕樞虮怼獙λ饕Y(jié)構(gòu),采用索引查找算法?! ?2) 樹表上的查找:  樹表主要分為以下幾種:二叉排序樹(即二叉查找樹),平衡二叉查找樹(AVL樹),B樹,鍵樹。由于二叉排序樹與平衡二叉樹是一種特殊的二叉樹。平衡二叉排序樹是二叉排序樹的優(yōu)化,其本質(zhì)也是一種二叉排序樹,只不過,平衡排序二叉樹對左右子樹的深度有了限定:深度之差的絕對值不得大于1。平衡二叉樹的建立也是一個??键c,但該知識點歸根結(jié)底還是關注的平衡二叉樹的四種調(diào)整算法,調(diào)整的一個參照是:調(diào)整前后的中序遍歷結(jié)果相同。除B樹的查找算法外,應該特別注意一下B樹的插入和刪除算法,因為這兩種算法涉及到B樹結(jié)點的分裂和合并,是一個難點。trie樹也可說等同于鍵樹或?qū)儆阪I樹的一種。一般不要求能完整描述算法源碼,多是根據(jù)算法思想建立鍵樹及描述其大致查找過程。哈希表查找的基本思想是:根據(jù)當前待查找數(shù)據(jù)的特征,以記錄關鍵字為自變量,設計一個function,該函數(shù)對關鍵字進行轉(zhuǎn)換后,其解釋結(jié)果為待查的地址。內(nèi)部排序  考查你對書本上的各種排序算法及其思想以及其優(yōu)缺點和性能指標(時間復雜度)能否了如指掌?! ?1)插入排序中又可分為:直接插入、折半插入、2路插入(?)、希爾排序。直接插入是依次尋找,折半插入是折半尋找,希爾排序,是通過控制每次參與排序的數(shù)的總范圍“由小到大”的增量來實現(xiàn)排序效率提高的目的??焖倥判虻乃枷耄徽Z以敝之:用中間數(shù)將待排數(shù)據(jù)組一分為二。選擇排序相對于前面幾種排序算法來說,難度大一點?! 『唵芜x擇,是通過簡單的數(shù)組遍歷方案確定最小數(shù)?! 《雅判?,是利用堆這種數(shù)據(jù)結(jié)構(gòu)的性質(zhì),通過堆元素的刪除、調(diào)整等一系列操作將最小數(shù)選出放在堆頂。  (4)歸并排序,是通過“歸并”這種操作完成排序的目的,既然是歸并就必須是兩者以上的數(shù)據(jù)集合才可能實現(xiàn)歸并。算法思想比較簡單,有一點,要銘記在心:歸并排序是穩(wěn)定排序?;鶖?shù)排序,又分為兩種:多關鍵字的排序(撲克牌排序),鏈式排序(整數(shù)排序)?! ”菊赂鞣N排序算法的思想以及偽代碼實現(xiàn),及其時間復雜度都是必須掌握的?! 》€(wěn)定性的好處:若排序算法如果是穩(wěn)定的,那么從一個鍵上排序,然后再從另一個鍵上排序,第一個鍵排序的結(jié)果可以為第二個鍵排序所用。另外,如果排序算法穩(wěn)定,對基于比較的排序算法而言,元素交換的次數(shù)可能會少一些(個人感覺,沒有證實)?! ?1) 冒泡排序  冒泡排序就是把小的元素往前調(diào)或者把大的元素往后調(diào)。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的?! ?2) 選擇排序  選擇排序是給每個位置選擇當前元素最小的,比如給第一個位置選擇最小的,在剩余元素里面給第二個元素選擇第二小的,依次類推,直到第n1個元素,第n個元素不用選擇了,因為只剩下它一個最大的元素了。比較拗口,舉個例子,序列5 8 5 2 9,我們知道第一遍選擇第1個元素5會和2交換,那么原序列中2個5的相對前后順序就被破壞了,所以選擇排序不是一個穩(wěn)定的排序算法。當然,剛開始這個有序的小序列只有1個元素,就是第一個元素。如果碰見一個和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面?! ?4) 快速排序  快速排序有兩個方向,左邊的i下標一直往右走,當a[i] = a[center_index],其中center_index是中樞元素的數(shù)組下標,一般取為數(shù)組第0個元素。如果i和j都走不動了,i = j, 交換a[i]和a[j],重復上面的過程,直到ij。在中樞元素和a[j]交換的時候,很有可能把前面的元素的穩(wěn)定性打亂,比如序列為 5 3 3 4 3 8 9 10 11,現(xiàn)在中樞元素5和3(第5個元素,下標從1開始計)交換就會把元素3的穩(wěn)定性打亂,所以快速排序是一個不穩(wěn)定的排序算法,不穩(wěn)定發(fā)生在中樞元素和 a[j] 交換的時刻。可以發(fā)現(xiàn),在1個或2個元素時,1個元素不會交換,2個元素如果大小相等也沒有人故意交換,這不會破壞穩(wěn)定性。所以,歸并排序也是穩(wěn)定的排序算法。再按照高位排序,然后再收集。有時候有些屬性是有優(yōu)先級順序的,先按低優(yōu)先級排序,再按高優(yōu)先級排序,最后的次序就是高優(yōu)先級高的在前,高優(yōu)先級相同的低優(yōu)先級高的在前?! ?7) 希爾排序(shell)  希爾排序是按照不同步長對元素進行插入排序,當剛開始元素很無序的時候,步長最大,所以插入排序的元素個數(shù)很少,速度很快。所以,希爾排序的時間復雜度會比o(n^2)好一些?! ?8) 堆排序  我們知道堆的結(jié)構(gòu)是節(jié)點i的孩子為2*i和2*i+1節(jié)點,大頂堆要求父節(jié)點大于等于其2個子節(jié)點,小頂堆要求父節(jié)點小于等于其2個子節(jié)點。但當為n /21, n/22, ...1這些個父節(jié)點選擇元素時,就會破壞穩(wěn)定性。所以,堆排序不是穩(wěn)定的排序算法?! ?/交換兩個數(shù)的值  void swap(int amp。b)  {  int tmp。  a=b。  }  //屏幕輸出數(shù)組  void display(int array[],int len)  {  coutthe resultis:ENDL。i len。   重者在下為止。i = 0。j i?!   }  /*直接插入排序  算法思想:把n個待排序的元素看成為一個有序表和一個無序表,開始時有序表中只包含一個元  素,無序表中包含有n1個元素,排序過程中每次從無序表中取出第一個元素,將它  插入到有序表中的適當位置,使之成為新的有序表,重復n1次可完成排序過程?! or(i = 1。i++)  {  if (array[i] array[i1])  {  tmp = array[i]?! ?/插入到相應位置  for (j = i2。j)  {  //往后移  if (array[j] tmp)  array[j+1] =array[j]?! reak?!   }  }  /*2路插入排序  算法思想:增加一個輔助空間d,把r[1]賦值給d[1],并將d[1]看成是排好序后處于中間  位置的記錄?! r間復雜度 o(n^2)  空間復雜度 o(1)  比較次數(shù) n(n+1)/2  */  void bi_insert_sort(int array[],int len)  {  int* arr_d = (int*)malloc(sizeof(int) * len)?! nt head = 0,tail = 0。i len?! or ( j= tail。j)  {  if (array[i] ARR_D[J]) p   arr_d[j+1] =arr_d[j]?!   arr_d[j+1] = array[i]?!   else  {  if (head ==0)  {  arr_d[len1] = array[i]。  }  else  {  int j。j =len1?! lse  break?! ead = 1。i len?! f(pos = len) pos = len。  }  free(arr_d)?! or (int i = d。i++)  {  if(array[i] array[id])  {  tmp = array[i]?! o  {  array[j+d] = array[j]?!  while (j = 0 amp。tmp array[j])。  }  }  }  void shell_sort(int array[],int len)  {  int inc = len?! hell_insert(array,inc,len)?!   /*快速排序  算法思想:將原問題分解為若干個規(guī)模更小但結(jié)構(gòu)與原問題相似的子問題?! r間復雜度 o(nlogn)  空間復雜度 o(logn)  比較次數(shù) ?  */  void quick_sort(int array[],int low,int high)  {  if (low high)  {  int pivotloc =partition(array,low,high)。  quick_sort(array,pivotloc+1,high)。  while (low high)  {  while(low high amp。array[high] = pivotkey)  high?! hile(low high amp。array[low] = pivotkey)  ++low。  }  array[low] = pivotkey。  }  /*直接選擇排序  算法思想:每一趟在ni+1個記錄中選取關鍵字最小的記錄作為有序序列中的第i個記錄  時間復雜度 o(n^2)  空間復雜度 o(1) ?  比較次數(shù) n(n+1)/2  */  int SelectMinKey(int array[],int iPos,int len)  {  int ret = 0。 i len?!   }  return ret。 i len?! f (i != j)  {  swap(array[i],array[j])?! r間復雜度 o(nlogn)  空間復雜度 o(n)  比較次數(shù) ?  */  void merge(int array[],int i,int m, int n)  {  int j, k?! nt arrayDest[256]。 i = mamp。 j = n。  else  arrayDest[k] = array[j++]。k = n?! f(j = n)  for (。 k++,j++)  arrayDest[k] = array[j]。 j = iEnd?!   void merge_sort(int array[],int s,int t)  {  int m?! erge_sort(array,s,m)?! erge(array,s,m,t)?! 《咽且粋€近似完全二叉樹結(jié)構(gòu),并同時滿足堆屬性:即子節(jié)點的鍵值或索引總是  小于(或者大于)它的父節(jié)點?! or(int j = 2 * i。amp。  if(rc = array[j]) break。 i = j。  }  void heap_sort(int array[],int len)  {  int i。 i = 0?! or( i = (len1)。 i)  {  swap(array[0],array[i])?!   }  int main()  {  int array[] = {45, 56, 76, 234, 1, 34,23, 2, 3, 55, 88, 100}?! ?/bubble_sort(array,len)。*/ //插入排序  /*bi_insert_sort(array,len)。*/ //希爾排序  /*quick_sort(array,0,len1)。*/ //選擇排序  /*merge_sort(array,0,len1)。 //堆排序  display(array,len)?! |對排序算法的總結(jié)  按平均時間將排序分為四類:  (1)平方階(O(n2))排序  一般稱為簡單排序,例如直接插入、直接選擇和冒泡排序。  (3)O(n1+£)階排序  £是介于0和1之間的常數(shù),即0£1,如希爾排序?! 「鞣N排序方法比較  簡單排序中直接插入最好,快速排序最快,當文件為正序時,直接插入和冒泡均最佳?! 、谟涗浀拇笮?規(guī)模)。 ?、軐Ψ€(wěn)定性的要求?! 、薮鎯Y(jié)構(gòu)。  不同條件下,排序方法的選擇  (1)若n較小(如n≤50),可采用直接插入或直接選擇排序。否則因為直接選擇移動的記錄數(shù)少于直接插人,應選直接選擇排序為宜?! ?3)若n較大,則應采用時間復雜度為O(nlgn)的排序方法:快速排序、堆排序或歸并排序。  堆排序所需的輔助空間少
點擊復制文檔內(nèi)容
教學教案相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1