Saya terjebak dengan menganalisis kompleksitas waktu dari algoritma berikut:
def fun (r, k, d, p):
if d > p:
return r
if d = 0 and p = 0:
r <- r + k
return r
if d > 0:
fun (r, k + 1, d - 1, p)
if p > 0:
fun (r, k - 1, d, p - 1)
Panggilan root akan menjadi fun (0, 0, n, n)
, dan n
merupakan ukuran masalah.
Saya kira itu: Relasi perulangan adalah , yang setara dengan , dan .
Apakah analisis saya benar (saya tahu itu tidak terlalu lengkap dan tepat)? Jika memang ada cacat serius, tunjukkan atau tunjukkan saya bukti yang benar dan lengkap tentang kompleksitas waktu dari algoritma ini.
d>0
dan p>0
. Anda tidak menunjukkan apa fungsi kembali jika kita mencapai pernyataan if ke-3 dan ke-4. Apakah Anda bermaksud memiliki return
pernyataan setelah setiap doa rekursif fun
? (Apakah Anda bermaksud fun (r, k + 1, d - 1, p)
menjadi return fun (r, k + 1, d - 1, p)
?) Atau apakah Anda bermaksud memiliki return
pernyataan di akhir fungsi tubuh? Harap edit kodesemu Anda untuk memperjelas dan memastikan Anda menunjukkan apa yang dikembalikan dalam semua kasus yang mungkin.
d<=p
dan d>0
dan p>0
semua pegang. Apa yang seharusnya terjadi? Apakah algoritma membuat 2 doa rekursif ke fungsi? Atau apakah itu secara rekursif memohon fun(r, k + 1, d - 1, p)
dan kemudian segera kembali, tanpa memohon secara rekursif fun(r, k - 1, d, p - 1)
? Jika saya mengambil pseudocode Anda secara harfiah, tampaknya itu membuat 2 doa rekursif dan kemudian kembali dengan nilai pengembalian yang tidak ditentukan - tapi itu aneh dan membuat saya bertanya-tanya apakah ada kesalahan ketik / bug dalam pseudocode.