[英]In Complexity Analysis why is ++ considered to be 2 operations?
在我的計算機科學II課程中,教授認為++, - ,* =等是2個操作。 但是,在大會一級,這實際上不是兩個行動。 有人可以解釋一下,或者這只是為了簡單起見?
我實際上認為它是3個操作:讀取,增量(或其他),寫入。 這是假設它從某種共享內存讀取到某種本地存儲(例如寄存器或堆棧),在本地存儲上運行,然后寫回。
裝配級別的操作數量取決於您正在增加的內容,平台,硬件等。
因為++(例如:b ++)是一種簡化
b = b + 1
那里有兩個操作,加法(b + 1)然后分配給原始變量的加法值。
為什么在進行復雜性分析時會煩惱? 這只是O(1):-)
編輯:請在投票時告訴我原因。 由於問題是標記復雜性 ,我認為大O概念是最重要的,而不是實際的常量。 此外,正如其他答案中已經提到的,這取決於許多因素:計算操作,平台,編譯器等的方式。
我要猜幾點。
也許他的組裝選擇需要中間存儲變量?
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
這是三個操作......除非我完全忘記了我的基本架構......
你讓我想起了很久以前我聽過的有點“ 陪審團不出來 ”的問題。
“預先增量比后增長更快”
我只是做了一個快速的谷歌搜索。
在我看來它應該超過2,因為它有兩個含義取決於上下文,當我看到它時我總是要提醒自己。
a = b++
與a = b; b = b + 1
相同a = b; b = b + 1
a = b; b = b + 1
和
a = ++b
與b = b + 1; a = b
b = b + 1; a = b
這足以讓大多數一年級學生離開懸崖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.