簡體   English   中英

使用while循環來壓縮排序數組的時間和空間復雜度是多少?

[英]What is time and space complexity for concating sorted array by using while loop?

例如。 這是兩個數組

a = [1,3]
b = [2,4,5]

我用while循環對它進行排序

 var a=[1,3,6,7], b = [2, 4, 5]; var result = []; var aPointer = 0; var bPointer = 0; while (aPointer < a.length || bPointer < b.length) { if (bPointer == b.length ) { result.push(... a.slice(aPointer)); break; } if (aPointer == a.length ) { result.push(... b.slice(aPointer)); break; } if (a[aPointer] < b[bPointer]) { result.push(a[aPointer]); aPointer++; } else { result.push(b[bPointer]); bPointer++; } } console.log(result); 

我認為時間復雜度應為O(n + m)= O(n),空間復雜度應為O(m + n + m + n)= O(2(m + n))= O(2n)。 有沒有更好的方法來連接排序數組?

代碼不完全正確。 b所有元素都已添加到結果中,並且a仍具有值時,將執行else塊,從而導致無限循環,向結果數組添加undefined

更正了具有不同while條件的代碼,並最終串聯了兩個輸入數組之一中的剩余“ rest”:

 var a = [1, 3, 6, 7], b = [2, 4, 5]; var result = []; var aPointer = 0; var bPointer = 0; while (aPointer < a.length && bPointer < b.length) { if (a[aPointer] < b[bPointer]) { result.push(a[aPointer]); aPointer++; } else { result.push(b[bPointer]); bPointer++; } } result = result.concat(a.slice(aPointer), b.slice(bPointer)) console.log(result); 

時間復雜度為O(n + m) ,因為循環的每次迭代將一個值推入結果,結果最終將具有n + m個值。 對於兩個輸入數組之一的其余部分,最后的concatslice只是做相同操作的一種簡短方法。 因此,時間復雜度不受它的影響。

通常,空間復雜度僅在使用的額外空間中表示,因此不包括輸入所使用的空間。 因此,除了原子變量使用的某些恆定空間(例如aPointer )之外,還有result數組,該數組占用O(n + m)空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM