程式設計珠璣題目集錦

2021-07-07 05:18:59 字數 1610 閱讀 6804

1.10^n個整數(億級)的排序

輸入:乙個最多含有n個不重複的正整數(也就是說可能含有少於n個不重複正整數)的檔案,其中每個數都小於等於n,且n=10^7。

輸出:得到按從小到大公升序排列的包含所有輸入的整數的列表。

《程式設計珠璣》中提出的問題,有三種解法:

(1)磁碟合併排序

先將所有資料分成多個小檔案,多個小檔案採用內部排序後,再用多路合併排序完成排序輸出。

總資料為n, 記憶體中採用內部排序最多m。先分成n/m個小檔案,再內部排序,第三部讀取所有小檔案,每次將最小的數輸出即可。

(2)多通道

0~10^k-1

10^k~2*10^k-1

...分成m個通道,讀m次,每次讀取在通道範圍內的數,按順序寫到對應的輸出檔案,完成排序。

(3)bitmap排序

在記憶體中開10^7位元,均初始化為0,若出現則設定為1,輸出為1的數即可。

2.  包含32位整數的順序檔案,至多包含40億個整數,查詢不存在的整數。有足夠記憶體;只有上百b記憶體

解法1:bitmap

解法2:二分查詢

給乙個整數範圍,選取乙個計數中點,然後計算上下範圍的個數,較小的一半範圍內必定包含遺漏元素。

3.  n維向量向左旋轉i個位置。如n=8,i=3,abcdefgh變成defghabc

解法1:開i個額外空間

解法2:t=x[0],然後0<——i<——2i<——3i...需要0覆蓋時,選t。若資料沒有全動,從x[1]繼續執行。

解法3: reverse(0,i-1); reverse(i,n-1);reverse(0,n-1)

cba defgh, cba hgfed, defgh abc

4. 給乙個單詞詞典,找出變位詞集。如abc、cba、bca等為變位詞

第一步,對輸入檔案進行簽名,如badd簽名成a1b1d2、abdd等。

第二步,按簽名對字串排序

第三部,合併統一簽名字串

5. 找出乙個字串中最長的重複子字串。如abacdbac中的bac。

解法1:

[cpp]view plaincopy

fori=[0,n)  

forj=(i,n)  

}  其中comlen函式返回兩個字串從開始位置相同字元個數。

[cpp]view plaincopy

intcomlen(

char* p, 

char* q)  

解法2:建立字尾陣列(指向字元的指標陣列)

對banana字尾陣列為:

a[0]: banana

a[1]:anana

...a[5]:a

然後將字尾陣列進行排序,掃瞄鄰接陣列,即可找出最常重複字串。

程式設計珠璣題目集錦

輸入 乙個最多含有 n個不重複的正整數 也就是說可能含有少於 n個不重複正整數 的檔案,其中每個數都小於等於n 且n 10 7 輸出 得到按從小到大公升序排列的包含所有輸入的整數的列表。程式設計珠璣 中提出的問題,有三種解法 1 磁碟合併排序 先將所有資料分成多個小檔案,多個小檔案採用內部排序後,再...

程式設計珠璣 續(程式設計珠璣 修訂版)

經久不衰的電腦科學名著 集深邃思想 實戰技術與趣味軼事於一冊 領略電腦科學之美 程式設計珠璣 續 作譯者介紹 譯者 錢麗豔 劉田叢書名 圖靈程式設計叢書 出版社 人民郵電出版社 isbn 9787115251510出版日期 2011 年5月 程式設計珠璣 續 是電腦科學方面的經典名著 程式設計珠璣 ...

程式設計珠璣 心得

第一部分 基礎 第1章 開篇 1.1 一次友好的對話 1.2 準確的問題描述 1.3 程式設計 1.4 實現概要 1.5 原理 1.6 習題 1.7 深入閱讀 第2章 啊哈!演算法 2.1 三個問題 2.2 無處不在的二分搜尋 2.3 基本操作的威力 2.4 排序 2.5 原理 2.6 習題 2.7...