天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

coding小世界

發(fā)布時間:2017-04-04 16:04

  本文關鍵詞:編程珠璣,由筆耕文化傳播整理發(fā)布。


本文首發(fā)于個人博客之編程珠璣,之后會陸續(xù)將博客轉(zhuǎn)移至個人博客,期待與各位的交流

這不是一本具體算法的講解或者代碼編寫的教程,但是從書中的字里行間,我們可以學到的是更多的軟知識:對編程新的認識、更加發(fā)散的思維方式、更嚴格的代碼要求、堪比瑞士軍刀的小技巧…… 編程也許入門并不難,但是要想真正成為一名優(yōu)秀的軟件工程師,還是需要很多錘煉。內(nèi)外兼修,方成大器。

基礎篇
  • 第一章 開篇

    首先作者提出一個實際問題:

    如何給磁盤的某個文件排序,更具體來說就是是對一個最多包含1千萬條記錄,每條記錄都是7位整數(shù)的文件,而且只有1MB的內(nèi)存可以使用

    從實際問題中提煉出更明確的數(shù)學定義:

    輸入:一個最多包含n個整數(shù)的文件,每個數(shù)都小于n,,其中n=10^7?梢员WC輸入文件中不存在重復整數(shù)
    輸出:按升序排列的輸入整數(shù)的列表
    約束:1MB左右的內(nèi)存空間,充足的磁盤存儲空間。運行時間最多幾分鐘,控制在10秒內(nèi)不再需要進一步優(yōu)化

    考慮一般的解法,直接讀入所有的整數(shù),然后進行快排堆排之類的排序,時間復雜度很明顯是O(nlogn),但空間復雜度是O(n),即如果n=10^7時,用4個字節(jié)的int型存儲每個整數(shù),那么需要的空間是(4*107)/210210=38MB,很顯然超出了內(nèi)存限制,而考慮實際n的大小限制和每個整數(shù)只會出現(xiàn)一次的限制,而所謂的排序也只是把從文件中的整數(shù)按在1-n內(nèi)出現(xiàn)的順序輸出而已,因此只要對n之內(nèi)出現(xiàn)的整數(shù)做一下標記最后輸出標記過的整數(shù)就可以了,考慮到這,位向量(也叫位圖)就成了比較合適的數(shù)據(jù)結(jié)構(gòu)的選擇,每個位的0、1值表示一個數(shù)字是否出現(xiàn)過,實現(xiàn)的時間復雜度為O(n),空間復雜度為O(n),考慮n取最大值10^7時,需要的空間為107/8/210/210=1.2MB,代碼實現(xiàn)如下:

    ; void intSort(){ bitset<N> numBits; ifstream = testFile("/Users/smy/temp/data.txt"); string s; int count = 0; while(testFile >> s){ numBits[atoi(s.c_str())-1] = 1; ++count; } testFile.close(); for(int i=0;i<N;++i){ if(numBits[i] == 1){ cout<

      本文關鍵詞:編程珠璣,由筆耕文化傳播整理發(fā)布。



    本文編號:285794

  • 資料下載
    論文發(fā)表

    本文鏈接:http://www.sikaile.net/wenshubaike/mishujinen/285794.html


    Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

    版權(quán)申明:資料由用戶b2cef***提供,本站僅收錄摘要或目錄,作者需要刪除請E-mail郵箱bigeng88@qq.com