簡體   English   中英

如何知道以下快照的時間和空間復雜性?

[英]How to know the time and space complexity of the following snapshot?

我了解以下快照中的代碼是如何工作的,但我很好奇我如何知道它的時間和空間復雜性?

我知道這取決於“ b”變為零所花費的時間。 有什么數學方法可以找到這個嗎? 我知道這絕不會涉及數百萬次遞歸。 但是仍然好奇會發生多少次遞歸?

問題:加2個數字而不使用任何算術運算- 在此處輸入圖片說明

這就像一個漣波進位加法器(但它神奇地“知道”輸出何時穩定並提前提取)。 在每一步中,進位都將嚴格增加最低設置位的位置(如果沒有最低設置位,則無窮大)。 因此,每個位最多可以遞歸一次。 表示多少時間/空間取決於您的假設(將位數作為常數會產生無用的結果,從而使您無法將其與替代實現進行比較)。

顯然,這是一個尾部調用,可以將其重寫為循環,因此可以說,它占用的空間比假裝它實際使用了所有堆棧空間的空間要小。

同樣,可以以與位數相同的多個步長進行此操作,類似於Kogge-Stone加法器。

由於進位是a&b左移,因此其bit-0(最低有效位或LSB)為零。 同樣,進位在每個位置p都為零,而b在位置p-1上為零。 這意味着在第一個遞歸調用中,b的位為零,而在第二個遞歸調用中,其第0位和第1位的位為零(2個LSB為零),依此類推。 在第n個遞歸調用中,b將具有n個LSB為0,因此當n是a中最高有效非零位的位置時,進位將為零,並且遞歸將在下一個調用中結束。

因此,時間復雜度為O(n),其中n是a中的位數(更准確地說,是a中最高有效非零位的位置,在最壞的情況下,它將是a中的位數) 。 空間復雜度也是O(n),因為存在n個遞歸調用,但是由於這是尾部遞歸,因此可以將其優化掉,因此優化后的空間復雜度將是O(1)。

暫無
暫無

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

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