Saya memiliki kode Python berikut.
def collatz(n):
if n <= 1:
return True
elif (n%2==0):
return collatz(n/2)
else:
return collatz(3*n+1)
Berapa waktu berjalan dari algoritma ini?
Mencoba:
Jika menunjukkan waktu fungsi berjalan . Maka saya pikir saya memiliki
{ T ( n ) = 1 untuk n ≤ 1 T ( n ) = T ( n / 2 ) untuk n bahkan T ( n ) = T ( 3 n + 1 ) untuk n ganjilcollatz(n)
Saya pikir akan menjadi lg n jika n adalah genap tetapi bagaimana menghitung pengulangan secara umum?
collatz
tag di MathOverflow dll. penelitian terbaru menunjukkan masalah memiliki kualitas fraktal intrinsik membuatnya sulit.Jawaban:
Ini adalah dugaan Collatz - masalah masih terbuka.∞
Dugaan adalah tentang bukti bahwa urutan ini berhenti untuk input apa pun, karena ini tidak terselesaikan, kita tidak tahu bagaimana menyelesaikan hubungan pengulangan runtime ini, apalagi itu mungkin tidak berhenti sama sekali - jadi sampai terbukti, waktu berjalan tidak diketahui dan mungkin .
sumber
Anda menerjemahkan kode dengan benar . Ada banyak metode untuk menyelesaikan perulangan .
Namun, saat ini tidak diketahui apakah
collatz
bahkan berhenti untuk semuan
; klaim yang dilakukannya dikenal sebagai dugaan Collatz . Oleh karena itu, tidak ada metode yang dikenal akan bekerja pada perulangan ini.sumber
Fungsi kompleksitas waktu adalah
yang dapat ditulis ulang sebagai berikut jika Anda tertarik pada kompleksitas waktu asimptotik.
Dugaan Collatz adalah dugaan yang sangat terkenal yang diusulkan Collatz pada tahun 1937. Banyak matematikawan terkemuka telah menghabiskan (baca terbuang) berjam-jam dalam mencoba untuk menyelesaikan dugaan ini tetapi sedikit berhasil. Bahkan Paul Erds berkata tentang dugaan Collatz, "Matematika belum siap untuk masalah seperti itu."
sumber
sumber
Anda memiliki T (n) = T (n / 2) + 1 jika n adalah genap. Tapi kemudian n / 2 sangat mungkin bahkan tidak, jadi Anda terjebak di sana.
Yang terjadi adalah bahwa aturan kecil yang Anda pelajari dihadapkan pada masalah nyata, dan aturan itu tidak berfungsi. Mereka menabrak dinding bata, muka terlebih dahulu, dan itu menyakitkan. Bantulah diri Anda sendiri, dan ikuti rekursi untuk T (7) secara manual, dan kemudian Anda memberi tahu jika Anda masih yakin ini terkait lg n.
Jika Anda berpikir ini tidak terkait dengan pertanyaan asli karena 7 tidak genap: Kapanpun n ganjil, T (n) = T (3n + 1), dan 3n + 1 adalah genap, jadi jika T (n) dicatat n jika n adalah genap, itu akan menjadi log (3n + 1) + 1 setiap kali n> 1 ganjil.
sumber