演算法分析與設計(第三週) 已完結

2021-09-17 23:56:48 字數 1294 閱讀 2990

本週知識要點:

3.1 c語言中的型別轉換機制

3.2 整數次冪(高次數的快速計算)

3.3 篩選素數演算法

規則:丟掉高位元組部分,只保留低位位元組。長整數的值若在短整數的範圍內,則轉換結構保持不變。 

規則:如果短整數帶符號,則長整數高位元組bit填充符號;否則填0

(unsigned的作用,僅在於賦更大的初值、轉換時填充的符號位。)

規則:有效數字部分,保留高bit,丟掉低bit;指數部分,按整數形式轉換。

規則:保留高位的bit作為有效數字,指數正常計算出多少位

規則:有效數字作為 long long型,按指數計算小數點位進行移動,這個過程會捨去小數或高位溢位部分(即:丟掉小數部分,對整數部分按整數轉)

(最後其實都是看二進位制的轉換,以及這個型別給多少bit位置來進行保留)

問題描述:對於乙個數進行n次方計算(不考慮數值溢位等問題),如果設計演算法使得計算最快。

思路:直接用n重迴圈進行 n次乘法可得

int way_one(int x, int n)

易得 時間複雜度思路:每一次得到

最後遞迴的邊界條件是 x一次方 返回自己。

int way_two(int a, int x, int n)

}

因為每一次遞迴都大約是計算的一半 所以思路:由遞迴演算法可得到啟發,把n次方寫成二進位制的形式就可以輕鬆得到是 乙個簡單的迴圈公式。如2的10次方可寫成2的(2+8)次方,所以 我們只需要讓 第1次迴圈 和第3次迴圈 相乘即可。

int way_three(int x,int n)

return result;

}

n次迴圈大約被分成很多個2,是計算的很多個一半, 所以思路: 用盡量少的步驟得到目的數次方,得需要窮舉搜尋一遍得到路徑 再由路徑去得到次方數,窮舉搜尋就已經耗費很多計算量所以無法正確實現。(個人認為)

秦九韶演算法介紹:

問題描述:

問題一:判斷乙個數n是否是素數

問題二:篩選正整數n之前的素數,並輸出出來

問題一就不再多說,可以遍歷

思路:用前面的素數 去篩去後面他的整數倍,比如在n個之中,從2開始 往後刪,每遇到乙個沒被刪的由此開始又繼續想後刪除

演算法設計,兩重迴圈,第一重遍歷整個n,第二重如果遍歷n的同時遇到未刪除的情況就開始由此往後刪除。

#includeint main()

} }}

演算法分析,利用尤拉級數定理可求得。

演算法設計與分析(第三週)遞迴實現全排列問題

問題是有一組數r,需要輸出它的全排列。r的遞迴可定義如下 當個數n為1時,perm 其中r是集合r中唯一的元素 當個數n大於1時,perm 由 r1 perm r1 r2 perm r2 r3 perm r3 rn perm rn 構成 其中ri r 即該集合中減去對應元素 其實說直白點,就是遞迴地...

程式設計與演算法(一)第三週測驗

描述 乙個最簡單的計算器,支援 四種運算。僅需考慮輸入輸出為整數的情況,資料和運算結果不會超過int表示的範圍。乙個最簡單的計算器,支援 四種運算。僅需考慮輸入輸出為整數的情況,資料和運算結果不會超過int表示的範圍。輸入 輸入只有一行,共有三個引數,其中第1 2個引數為整數,第3個引數為操作符 輸...

演算法作業 5 2017 3 7第三週

解析 題目要求很簡單 反轉乙個單鏈表。乙個比較簡單的思路就是頭插法,依次去下鍊錶,然後插入到新鍊錶的頭結點的下乙個。由於題目沒有定義頭結點,為了操作方便,定義兩個空頭結點指向鍊錶。只需要遍歷一次鍊錶,所以時間複雜度為o n 如下 definition for singly linked list.s...