時間過得真是快呀,第二週就要結束了,感覺有時自己在瞎忙。
關於快速冪及矩陣快速冪的題目,我在寒假就遇見過了,那時一看是新知識點,沒有立即消化吸收,只是簡單收藏在csdn中,想著:抽空再看吧!(現在看來這個想法很危險),可是新知識如雨後新竹般,來不及學習的早已埋在收藏中了。
唉,明日復明日,明日何其多?要警醒
快速冪:————————————————————————————————————————————
快速冪解決的是求 n ^ k 的值的問題;
需要注意的是這裡的k非常大,往往是1e7之上的。(這裡假設最後求得的值不會溢位);
那麼用樸素的求法來求 n^ k的過程是:n * n * n * n*n ..... *n;這樣的求法往往會超時。那麼我們就要換一種求法了。我們來個例子:
在現實生活中,如果讓你求2^20次方,你會怎麼求?一般的求法是
1. 讓 2 * 2 = 4,這樣就能算出2^2的值了。
2. 讓 4 * 4 =16,這樣就能算出2^4的值了。
3. 讓16 * 16 = 256,這樣就能算出2 ^ 8的值了
4. 讓256 * 256 = 65536,這樣就能算出2 ^ 16的值了
5. 讓65536 * (2 ^ 4) = 1048576,這樣就能算出2 ^ 20的值了。
這樣我們只需要5步就能算出2^20的值了,如果是按樸素的求法需要20步。
而且隨著k的增大,他們的差距也會越來越大。(o(n) 和 o( log2(n) )的差距。
但是第二種求法的話,我們需計算出最後一步的a * b中的b (也就是舉例中的65536 * (2 ^ 4) 中的(2 ^ 4)) ,這樣一來,當k比較的話,最後一步也很麻煩。
在這裡我們採用一種和第二種方法思想上類似的方法(沒錯,就是二分) 我們以a ^ 19來 舉例:如圖
#includeint fastpower(int a , int k); //這裡假設a ^ k不會溢位
int main()
int fastpower(int a , int k)
return ans;
}
開學第二週
開學已經兩周了,然後我們就又放假了 問號臉?總感覺一到上學的時候就又該放假了 仔細想想好像是這樣 不過相比於上半年來說,下半年的放假時間還算是少的,只不過對於我來說都一樣,不管在哪都是學習 貌似有點悲哀 只不過是學習的東西不一樣罷了。就學業的學習上來說,這一學期的學科難度遠超上一學期,因為多了很多的...
開學第二週 one 全排列)
一 stl提供了兩個用來計算排列組合關係的演算法,分別是next permutation和prev permutation。首先我們必須了解什麼是 下乙個 排列組合,什麼是 前乙個 排列組合。考慮三個字元所組成的序列。這個序列有六個可能的排列組合 abc,acb,bac,bca,cab,cba。這些...
第二週(快速排序)
通過找出乙個基準數,然後從左向右,從右向左依次找出比這個基準數大 小 的數字,然後交換它倆,最後將基準數與每輪判斷的結尾處交換,這樣每輪結束後,剛剛排序的部分都會被分成兩部分,在基準數左邊的數字都比基準數小,在基準數右邊的數字都比基準數大,然後不斷二分下去,最後整體排序完成 此方法主要運用了遞迴與二...