Часова складність потрійного циклу


13

Будь ласка, врахуйте наступний потрійний вклад:

for (int i = 1; i <= n; ++i)
    for (int j = i; j <= n; ++j)
        for (int k = j; k <= n; ++k)
            // statement

Тут заява виконується рівно разів. Невже хтось може пояснити, як отримана ця формула? Дякую.n(n+1)(n+2)6


Відповіді:


14

Ви можете порахувати, скільки разів виконується найпотужніша для циклу, підраховуючи кількість трійки за яку вона виконується.(i,j,k)

За умовами циклу ми знаємо, що: . Ми можемо звести її до наступної простої проблеми комбінаторики.1ijkn

  • Уявіть поля червоного кольору, розміщені в масиві зліва направо.n+2
  • Виберіть будь-які 3 ящики з ящиків і пофарбуйте їх у синій колір.n+2
  • Утворіть триплет наступним чином: (i,j,k)
    • i = 1 + кількість коробок червоного кольору зліва від першого синього поля.
    • j = 1 + кількість коробок червоного кольору зліва від другого синього поля.
    • k = 1 + кількість коробок червоного кольору зліва від третього синього поля.

Отже, нам просто потрібно порахувати кількість способів вибору 3 коробок з коробок, що .n+2(n+23)


2
Гарна відповідь! Точні значення i, j, k не важливі. Нам просто потрібно знати, що будь-який синій ящик може бути розміщений на n можливих позиціях і що їхні позиції обмежені: 2-е місце відбувається завжди після 1-го і перед 3-м.
Dávid Natingga

@rizwanhudda Ясно, за винятком частини в . Чи можете ви поясніть це будь ласка? виглядає як правильне число. +2n+2n+3
saadtaame

1
@saadtaame Так. Ви можете уявити собі червоних коробок, але маючи свободу вибирати 3 червоних поля для фарбування синього кольору з-поміж " червоних коробок", оскільки ви не можете пофарбувати перший ящик у синій (Оскільки )n+3n+2i1
rizwanhudda

3

для мене простіше помітити, що внутрішня петля виконується раз, а загальна кількість виконань у внутрішньому циклі становитьni

(ni)+(ni1)+(ni2)++1

це може бути переписано як і виконується разів, тому загальна кількість страт становитьj=0ninijn

i=0nj=0ninij=n(n+1)(n+2)6

Проблема для вас: Уявіть, що у вас є х-вкладений цикл. Згідно з попередньою відповіддю, він би виконував (n + x-1) вибір x разів. Як би ви обчислили свою формулу?
Dávid Natingga

на щастя, ОП не просив x-ugnez! Як інша відповідь, що надається, розширюється на х-вкладений цикл? У моїй відповіді просто слід отримати більше сум від 0 до n, 0 до n-i_1, 0 до n-i_2, ..., 0 до n-i_x. Але я не знаю, як це обчислити.
Andy mcevoy

1
Відповідь не поширюється явно на загальний х, але представлений процес міркування легко слідкувати за x-вкладеними петлями. Ви просто додаєте більше синіх коробок. Ні я не знаю, як би я обчислив ці більші суми.
Dávid Natingga
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.