問題:將乙個n維向量向左迴圈移位m位。如向量0,1,2,3,4,5,6,7,8,9向左迴圈移位3位,結果是3,4,5,6,7,8,9,0,1,2。
方法1:每次迴圈移位1位,執行m次。輔助空間1,時間複雜度o(n*m)
方法2:用m維的輔助空間暫存前m個元素,對剩下的n-m個元素進行移位,最後將m個元素移動向量末尾。輔助空間m,時間複雜度o(n)。
方法3:(雜技方法)先a[0]-->temp,然後a[i]-->a[0],a[2i]-->a[i],直到遇到a[0],將temp-->剛才移動的最後乙個位置。如
果沒有移動完則a[i]-->temp,然後a[1+i]-->a[1],a[1+2i]-->a[1+i],迴圈,直到全部移動。輔助空間o(1),時間複雜度o(n).
方法4:(求逆方法)利用了
(b,a)=(arbr)r
,輔助空間1,時間複雜度o(n). 還可以擴充套件為(c,b,a)=(ar
,br,cr)r噢~
方法5:(分塊方法)對於向量(a,b),其中a是m維的,b是n-m維,將b分成兩部分,b=(b1,b2),其中b2同a也是m維的,首先交換a和b2的位置。然後對(b2,b1)部分再迴圈進行上述操作。m>n-m時調換位置,繼續。輔助空間o(1),時間複雜度o(n).
效率:分塊》求逆》雜技
程式設計珠璣第二章
a題給定乙個最多包含40億個隨機排列的32位整數的順序檔案,找出乙個不在檔案中一32位整數。1 在檔案中至少存在這樣乙個數?2 如果有足夠的記憶體,如何處理?3 如果記憶體不足,僅可以用檔案來進行處理,如何處理?答案 1 32位整數,包括 2146473648 2146473647,約42億個整數,...
程式設計珠璣第二章總結
分析 如果記憶體足夠的話,可以採取第一章的點陣圖排序法,以o n 的效率就可以解決。如果記憶體不足的話,但是有幾個外部檔案可以儲存資料,那麼就可以採用二分查詢的思想來解決問題 這裡的思路比較巧妙,它不是通常意義上的二分查詢,但是思維模式很相似.我們可以通過掃瞄輸入檔案,將第一位是0的寫入乙個檔案,將...
程式設計珠璣第二章ABC
問題 找出乙個不在檔案中的32位整數。注意 題目中沒有說,這40億個數是否是含有重複的資料 條件限制 1 如果有足夠的記憶體,如何處理?2 如果記憶體僅有上百位元組 記憶體不足 且 可以用若干外部臨時檔案,如何處理?舉例 比如abcdef 左移三位,則變成defabc 條件限制 空間限制 可用記憶體...