W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
Question
給定一個正整數
圖 15-13 最大切分乘積的問題定義
假設我們將
本題目標是求得所有整數因子的最大乘積,即
我們需要思考的是:切分數量
根據經驗,兩個整數的乘積往往比它們的加和更大。假設從
如圖 15-14 所示,當
貪心策略一:如果切分方案中包含
圖 15-14 切分導致乘積變大
接下來思考哪個因子是最優(yōu)的。在
如圖 15-15 所示,當
貪心策略二:在切分方案中,最多只應存在兩個
圖 15-15 最優(yōu)切分因子
總結以上,可推出以下貪心策略。
如圖 15-16 所示,我們無須通過循環(huán)來切分整數,而可以利用向下整除運算得到
請注意,對于
max_product_cutting.cpp
/* 最大切分乘積:貪心 */
int maxProductCutting(int n) {
// 當 n <= 3 時,必須切分出一個 1
if (n <= 3) {
return 1 * (n - 1);
}
// 貪心地切分出 3 ,a 為 3 的個數,b 為余數
int a = n / 3;
int b = n % 3;
if (b == 1) {
// 當余數為 1 時,將一對 1 * 3 轉化為 2 * 2
return (int)pow(3, a - 1) * 2 * 2;
}
if (b == 2) {
// 當余數為 2 時,不做處理
return (int)pow(3, a) * 2;
}
// 當余數為 0 時,不做處理
return (int)pow(3, a);
}
圖 15-16 最大切分乘積的計算方法
時間復雜度取決于編程語言的冪運算的實現方法。以 Python 為例,常用的冪計算函數有三種。
**
和函數 pow()
的時間復雜度均為 math.pow()
內部調用 C 語言庫的 pow()
函數,其執(zhí)行浮點取冪,時間復雜度為 變量
使用反證法,只分析
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: