[英]Performance of array analysis using Arrays.sort
我有一個以以下方式使用Arrays.sort(char[])
的代碼:
void arrayAnalysis(String[] array){
for(int a=0; a<array.length;a++){
char[] letters = array[a].toCharArray();
Arrays.sort(letters);
...
for(int b=a+1; b<array.length;b++){
char[] letters2 = array[b].toCharArray();
Arrays.sort(letters2);
if(Arrays.equals(letters, letters2)
print("equal");
}
}
}
在這種情況下,n等於數組大小。 由於嵌套的for循環,性能自動為O(n ^ 2)。 但是,我認為Arrays.sort(帶有O(nlog(n)))也會影響性能,並使其比O(n ^ 2)差。 這種想法正確嗎?
最終的表現是O(n * nlog(n)*(n * nlog(n))還是我離開?
謝謝。
編輯:我應該補充一點,盡管n與數組大小有關,但Arrays.sort正在處理數組元素中的字母數。 如果應該將其添加到性能分析中,這就是我困惑的一部分。
Edit2:如果下選民留下評論為什么認為這是一個壞問題,那將很酷。
如果n
是數組的長度,並且m
是每個array[i]
的長度,那么您將在n^2
次迭代中的每一次迭代上執行O(m log m)
排序,因此總的來說是O(n^2 (m log m))
(或O(n^3 log n)
如果n == m
。[編輯:現在,我對此進行了更多思考,您的猜測是正確的,而這是錯誤的復雜性。以下仍然正確!]]
不過,這並不是必須的。 您可以只對數組進行排序,然后使用該數組進行嵌套的for循環。 看看a
為0時會發生什么:首先對array[0]
排序,然后在內部的for循環中,對array[1]
到array[n]
排序。
然后,當a
為1時,首先對array[1]
排序,然后在內部for循環array[2]
到array[n]
排序。 但是您已經對所有內容進行了排序 ,並且好像它在此期間不會發生變化。
您運行了n個外部循環,每個循環都運行n個內部循環,每個循環都調用O( n log n )算法,因此最終的結果(沒有層之間的任何交互作用)為O( n 3 log n )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.