貪心演算法 最大整數問題詳解

2021-07-11 00:09:15 字數 1044 閱讀 5481

貪心演算法——最大整數問題詳解:

[最大整數]設有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 貪心演算法基本思想 貪心演算法 又稱貪婪演算法 是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀...

貪心演算法詳解

貪心演算法 總是作出當前看來最好的選擇。也就是說貪心演算法並不從整體最優考慮,他所做出的選擇只是在某種意義上的區域性最優選擇。但對許多問題它能產生整體最優解。在一些情況下,即使貪心演算法不能得到整體最優解,其最終結果卻是最優解的很好近似。應用貪心思想的常用問題 單源最短路徑問題,最小生成樹問題,哈夫...