簡體   English   中英

在復雜性分析中,為什么++被認為是2個操作?

[英]In Complexity Analysis why is ++ considered to be 2 operations?

在我的計算機科學II課程中,教授認為++, - ,* =等是2個操作。 但是,在大會一級,這實際上不是兩個行動。 有人可以解釋一下,或者這只是為了簡單起見?

我實際上認為它是3個操作:讀取,增量(或其他),寫入。 這是假設它從某種共享內存讀取到某種本地存儲(例如寄存器或堆棧),在本地存儲上運行,然后寫回。

裝配級別的操作數量取決於您正在增加的內容,平台,硬件等。

因為++(例如:b ++)是一種簡化

b = b + 1 

那里有兩個操作,加法(b + 1)然后分配給原始變量的加法值。

為什么在進行復雜性分析時會煩惱? 這只是O(1):-)

編輯:請在投票時告訴我原因。 由於問題是標記復雜性 ,我認為大O概念是最重要的,而不是實際的常量。 此外,正如其他答案中已經提到的,這取決於許多因素:計算操作,平台,編譯器等的方式。

我要猜幾點。

  • 你的教授是指解釋語言嗎?
  • ++我與i ++不同,也許他指的是那個?
  • 也許他的組裝選擇需要中間存儲變量?

     add reg_temp, reg_i, 1 mov reg_i, reg_temp 

這不是一個額外加上一個二傳手嗎?

與i + = 1相似?

教授可能只是指必須取值,向其中加1,然后將其分配回變量。

在匯編級別,所有操作都在寄存器中完成,因此在A中有一個變量

ADD AX,1

但是,在編譯語言中,必須存儲所有內容,以便i ++成為(在偽程序集中)

MOV AX,i
ADD AX, 1
MOV i, AX

這是三個操作......除非我完全忘記了我的基本架構......

你讓我想起了很久以前我聽過的有點“ 陪審團不出來 ”的問題。

“預先增量比后增長更快”

我只是做了一個快速的谷歌搜索。

  1. 很多人仍然認為這是真的。
  2. 其他人則認為編譯器是如此優化的,不能對比較高級別的代碼進行基准測試。
  3. 然而其他人則認為沒有區別。

在我看來它應該超過2,因為它有兩個含義取決於上下文,當我看到它時我總是要提醒自己。

a = b++a = b; b = b + 1相同a = b; b = b + 1 a = b; b = b + 1

a = ++bb = b + 1; a = b b = b + 1; a = b

這足以讓大多數一年級學生離開懸崖。

暫無
暫無

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

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