Arrange given numbers to form the biggest number給出算法。 它使用以下文本來證明算法的正確性:如何證明「排列給定數字以形成最大數字」算法的正確性?
那麼我們該如何去做呢?這個想法是使用任何基於比較的排序算法。在使用的排序算法中,不是使用默認比較,而是編寫比較函數myCompare()並使用它對數字進行排序。給定兩個數字X和Y,myCompare()應該如何決定首先放置哪個數字 - 我們將兩個數字XY(Y的末尾附加Y)和YX(Y的末尾附加X)進行比較。如果XY更大,那麼X應該在Y之前輸出,否則Y應該早於之前。例如,讓X和Y分別爲542和60.爲了比較X和Y,我們比較了54260和60542.由於60542大於54260,我們首先將Y設爲Y。
考慮三個numers:X
,Y
和Z
。使用X -> Y
表示X
應該在Y
之前。基於比較算法可以用下面的兩個比較排序X
,Y
和Z
到XYZ
:XY >= YX
=>X -> Y
和YZ >= ZY
=>Y -> Z
。但是這兩個比較並不一定確保XYZ
是最大的數字。換句話說,X
應該在Y
和Y
之前出現的事實應該在Z
之前,並不一定確保XYZ
構成最大的數字。以YZX
爲例。爲了證明XYZ >= YZX
,我們需要證明應該在YZ
之前整體形成一個更大的數字X(YZ) >= (YZ)X
。
任何人都可以給出算法的正確性的正式證明?
你能找到X','Y'的'一個例子,算法不能正確工作的'Z'? –
這是什麼問題? – Henry
@BJMyers我不能。但我無法證明這樣的反例不存在。 –