這可能是一個愚蠢的問題,但我想計算一個算法的複雜度,而且我不確定要爲memmove()函數考慮什麼複雜性。我應該考慮memmove()O(n)還是O(1)?
你能幫忙/解釋一下嗎?
void * memmove (void * destination, const void * source, size_t num);
因此是O(num)或O(1)的複雜性。我想這是O(num),但我不確定,因爲我現在缺乏對引擎蓋下發生的事情的理解。
這可能是一個愚蠢的問題,但我想計算一個算法的複雜度,而且我不確定要爲memmove()函數考慮什麼複雜性。我應該考慮memmove()O(n)還是O(1)?
你能幫忙/解釋一下嗎?
void * memmove (void * destination, const void * source, size_t num);
因此是O(num)或O(1)的複雜性。我想這是O(num),但我不確定,因爲我現在缺乏對引擎蓋下發生的事情的理解。
由於memmove
的運行時間與需要移動的字節數成正比增加,因此爲O(n)。
O(n)是正確的漸近複雜度,但我不認爲我會在這種情況下使用術語「直接比例」,即使像「memmove」這樣簡單的東西。考慮在32位架構上n = 4與n = 1個字節:n = 1的情況實際上可能是更昂貴的操作! – 2010-04-25 21:42:18
這是'O(n)',其中'n'是傳遞給'memmove()'的計數 - 但這可能與您用來表徵算法的'n'成比例。 – caf 2010-04-26 00:05:14
你是如何將memmove()
操作應用到算法中的所選元素或全部元素的?你是否多次將memmove()
應用於元素?
這些都是對算法的複雜性有影響的事情。
即答案可以是不同的,所述的memmove()
本身複雜關於char
元件陣列,與(對於該memmove()
爲O(n)的操作)memmove()
交易。
正確的答案可能是它依賴於實現。你可以想象一個不尋常的系統,其中內存實際上是一些複雜的圖形或鏈表。在每個真實的系統中,我知道它與num成正比。 – 2010-04-25 21:29:12