簡體   English   中英

為什么假設乘以n的時間復雜度是常數?

[英]Why is it assumpted that the time-complexity of multiplication by n is constant?

不管如何實現乘法(或除法)運算(即,它是軟件功能還是硬件指令),都無法在時間O(1)求解。 對於大的n值,處理器甚至無法通過一條指令進行計算。

在這樣的算法中,為什么這些操作是恆定的而不依賴於n

for (i = 1; i <= n; i++) {
    j = n;
    while (j > 1)
        j = j / 3;    //constant operation
}

時間復雜度不能衡量時間。 它是可以定義所需“基本操作”的一種度量。 通常,任何算術運算都被視為基本運算。 有時(例如,當考慮排序算法或哈希表操作的時間復雜性時),基本操作是比較。 有時,“基本運算”是對單個位的運算(在這種情況下, j=j/3將具有時間復雜度O(log(j)))。

傾向於遵循的規則是:

  • 如果您在談論排序或哈希表,那么基本操作就是比較
  • 如果您在談論任何其他實用算法,則基本運算是算術運算和賦值。
  • 如果您在談論P / NP類,則基本操作是確定性圖騰機的步驟數。 (我認為這等效於位操作)。
  • 如果您是作為復雜性理論專家談論實用算法的,則通常會假設基本類型具有〜log n位,而基本運算是這些〜log n位字的算術運算和賦值。

暫無
暫無

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

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