貪心演算法——最大整數問題詳解:
[最大整數]設有n個正整數,將它們連線成一排,組成乙個最大的多位整數。
例如:n=3時,3個整數13,312,343,連成的最大整數為34331213。
又如:n=4時,4個整數7,13,4,246,連成的最大整數為7424613。
輸入:n
n個數輸出:連成的多位數
演算法分析:此題很容易想到使用貪心法,在考試時有很多同學把整數按從大到小的順序連線起來,測試題目的例子也都符合,但最後測試的結果卻不全對。按這種標準,我們很容易找到反例:12,121應該組成12121而非12112,那麼是不是相互包含的時候就從小到大呢?也不一定,如12,123就是12312而非12123,這種情況就有很多種了。是不是此題不能用貪心法呢?
其實此題可以用貪心法來求解,只是剛才的標準不對,正確的標準是:先把整數轉換成字串,然後在比較a+b和b+a,如果a+b>=b+a,就把a排在b的前面,反之則把a排在b的後面。
c++源**:
#if 1
//貪心演算法——最大整數
#include
#include
#include
#include
using namespace std;
string str[3] = ;
string getstrfromint(int n)
string greedyalgorithm(int n)
;string strmax = "";
cout << "please input the data:" << endl;
int m = n;
while (m--)
}//核心演算法———將整數轉為字串,連線起來進行比較
for (int i = 0; i < n; ++i)
for (int i = 0; i < n; ++i)}}
for (int i = 0; i < n; ++i)
return strmax;
}int main()
#endif
貪心演算法詳解
一 基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇 也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須...
貪心演算法詳解
一 簡介 1.1 貪心演算法基本思想 貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀...
貪心演算法詳解
貪心演算法 總是作出當前看來最好的選擇。也就是說貪心演算法並不從整體最優考慮,他所做出的選擇只是在某種意義上的區域性最優選擇。但對許多問題它能產生整體最優解。在一些情況下,即使貪心演算法不能得到整體最優解,其最終結果卻是最優解的很好近似。應用貪心思想的常用問題 單源最短路徑問題,最小生成樹問題,哈夫...