相親交友原始碼開發,演算法的定義及複雜度分析
演算法的評估
斐波那契數引入複雜度分析
/** * 求第n個斐波那契數 * 斐波那契數列:這個數列從第3項開始,每一項都等於前兩項之和。 * 下標 0 1 2 3 4 5 6 7 * 數列 0 1 1 2 3 5 8 13 *///遞迴的方式:function fun1(n) { if (n <= 1) return n; return fun1(n - 1) + fun1(n - 2)}// 迴圈function fun2(n) { if (n <= 1) return n; let first = 0; let second = 1; for (let i = 0; i < n - 1; i++) { let sum = first + second; first = second; second = sum } return second}
function check(title, task, num) { console.log(title); let start = new Date().getTime() console.log('開始時間', start); task(num) let end = new Date().getTime() console.log('結束時間', end); console.log('耗時', (end - start) / 1000);}check('遞迴', fun1, 45)check('迭代', fun2, 1111111145)遞迴 開始時間 1637648114480結束時間 1637648126090耗時 11.61迭代 開始時間 1637648126091結束時間 1637648130718耗時 4.627
推導大O階方法
function cal01(age) { // 1 * unit-time if (age > 58) { console.log(1); } else if (age > 28) { console.log(2); } else { console.log(3); }}function cal02(n) { // (3+3n)*unit-time let sum = 0; // 執行一次 let i = 1; // 執行一次 // n次 n次 for (; i <= n; ++i) { sum += i // 執行n次 } return sum // 執行一次}function cal03(n) { // (1+3n)*unit-time // 一次 n次 n次 for (let i = 0; i < n.length; i++) { console.log(n[i]); // n次 }}function cal04(n) { // 1+2n+n(1+3n) = (3n^2+3n+1)*unit-time for (let i = 0; i < n; i++) { for (let j = 0; j < n; j++) { console.log('666'); } }}function cal05(n) { // 1+2n+n*(1+3*20) = (1+63n)*unit-time for (let i = 0; i < n; i++) { for (let j = 0; j < 20; j++) { console.log('666'); } }}function cal06(n) { // (1+log(2)n)*unit-time let i = 1; // 一次 while (i < n) { i + i * 2 // 2*x = n x = log(2)n }}function cal07(n) { // i+=i 表示i=i+i=>i=2i,每次都乘以二,執行log2(n)次 // 所以外層迴圈執行1+2*log2(n)次,內層執行log2(n)*(1+3n)次 // (1+(3+2n)log2(n))*unit-time for (let i = 0; i < n; i += i) { for (j = 0; j < n; j++) { console.log('666'); } }}
常見的時間複雜度量級
int i = 1;int j = 2;++i;j++;int m = i + j;
for(int i=1;i<=n;i++){ console.log(i)}
for(int i=1;i<=n;i++){ console.log(i)}for(int i=1;i<=n;i++){ console.log(i)}
let i = 1;while(i<n){ i = i * 2;}
for(i=1; i<=n; i++){ for(j=1; j<=n; j++){ j = i; j++; }}
for(i=1; i<=m; i++){ for(j=1; j<=n; j++){ j = i; j++; }}
for(i=0; i<n; i++){ for(j=i; j<n; i++){ console.log(1) }}
for(m=1; m<n; m++){ i = 1; while(i<n){ i = i * 2; }}
分析斐波那契數的時間複雜度
//時間複雜度:其實就是看fun1方法被呼叫了多少次,呼叫了多少次就是執行了多少次,如果傳入的是5呼叫fun1(4)和fun1(3)依次推導共呼叫O(2^n)function fun1(n){ if(n<=1) return n; return fun1(n-1)+fun1(n-2);}//時間複雜度:O(n)function fun2(int n){ if(n<=1) return n; let first=0; let second=1; for (let i = 0; i <n-1 ; i++) { //每次加都是前兩個 let sum=first+second; first=second; second=sum; } return second;}
Leetcode(斐波那契數)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69996194/viewspace-2844153/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料分析的根基:資料採集的4大基本特徵
- 實用QPS和TPS高的高效分析方法
- 相親交友原始碼開發,前端API如何請求快取?
- 婚戀交友原始碼是如何與MySQL打交道的?
- SEO分析與關鍵詞優化到網站流量提升
- 【golang必備演算法】 Letecode 146. LRU 快取機制
- Spring Cloud Gateway過濾器精確控制異常返回(分析篇)
- 【堡壘機知識】三款大品牌堡壘機對比與分析
- 如何利用 JuiceFS 的效能工具做檔案系統分析和調優
- 【Pandas學習筆記01】強大的分析結構化資料的工具集
- 乾貨分享:資料分析的6大基本步驟
- 婚戀交友原始碼開發,採用連線複用實現效能優化
- 面試常考演算法題之並查集問題
- 中國汽車流通協會:2021年11月15日-21日車市掃描分析
- 易車研究院:2021紅旗汽車市場競爭力分析報告(附下載)
- 【JS 逆向百例】Ether Rock 空投介面 AES256 加密分析