《計算機程式設計與藝術》問題摘錄(一)

2021-06-17 18:41:08 字數 1403 閱讀 7065

分類: 讀書筆記

2010-06-27 18:17

188人閱讀收藏 

舉報c出版演算法

1.給定乙個包含大量不同的30位二進位製字x1,....,xn的檔案,找出其中所有補碼對的好方法是什麼?(互補的充要條件為和為(11...111)2 )

解法:記c=231-1,首先對檔案進行排序,使得x1

2<.....n.  記i=1,j=n;重複下列步驟直到j<=i:

if xi+xj = c,print,i += 1;j -= 1;

if xi+xj

< c,i + = 1;

if xi+xj > c,i -= 1;

最後,如果j=i且2xi = c,則輸出.

2.給定乙個含有1000個30位二進位製字x1,....,xn的檔案,如何編制乙份所有對偶的表,使得除最多兩個二進數字外,xi = xj ?

解法:方案a:對於滿足1<=ii ^ xj ,n = m & (m -1) ,r = n & (n -1 ),當且僅當r = 0時,輸出對偶。

方案b:由原來的字xi形成31個項,其中包括xi本身及在乙個位置上不同於xi的另外30個字,這樣得到乙個共有31000個項的檔案。對這個檔案進行排序,考察其中的重複性。

3.在有4096個人的某人群中,每個人大約有100個相識者。乙個檔案已經列出所有相識的對偶。怎樣設計乙個演算法,對於給定的k,列出這群人中所有k個人的團體(乙個團體是互相認識的一組人,每個人都與其它人相識)?假定不存在人數是25的團體,因此團體的總數不可能很多。

解法:乙個方法是形成包含所有三個人的集體的乙個檔案,然後把它變換為含有所有四個人的集體的檔案,等等;如果沒有很大的集體,則這個方法將是十分令人滿意的。(另一方面,如果有n個人的集體,則至少有cnk個k個人的集體,所以甚至當n僅僅是25人左右時,這個方法仍可能失敗。)

以(a1,....ak-1)的形式列舉出k個人的集體的乙個檔案,其中a1 

<...< ak-1,我們可以通過(i)對於使b1,...,ak-2,b),(a1,...,ak-2,c)的每對k-1個人的集體,建立包含項(b,c,a1,...,ak-2)的乙個新檔案;(ii)按其頭兩個分量對這個檔案進行排序;(iii)在同原來給定的檔案中的一對相識者(b,c)匹配的新檔案中的每個項(b,c,a1,...,ak-2),輸出k個人的團體(a1,...,ak-2,b,c)。

4.你是美國國內稅收服務人員,你收到了來自各單位的數百萬「資訊」**,報告他們已向人們支付了多少錢;同時,又從人們那裡收到了數百萬「稅收」**,報告他們已經得到了多少收入。你如何發現沒有報告收入的所有人?

解法:給每乙個人指定乙個標識號,這個號必須在所有涉及他的**中出現。以這個標識號為鍵碼,分別對資訊**和賦稅**進行排序。以r1,...,rn表示排好序的賦稅**,其鍵碼為k1<...

a)如果k>ki,則i+=1,重複這個步驟

b)如果k

《計算機程式設計藝術》學習筆記(一)

一,mix 儘管knuth 對於mix 不満,在第 3版和他本人的主頁上宣告即將更換為 mmix 但對於初學者如我而言,結全本書先學學 mix似乎更為方便,為了學習 tacop 後面的內容,了解一下 mix看來是必須的步驟。命令格式一般為 op address,i f op為命令關鍵字,addres...

計算機程式設計藝術 第I卷

本文未完待續 目錄第1章 基本概念 1.1 演算法 1.2 數學準備 1.2.1 數學歸納法 1.2.2 數 冪和對數 1.2.3 和與積 1.2.4 整數函式和初等數論 1.2.5 排列和階乘 1.2.6 二項式係數 1.2.7 調和數 1.2.8 斐波那契數 1.2.9 生成函式 1.2.10 ...

計算機程式設計藝術 排序部分 閱讀感想

當著手解決乙個新問題時,先找某些相當明顯的解決方法,然後再試圖改進它,往往是明智的。為什麼會有這麼多種排序演算法。因為每種方法都有其優缺點,對於某些資料和硬體配置來說,它有可能超過其他的方法。目前許多最好的方法,都是針對特定的機器,根據特定的目的,對特定物件進行排序所得到的。計數排序 對元素兩兩比較...