Этот код подсчитывает, сколько целых тройных сумм равно 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. См. Биномиальные коэффициенты. Любой способ выбрать 3 элемента из {0, ..., n-1} соответствует одному выбору i, j и k. –
Вы не можете приписать формулу к переменным цикла (i.e '(n-1)' не означает 'i + 1 to n' или' (n-2) 'не означает' (j + 1) до n'), подумайте о формуле в результате суммирования, Look по ссылке @amit опубликовано – EvenPrime