2011-11-27 132 views
0

我不是真的進入基礎算法編程,所以這是我的問題。我想創建一個算法,可以填充循環緩衝區,但它必須從緩衝區的末尾開始。我試圖做很多小時沒有成功,所以我要求你的幫助。逆循環緩衝區

我知道原來的算法由緩衝區的開頭開始: I =(I + 1)%buffLen

但我想要的東西,把東西從buffLen-1爲0,而當它到達0,它從buffLen-1開始。

我知道這可以做一個條件,但我敢肯定有一個公式可以做得更快,更乾淨。

我需要它在最後通過一個對象數組無限地迭代。

對不起,我的英語不好。

+0

更快?我懷疑你會發現任何差異。清潔器?我幾乎可以肯定,一個神祕的神祕公式將比一個簡單的if(i ==(bufLen - 1))i = 0'更難讀。這有什麼問題? (順便說一下,你是一個完美的例子,說明如何使用神祕的「公式」:你說你知道如何用if來做,但是你無法自己找到與模塊化算術等價的表達式...) –

回答

3

嘗試

i = (i + buffLen - 1) % buffLen; 

它不會是任何比更有效的(或者甚至那樣有效)的if..else構建體,但它是模擬到所述一個線分配用於在正方向上移動。

+0

對於很多編程語言,'i =(i-1)%buffLen'也可以工作,但Ted的解決方案更安全。 – Cito

+0

@Cito - 根據[維基百科文章](http://en.wikipedia.org/wiki/Modulo_operation),它將以極少數語言工作。它不適用於Java,JavaScript,C/C++或C#。 –

+0

好吧,可能我應該s/many/some,但至少它可以在Perl,Python和Ruby中使用。 – Cito