程式設計珠璣(基礎篇)

2021-06-07 21:42:30 字數 1233 閱讀 4350

關於計數排序的,題意如下:

輸出:按公升序排列的輸入正數的列表。

約束:最多有1mb的記憶體空間可用,有充足的磁碟儲存空間可用。執行時間最多幾分鐘,執行時間為10秒就不需要進一步優化。

思路:利用位向量,當且僅當整數i在檔案中出現時,第i位為1.最後檢驗每一位,如果該位為1,則輸出相應的整數到輸出檔案中。

for [0, n)

bit[i] = 0;

for each i in the input file

bit[i] = 1;

for i = [0, n)

if bit[i] == 1

write(i);

給定乙個最多包含40億個隨機排列的32位整數的順序檔案,找出乙個不在檔案中的32位整數(檔案中至少缺失乙個這樣的數)。在具有足夠記憶體的情況下,如何解決該問題?如果有幾個外部的「臨時」檔案可用,但是僅有幾百位元組的記憶體,又該如何解決該問題?

思路:二分搜尋,採用已知包含至少乙個缺失元素的一系列整數作為範圍,並使用包含所有這些整數在內的檔案表示這個範圍,通過統計中間點之上和之下的元素來探測範圍。由於這個範圍中有乙個缺失的元素,所以我們需要的那一半範圍必然包含缺失的元素。

將乙個n元一維向量向左旋轉i個位置。例如當n=8且i=3時,向量abcdefgh旋轉為defghabc。你能否僅使用數十個額外位元組的儲存空間,在正比與n的時間內完成向量的旋轉?

reverse(0,i-1); //cbadefgh

reverse(i,n-1); // cbahgfed

reverse(0,n-1); //defghabc

給定乙個英文本典,找出其中的所有變位詞集合。例如「pots」、「stop」、「tops」互為變位詞,因為每乙個單詞都可以通過改變其他單詞中字母的順序來得到。

資料決定程式結構

使用陣列重新編寫重複**

封裝複雜的資料結構

盡可能使用高階工具

從資料得出程式的結構

主要是關於二分查詢的,對比一下兩份**

int binarysearch(int t) 

return -1;

}int badsearch(int t)

return -1;

}

其中badsearch函式在某些測試用例下不能起到縮小範圍的作用,比如當x[ ] = ,查詢物件為40的時候,badsearch函式會陷入死迴圈。

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

經久不衰的電腦科學名著 集深邃思想 實戰技術與趣味軼事於一冊 領略電腦科學之美 程式設計珠璣 續 作譯者介紹 譯者 錢麗豔 劉田叢書名 圖靈程式設計叢書 出版社 人民郵電出版社 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...

網路程式設計基礎篇

href file e temp msohtml1 01 clip filelist.xml rel file list c s模式 server 根據請求提供服務 1 開啟乙個通訊通道並告知本地計算機,它願意在某一位址和埠上接受客戶請求 2 等待客戶請求到達埠 3 接收到重複服務請求,處理該請求並...