This commit is contained in:
krahets
2025-09-20 20:08:10 +08:00
parent fe56286bb0
commit 36350f0058
42 changed files with 363 additions and 353 deletions
@@ -3628,6 +3628,9 @@
<p>不是,該圖展示的是空間複雜度,其反映的是增長趨勢,而不是佔用空間的絕對大小。</p>
<p>假設取 <span class="arithmatex">\(n = 8\)</span> ,你可能會發現每條曲線的值與函式對應不上。這是因為每條曲線都包含一個常數項,用於將取值範圍壓縮到一個視覺舒適的範圍內。</p>
<p>在實際中,因為我們通常不知道每個方法的“常數項”複雜度是多少,所以一般無法僅憑複雜度來選擇 <span class="arithmatex">\(n = 8\)</span> 之下的最優解法。但對於 <span class="arithmatex">\(n = 8^5\)</span> 就很好選了,這時增長趨勢已經佔主導了。</p>
<p><strong>Q</strong> 是否存在根據實際使用場景,選擇犧牲時間(或空間)來設計演算法的情況?</p>
<p>在實際應用中,大部分情況會選擇犧牲空間換時間。例如資料庫索引,我們通常選擇建立 B+ 樹或雜湊索引,佔用大量記憶體空間,以換取 <span class="arithmatex">\(O(\log n)\)</span> 甚至 <span class="arithmatex">\(O(1)\)</span> 的高效查詢。</p>
<p>在空間資源寶貴的場景,也會選擇犧牲時間換空間。例如在嵌入式開發中,裝置記憶體很寶貴,工程師可能會放棄使用雜湊表,選擇使用陣列順序查詢,以節省記憶體佔用,代價是查詢變慢。</p>
<!-- Source file information -->