Проблем при опит да се намери асимптотичното време на изпълнение на повторение

Опитвам се да разбера времето за изпълнение на алгоритъм. Това е сортиране, което работи чрез разделяне на проблема на групи от 2/3 (това е CLR сортирането). Имам някои проблеми да го измисля, ето какво имам:

T(n)=3T([2n]/3)+1 (1 е, защото освен рекурсивните повиквания, има един обмен, който може или не може да бъде направен. Ако приемем, че е направен, това все още е само постоянна цена .)

T(n)=3T([2([2n]/3+1)]/3+1)+1
T(n)=3T([2([2([2n]/3+1)]/3+1)]/3+1)+1
T(n)=3T([2([2([2([2n]/3+1)]/3+1)]/3+1)]/3+1)+1

и т.н......докато можем да предположим, че в някакъв момент най-накрая сме достигнали основния случай за T(n) и ще получим постоянна стойност 1 за това време на изпълнение. Това ни дава:

3([2([2([2([2(...........)]/3+1)]/3+1)]/3+1)]/3+1)+1 with logn terms (that's the "......." in the middle). This gives:

3*(2n/3+1)^(logn)+1*logn

3*(2n/3+1)^(logn)+logn           

Тогава мисля, че тъй като, ако основата на логаритъма беше 2n/3+1, можем да го опростим просто да бъде 3*logn+logn, можем да го направим. (Продължавам да чувам, че когато правим асимптотична нотация, основите на логаритмите, които сме избрали, нямат значение....)

Това става 4logn. Коефициентът намалява, за да стане просто logn.

Дали това е правилно? Не съм сигурен дали разширих това правилно или дали манипулациите ми с регистрационния файл бяха законни... Освен това какъв е този краен резултат - голямо-O, тита и т.н. Не съм сигурен какво гледам. ..

Благодаря.


person Jo.P    schedule 15.02.2013    source източник


Отговори (1)


Можете да разгледате тази страница, за да получите общо решение за рекурентна връзка за алгоритми "разделяй и владей".

В този случай b = 3/2, a = 3 и f(n) = O(1). лог база 3/2 от 3 е около 2,709, така че използваме случай 1, което означава, че времето за изпълнение е O(n^2,709).

Надявам се това да помогне!

person moowiz2020    schedule 22.03.2013