[英]Stack implemented with dynamic array
假設我們使用動態分配的數組實現堆棧。 如果陣列填滿,我們將面臨兩難選擇。 從以下選項中,選擇最能描述我們處理填充數組的策略的選項。
(a)我們聲明一個新的數組,是原始數據的兩倍,並在一系列n次推送中將數據復制到新空間中,總成本為O(n)。
(b)我們聲明另一個數組,並跟蹤堆棧類的私有成員中兩個(或更多)數組中的哪一個包含堆棧的當前頂部。 每次推動我們花費O(1)。
(c)對於某些固定的k,我們創建一個大小為n + 2 ^ k的新數組,並將數據復制到新空間中,每次推送操作的平均成本為O(1)。
(d)我們避免使用動態分配的數組實現堆棧,因為必須重新分配內存是低效的。
(e)這些答案都不是合理的答復。
我很確定正確的答案是,但我不明白為什么那會是最好的答案呢? 其他人是否實用? 他們似乎對我好。 例如, c
與`a,no?幾乎相同? 為什么加倍有利然后增加一定數量呢? 其他選擇怎么樣 - 為什么他們不工作?
假設您的堆棧是128個元素,最后您必須在其中存儲4096個元素。 你需要多少倍才能在加倍時將數據調整為每次擴展128個項目?
這看起來像是家庭作業,也可能是帶回家的考試,所以我會故意留下一些答案。
a)嘗試為O(n)
索賠提供證據。 與b)的證據比較。
b)如何存儲使用的子陣列? (它一直是烏龜。)
c)嘗試為O(1)
斷言提供證據。 與您的a)證明相比較。
d)所有替代方案都有其低效率。 比較他們。 請注意,在實時編程中,您不能使用動態重新分配的數組,並且必須使用類似鏈接列表的內容。 為什么?
e)如果上述任何一項是合理的,這是微不足道的。 反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.