国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

你所能用到的數據結構(一)

開發 架構
我決定從數據結構開始寫起。數據結構和算法很難完全的分開,好的數據結構能夠提升算法的效率,而如果沒有算法,單純的談數據結構,那么數據結構的應用價值就會大大的降低。那么,就從最基本的開始這一個系列吧。

 無損編碼的霍夫曼編碼以及其余的各種編碼由于要使用比較復雜的數據結構,所以按照我昨天說的,我決定從數據結構開始寫起。數據結構和算法很難完全的分開,好的數據結構能夠提升算法的效率,而如果沒有算法,單純的談數據結構,那么數據結構的應用價值就會大大的降低。那么,就從最基本的開始這一個系列吧。

一、總是讓人很抽象的算法分析

     算法分析基本是所有數據結構與算法的***章要講的內容,大0表示法什么的總是讓人很抽象,對于初學者,其實這一章的意義并不是很大,因為你很遇到在實際開發中一些大數據集的問題,在小規模數據的時候,各個算法之間的差別很難分辨出來。這就好比計算5個數的和,大家所用的時間基本都會差不多,但是要是計算5000個數的和,那么天才和一般人之間的差距就會體現出來了,這也就是為什么對于一個大型企業,一個人才遠遠比10個干事的人重要的原因。

     算法分析的還有一個作用就是讓學計算機的明白,計算機雖然快,但是計算機不是***的,計算機再牛逼也不能很容易的就處理成萬上億的數據的。比如說我們用的QQ,雖然經常說騰訊抄襲,網絡即時通信軟件但從技術上來說不是特別難,難的是幾千萬人同時在線一點也不開,你的好友下線了,你馬上就能收到通知,這一點不是很容易就能做到的。反例就是鐵道部的訂票網站,為什么經常崩潰,被萬人辱罵,算法和優化的失敗就是很大的原因。優化是商業軟件一個永恒的主題,如果在最初學習的時候能有這樣一個概念,我相信對于以后是有很大幫助的。

     下面來說說大O表示法吧,從O(N)說起,不說那些算法時間復雜度上界什么什么的,如果你對這個有興趣的話,可以查閱一下算法的書籍,我覺得這個東西最簡單的理解方式就是利用循環,對于一個循環從1到N,然后對一個數組a賦值,也就是for(int i=0;i<N;i++) a[i]=i; 那么你就可以把這個理解為時間復雜度是O(N),所謂的N是問題的規模,也就是說對于這個算法,算法所消耗的時間隨著規模的增大而增大,比如現在處理1萬個數據需要0.1s,那么長到2萬個就需要0.2s。

     對于其他的大O表示法的問題基本都可以按照這個方法類推,對于一個算法能達到O(N)已經是非常非常牛逼的,極個別的比如二分查找可以達到很快的速度,但是不能忽視它前面的需要進行排序預處理。如果對于一個排序算法,按照一個人的正常思維,首先,你需要將待排序的所有數瀏覽一遍,然后才能確定哪個大哪個小,這樣才能進行排序,如此一來對于一組待排序的數,你需要瀏覽兩遍數組才能完成,那么這個人眼掃描算法的效率就是O(N*N)的。

     為了直觀的顯示效率的意義,按照我寫這一系列文章重點一定要突出實際的編程,采用C++寫了一段程序來顯示隨著規模的增長,冒泡和快速算法所用的時間的增長,為了對比,加入了空白對照組,先展示結果吧。

     

     ***行和第二行是兩個空循環,可以看到,第二行的數據規模是***行的兩倍,其處理時間也差不多是兩倍,也就是算法復雜度是O(N)。

     第三行和第四行分別是兩個不同規模的冒泡排序,冒泡排序算法復雜度是O(N*N),可以看到第三行是第四行處理速度大約4倍。

     第五行和第六行分別是兩個不同規模的快速排序,快速排序的算法復雜度是O(N*LogN),至于為什么,放在后面的文章中再分析。

     N*LogN這個是非常小的,所以***兩行所耗費的時間差不多,從這三組數據可以看出一個好的算法對于一個軟件的運行速度影響之大,一個冒泡算法處理30000個數據時快速排序處理100000的將近40倍,所以說算法可以說是衡量一個工程師好與壞的重要標準。

     下面貼出所有代碼,clock函數是用來計時的, 這里要提出的一點是這里的冒泡和快速排序算法不是我寫的,都是復制的,畢竟目前介紹的重點還不是這個,另外這個快速排序是標準里面的,很有參考學習價值。

  1. int main() 
  2.     const long int num=100000; 
  3.    
  4.   clock_t begin, end; 
  5.   double  cost; 
  6.  
  7.   int dat[num]; 
  8.   srand( (unsigned int)time(0) ); 
  9.   for (int i = 0; i < 30000; i++){ 
  10.        dat[i] = rand(); 
  11.   } 
  12.   begin = clock(); 
  13.   for(int loop=0;loop<10000000;loop++); 
  14.   end = clock(); 
  15.   cost = (double)(end - begin) / CLOCKS_PER_SEC; 
  16.   cout<<"loop for 10000000 values:"<<cost<<"seconds\n";  
  17.  
  18.   begin = clock(); 
  19.   for(int loop=0;loop<20000000;loop++); 
  20.   end = clock(); 
  21.   cost = (double)(end - begin) / CLOCKS_PER_SEC; 
  22.   cout<<"loop for 20000000 values:"<<cost<<"seconds\n";  
  23.  
  24.     
  25.   bubble(dat,30000); 
  26.    
  27.   srand( (unsigned int)time(0) ); 
  28.   for (int i = 0; i < 15000; i++){ 
  29.        dat[i] = rand(); 
  30.   } 
  31.  
  32.   bubble(dat,15000); 
  33.    
  34.  
  35.   srand( (unsigned int)time(0) ); 
  36.   for (int i = 0; i < 100000; i++){ 
  37.        dat[i] = rand(); 
  38.   } 
  39.  
  40.   begin = clock(); 
  41.   quickSort(dat,100000); 
  42.   end = clock(); 
  43.   cost = (double)(end - begin) / CLOCKS_PER_SEC; 
  44.   cout<<"qsort for 1000000 values:"<<cost<<"seconds\n";  
  45.  
  46.      
  47.    srand( (unsigned int)time(0) ); 
  48.   for (int i = 0; i < 50000; i++){ 
  49.        dat[i] = rand(); 
  50.   } 
  51.   begin = clock(); 
  52.   quickSort(dat,50000); 
  53.   end = clock(); 
  54.   cost = (double)(end - begin) / CLOCKS_PER_SEC; 
  55.   cout<<"qsort for 500000 values:"<<cost<<"seconds\n";  
  56.   int i; 
  57.   cin>>i; 
  58.   return 0; 
  59.  
  60. void quickSort(int numbers[], int array_size) 
  61.   q_sort(numbers, 0, array_size - 1); 
  62.  
  63.  
  64.  
  65. void q_sort(int numbers[], int left, int right) 
  66.   int pivot, l_hold, r_hold; 
  67.  
  68.   l_hold = left; 
  69.   r_hold = right; 
  70.   pivot = numbers[left]; 
  71.   while (left < right) 
  72.   { 
  73.     while ((numbers[right] >= pivot) && (left < right)) 
  74.       right--; 
  75.     if (left != right) 
  76.     { 
  77.       numbers[left] = numbers[right]; 
  78.       left++; 
  79.     } 
  80.     while ((numbers[left] <= pivot) && (left < right)) 
  81.       left++; 
  82.     if (left != right) 
  83.     { 
  84.       numbers[right] = numbers[left]; 
  85.       right--; 
  86.     } 
  87.   } 
  88.   numbers[left] = pivot; 
  89.   pivot = left; 
  90.   left = l_hold; 
  91.   right = r_hold; 
  92.   if (left < pivot) 
  93.     q_sort(numbers, left, pivot-1); 
  94.   if (right > pivot) 
  95.     q_sort(numbers, pivot+1, right); 
  96.  
  97. void bubble(int a[],int length) 
  98.      
  99.    clock_t begin, end; 
  100.   double  cost; 
  101.     int temp; 
  102.  
  103.     begin = clock(); 
  104.     for(int j=0;j<=length-1;j++) 
  105.     {  
  106.        for (int i=0;i<length-j;i++) 
  107.         if (a[i]>a[i+1]) 
  108.         {  
  109.             temp=a[i]; 
  110.             a[i]=a[i+1]; 
  111.             a[i+1]=temp; 
  112.         } 
  113.     } 
  114.     end = clock(); 
  115.    cost = (double)(end - begin) / CLOCKS_PER_SEC; 
  116.    cout<<"bubble for "<<length<<" values:"<<cost<<"seconds\n";  
  117.      

      我寫的“你所能用到的”這個系列,重點在于實現,如果你需要補充各種知識,請參考一些書籍,我一直的觀點是編程就像游泳一樣,游泳重要的是要下水試而不是什么游泳理論,當你學會了游泳之后,游泳理論可以幫你快速提高,但如果只會游泳理論,你是永遠也不會游泳,所以我的系列里保證所有貼出的代碼是一定都能用的,能運行處結果的,這樣對于初學者是一個成就感的反饋。

原文鏈接:http://www.cnblogs.com/ZXYloveFR/archive/2012/09/18/2690875.html

【編輯推薦】

 

 

責任編輯:彭凡 來源: 博客園
相關推薦

2012-10-18 10:40:46

數據結構

2012-10-08 15:59:38

數據結構

2012-10-10 10:13:22

數據結構

2012-10-09 10:09:19

數據結構

2012-10-10 10:30:18

數據結構

2012-10-16 09:52:27

數據結構

2020-07-14 08:53:43

Redis數據存儲

2019-09-05 09:15:50

數據容器Docker

2022-11-04 08:29:05

索引數據庫JSON

2021-10-29 11:27:52

鏈表數據結構算法

2021-02-07 22:24:59

Redis數據存儲

2017-11-14 13:48:26

數據結構學習

2023-09-06 13:16:00

數據庫數據

2023-10-31 08:51:25

數據結構存儲數據

2011-03-31 15:41:51

Cacti數據表結構

2012-04-28 14:21:47

Java數據結構線性結構

2014-12-10 10:35:43

微信 數據結構

2023-07-03 17:24:33

數據結構

2011-04-08 09:24:20

access數據庫數據轉換

2021-01-15 06:54:54

Python內存程序
點贊
收藏

51CTO技術棧公眾號

国产精品萝li| 日韩亚洲欧美在线| 欧美成人综合| 国内精品在线视频| 国产精品激情av电影在线观看 | 九九热精品视频在线播放| 成人午夜av电影| 国产一区二区高清在线| 亚洲国产另类精品专区| 色国产综合视频| 亚洲欧美aⅴ...| 国产成人在线免费| 国产99久久久国产精品免费看| 欧美激情日韩| 国产精品3区| 久久中文字幕二区| 国产91亚洲精品久久久| 樱花草涩涩www在线播放| 欧美性猛交xxxx免费看| www.久久东京| 日韩精品福利网| 免费一区二区| 欧美精品18| 成人h小游戏| 二区中文字幕| 欧美va在线播放| 久久久www成人免费精品| 欧美中文字幕视频| av成人观看| 日韩欧美亚洲v片| www.射射射| 国产精品女主播| 在线观看中文字幕亚洲| 精品亚洲一区二区三区四区五区高| 四虎最新地址发布| 成人影院在线免费观看| 女人床在线观看| 免费a在线观看| 五月天亚洲一区| 欧美人成在线| 欧美亚洲一区二区三区四区| 偷拍与自拍一区| 精品久久久久久中文字幕| 国外成人在线视频| 国产91ⅴ在线精品免费观看| 国产精品女主播| 91av在线看| 日本三级黄色网址| 中文久久电影小说| 一区二区三区国产精品| 国产精品亚洲自拍| 在线免费av观看| 精品一区二区日韩| 亚洲国产中文在线| 成 年 人 黄 色 大 片大 全| 成人av片网址| 国产丝袜高跟一区| 国产盗摄视频一区二区三区| 三级精品视频| 欧美一区亚洲一区| 一级欧洲+日本+国产| 99九九视频| 91精品国产综合久久国产大片| 国产曰批免费观看久久久| 免费视频一区二区三区在线观看| 欧美日本久久| 日韩国产高清影视| 国产成人综合自拍| 国产三级精品在线| 一二三四区精品视频| 色呦呦网站一区| 国产视频久久久久| 国内精品久久久久伊人av| 国产精品成人在线| 懂色一区二区三区av片| 高清一区在线观看| 欧美黄色成人网| 国产一区欧美一区| 亚洲一级片网站| 精品中国亚洲| av一区二区三区四区电影| 欧美无乱码久久久免费午夜一区 | 欧美 国产 精品| a级免费在线观看| 色婷婷av金发美女在线播放| 亚洲xxxxxx| 在线播放成人| 亚洲精品123区| 久久久久久久综合狠狠综合| 色欧美片视频在线观看| 精品国产视频在线| 玖玖玖精品中文字幕| 成年人免费在线播放| 午夜视频在线| 国产精品午夜av| 免费在线观看不卡| 亚洲婷婷在线| av免费网站观看| 国内精品国产成人| 国产精品免费在线| 久久久国产欧美| 少妇一区视频| 第三区美女视频在线| 欧美高清性xxxxhd| 人妻精品无码一区二区三区| 成人在线播放| 91久久高清国语自产拍| 96av麻豆蜜桃一区二区| 精品成人在线观看| 国产精品精品软件视频| 欧美福利网站| 一区二区三区四区高清视频| 国产一区二区视频在线播放| 欧美揉bbbbb揉bbbbb| 国产成人aa精品一区在线播放| 青青在线免费视频| 波多野结衣视频一区二区| 在线日韩一区| av中文字幕在线看| 99re在线国产| 中文字幕中文字幕在线一区 | 国产91在线亚洲| 免费av片风间由美在线| 最新在线你懂的| 成人毛片在线| 欧美色欧美亚洲高清在线视频| 欧美与欧洲交xxxx免费观看 | 8x8ⅹ国产精品一区二区二区| 手机在线免费看av| 精品一区二区三区影院在线午夜| 欧美zozo另类异族| 喜爱夜蒲2在线| 91国内精品白嫩初高生| 亚洲激情精品| 婷婷中文字幕一区| 2023欧美最顶级a∨艳星| 欧美激情影音先锋| 中文一区一区三区免费在线观看| aaa国产精品| 豆花视频一区二区| 91一区一区三区| 欧美色视频日本高清在线观看| 欧美久久久一区| 国产丝袜精品视频| 缅甸午夜性猛交xxxx| 精品污污网站免费看| 一区二区视频在线看| 九九热播视频在线精品6| 国产女大学生av| 国产精品免费在线免费| 午夜视频在线观看韩国| www.亚洲.com| 好了av在线| 久久久国产精品入口麻豆 | 免费av在线| 日韩av中文在线观看| 依依成人精品视频| 久久久久久99| 精品中国亚洲| 亚洲精品午夜精品| 日本一区二区三区在线观看视频| 免费av网站大全久久| 国产精品v片在线观看不卡| 日本色护士高潮视频在线观看| 97se亚洲国产综合自在线观| 高清不卡日本v二区在线| 一区二区网站| 热久久久久久久| 国产欧美日韩麻豆91| av中文在线资源库| 宅男噜噜99国产精品观看免费| 日韩欧美国产综合| 亚洲第一区在线| 国产精品扒开腿做爽爽爽男男| 先锋影音亚洲资源| 欧美女同网站| 欧美大片aaaa| 免费污视频在线一区| 在线视频国内一区二区| 四虎影视av| 欧美国产亚洲另类动漫| 亚洲成人xxx| 97人人做人人爱| 久久精品亚洲乱码伦伦中文| 久久中文字幕二区| 亚洲专区视频| 欧美日韩在线播放三区四区| 欧美激情videos| 精品视频导航| 日本精品在线| 成人精品免费视频| 国产精品久久久久不卡| 91av亚洲| 欧美日韩国产一二三| 久久影视中文粉嫩av| 激情成人亚洲| 日本一区网站| 国产自产视频一区二区三区| 一区二区三区精品国产| 国产成人免费视|