2015-09-14 31 views
1

效率嵌套for循環的比b大得多,將有鑑於<code>a</code>千差萬別計數

for (i = 0; i < a; i++) 
    for (k = 0 k < b; k++) 

for (i = 0; i < b; i++) 
    for (k = 0 k < a; k++) 

我感覺我快前者會更快,但我似乎無法讓我的頭在這附近。

+0

這取決於循環內部的內容,不是嗎?您需要顯示您計劃在有問題的循環內運行的內容。 –

+1

這是'a * b'和'b * a'之間的差異 - 即沒有。 – Blorgbeard

+0

@Blorgbeard例如,如果循環的內容涉及訪問'foo [i] [k]',那麼它可能並不是什麼都沒有,並且一個命令導致列主迭代(更慢)。但是,這實際上取決於循環中所做的具體細節。 –

回答

2

那它真的取決於你在做什麼。不知道正在做什麼,很難做運行時分析。這就是說,如果你使用這段代碼遍歷一個大型的數組,那麼更重要的是遍歷每一行中的每一列,而不是反過來。

[0] [1] [2]

[3] [4] [5]

[6] [7] [8]

是真的[0] [1 ] [2] [3] [4] [5] [6] [7] [8]。

當內存訪問靠近時,您的計算機的緩存提供了更大的優勢,順序通過內存而不是跳過行提供更多的本地化。

1

開始循環需要付出努力;循環變量本身加上在循環中聲明的變量,這些變量都被分配內存並被壓入堆棧。

這意味着次數越少,你進入循環越好,這樣循環在範圍在循環。