Saya mengalami banyak masalah dengan masalah algoritma ini. Saya seharusnya menemukan analisis theta besar dari algoritma berikut:
function example(n):
int j=n
for i=0;i<n;i++:
doSomethingA()
for k=0;k<=j;k++:
doSomethingB()
j/=2
Pendekatan saya adalah membagi keseluruhan eksekusi algoritma menjadi dua bagian. Satu bagian di mana doSomethingA() dan doSomethingB() keduanya dipanggil, dan bagian kedua setelah j menjadi 0 dan hanya doSomethingA() yang dipanggil hingga program berhenti.
Dengan pendekatan ini, Anda memiliki bagian 1 yang terjadi untuk iterasi Logn pada loop luar, bagian 2 terjadi untuk iterasi n-logn pada loop luar.
Berapa kali loop dalam berjalan dibelah dua untuk setiap proses, sehingga total berapa kali loop tersebut berjalan harus 2n-1. Jadi runtime untuk bagian 1 harus (2n-1)*c, sebuah konstanta. Saya tidak sepenuhnya yakin apakah ini valid
Untuk bagian 2, usaha di dalam perulangan selalu konstan, dan perulangan berulang (n-logn) kali.
Jadi kita punya ((2n-1)+(n-logn))*c
Saya tidak yakin apakah pekerjaan yang saya lakukan sampai di sini sudah benar, saya juga tidak yakin bagaimana melanjutkannya. Intuisi saya memberi tahu saya bahwa ini adalah O(n), tetapi saya tidak yakin bagaimana merasionalisasikannya dalam big-theta. Selain itu, mungkin seluruh pendekatan saya memiliki kelemahan. Bagaimana saya harus menyerang pertanyaan seperti ini? Jika pendekatan saya valid, bagaimana saya harus menyelesaikannya?
Terima kasih.