2016-03-03 125 views
0

我目前正在做一些shearSorting,並且無法弄清當這個操作應該用n×n矩陣完成。如何知道什麼時候ShearSorting完成

我現在正在做的是我將循環的每次迭代開始時的矩陣複製到臨時矩陣,然後在循環的每次迭代結束時,我將原始和溫度矩陣,如果它們是相同的,那麼我會跳出循環並退出。我不喜歡這種方法,因爲我們總是在分類和完成矩陣之後經歷一次額外的迭代,這會浪費CPU時間和週期。

必須有更好的方法來做這個檢查。我一直髮現引用log(n)來表示我們需要多少次迭代,但我不相信它們意味着實際log(n)爲log(5),對於0.69中的5x5矩陣,迭代次數是不可能的。

有什麼建議嗎?

回答

0

因此,我知道shearSort需要log(n)運行迭代才能完成,因此對於5x5矩陣的情況,我們將有3次運行的行和3次運行的列。但是,如果我給出的5x5矩陣幾乎被排序並且只需要一到兩次迭代即可完成,那麼我認爲在6次迭代中看不到點,因爲這被認爲是CPU功率的浪費和週期。

此外,我們有以下解決方案:如果我們將shearSort函數的每次迭代開始時的矩陣複製到臨時矩陣,並且在每次迭代結束時我們將兩個矩陣比較在一起,它們是相同的,那麼我們知道我們完成了(注意這裏迭代意味着行和列排序,因爲矩陣可能最初不需要行排序,但是需要列排序)。在這種情況下,如果矩陣不需要N + 1次迭代,我們將保留CPU週期,但是這種解決方案會提供一個問題,即當需要N + 1次迭代時,我們將進行N + 3次迭代來完成額外的2次迭代將是檢查2個矩陣對於行是否相同以及對於列是否相同)。

爲了解決這個問題,我們將不得不使用這兩種解決方案的組合:

我們仍然會複製在啓動矩陣,並在最後比較臨時矩陣,如果它們相等之前我們得到的N + 1次迭代,那麼我們就完成了,不需要再繼續下去了,如果它們不是,那麼我們進入N + 1迭代並停止,因爲我們知道此時矩陣應該在N + 1之後排序迭代。

相關問題