此代碼計算總共有多少個整數三元組爲0:完整代碼爲here。計算執行if語句的次數
initialise an int array of length n
int cnt = 0 // cnt is the number of triples that sum to 0
for (int i = 0; i < n; i++) {
for (int j = i+1; j < n; j++) {
for (int k = j+1; k < n; k++) {
if (array[i]+array[j]+array[k] == 0) {
cnt++;
}
}
}
}
現在,由羅伯特·塞奇威克書的算法,我讀到:
- 的
cnt
到0
初始化只執行一次。 cnt++
從0開始執行三次找到的次數。- if語句執行
n(n-1)(n-2)/6
次。
我已經做了一些實驗,他們都是真實的。但我完全不知道他們如何計算if語句執行的次數。 我不知道,但我認爲:
n
指從i to n
(n-1)
指從i+1
到n
(n-2)
指從j+1
到n
/6
我不知道什麼是根本這是爲了。
任何人都可以解釋如何計算這個?
部分表達式/ 6意味着除以6.參見二項式係數。從{0,...,n-1}中選擇3個元素的任何方法都對應於i,j和k中的一個選擇。 –
您不能將公式歸於循環變量(即,e'(n-1)'並不意味着'i + 1到n'或者(n-2)'不意味着'(j + 1)到n'),請看作爲求和結果的公式,在鏈接@amit張貼 – EvenPrime