![](/img/trans.png)
[英]How does space complexity and time complexity work in the following scenario?
[英]How to know the time and space complexity of the following snapshot?
這就像一個漣波進位加法器(但它神奇地“知道”輸出何時穩定並提前提取)。 在每一步中,進位都將嚴格增加最低設置位的位置(如果沒有最低設置位,則無窮大)。 因此,每個位最多可以遞歸一次。 表示多少時間/空間取決於您的假設(將位數作為常數會產生無用的結果,從而使您無法將其與替代實現進行比較)。
顯然,這是一個尾部調用,可以將其重寫為循環,因此可以說,它占用的空間比假裝它實際使用了所有堆棧空間的空間要小。
同樣,可以以與位數相同的多個步長進行此操作,類似於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.