演算法導論有趣題 4 2,6 3

2021-07-10 07:21:00 字數 1153 閱讀 6340

4-2:

題目描述:

某陣列a[1,2,...n]含有所有從0到n的證書,但其中乙個整數不在陣列中。通過輔助陣列b[0,...n]來記錄a中出現的整數

(1)在o(n)時間找到缺失整數

(2)若陣列中每個數值是二進位制的,不能直接對每個數取出其數值,則如何找到缺失

解答:(1)遍歷陣列a,將每個出現的值儲存在b中下標對應值,之後遍歷一次b即可

eg:

for val in a:

b[val] = 1

for i in range(len(b)):

if b[i] == 0:

return i

(2)使用異或操作來處理。1^0 = 0,1^1 = 0,0^0 = 0,既:兩個相等的數異或結果為0,而0與任何數異或得該數本身。因此,將a中的值與0~n異或,得到的結果就是缺失的整數。

6-3:

題目描述:young 氏矩陣:從左到右遞增,從上到下遞增。

(1)插入乙個新元素的演算法及複雜度

(2)對n*n個數使用young氏矩陣排序的複雜度為o(n^3)

(3)在m*n矩陣中找到乙個給定數,複雜度o(m + n)

解答:(1)在矩陣右下角插入新元素。若新元素大於上方與前方的元素,則插入成功。否則, 將新元素往小的方向比較交換過去。最壞情況的複雜度為:走到了左上角o(n+m)

void insert(vec,i,j)

(2)對 n * n 個元素使用young矩陣,每個元素插入該矩陣的複雜度是o(n+n),則,總的複雜度為o(2n*n*n) = o(n^3)。對乙個y矩陣,左上角為最小值,最左一列遞增,最頂一行遞增,則使用合併排序中的摸牌式合併方法,o(m+n)的複雜度就可以排序好第一列與第一行。同樣的方法。遍歷整個矩陣一次,就可以完成排序

(3) 從左下角起尋找元素。若當前值小於需要值,則往右;若當前值大於需要值,則往上。複雜度為o(m + n)

演算法題 有趣的數字

小q今天在上廁所時想到了這個問題 有n個數,兩兩組成二元組,差最小的有多少對呢?差最大呢?輸入描述 輸入包含多組測試資料。對於每組測試資料 n 本組測試資料有n個數 a1,a2 an 需要計算的資料 保證 1 n 100000,0 ai int max.輸出描述 對於每組資料,輸出兩個數,第乙個數表...

演算法題 有趣的排序

度度熊有乙個n個數的陣列,他想將陣列從小到大 排好序,但是萌萌的度度熊只會下面這個操作 任取陣列中的乙個數然後將它放置在陣列的最後乙個位置。問最少操作多少次可以使得陣列從小到大有序?輸入描述 首先輸入乙個正整數n,接下來的一行輸入n個整數。n 50,每個數的絕對值小於等於1000 輸出描述 輸出乙個...

《演算法導論》摘記 經典演算法題集錦

分治策略 diogenes教授有n個被認為是完全相同的vlsi晶元,原則上它們是可以互相測試的。教授的測試裝置一次可測二片,當該裝置中放有兩片晶元時,每一片就對另一片作測試並報告其好壞。乙個好的晶元總是能夠報告另一片的好壞,但乙個壞的晶元的結果是不可靠的。這樣,每次測試的四種可能結果如下 a晶元報告...