Rumah > Java > javaTutorial > teks badan

Mencari Nombor Fibonacci Menggunakan Pengaturcaraan Dinamik

WBOY
Lepaskan: 2024-07-17 00:12:31
asal
518 orang telah melayarinya

Bahagian ini menganalisis dan mereka bentuk algoritma yang cekap untuk mencari nombor Fibonacci menggunakan pengaturcaraan dinamik. Bahagian 18.3, Kajian Kes: Mengira Nombor Fibonacci, memberikan kaedah rekursif untuk mencari nombor Fibonacci, seperti berikut:

/**Kaedah untuk mencari nombor Fibonacci*/
fib panjang statik awam (indeks panjang) {
if (indeks == 0) // Kes asas
pulangkan 0;
else if (indeks == 1) // Kes asas
pulangkan 1;
else // Pengurangan dan panggilan rekursif
kembalikan fib(indeks - 1) + fib(indeks - 2);
}

Kini kita boleh membuktikan bahawa kerumitan algoritma ini ialah O(2^n). Untuk kemudahan, biarkan indeksnya n. Biarkan T(n) menandakan kerumitan untuk algoritma yang mencari fib(n) dan c menandakan masa malar untuk membandingkan indeks dengan 0 dan 1; iaitu T(1) dan T(0) ialah c. Oleh itu,

Image description

Sama seperti analisis masalah Menara Hanoi, kita boleh menunjukkan bahawa T(n) ialah O(2^n).

Walau bagaimanapun, algoritma ini tidak cekap. Adakah terdapat algoritma yang cekap untuk mencari nombor Fibonacci? Masalah dengan kaedah fib rekursif ialah kaedah itu digunakan secara berlebihan dengan hujah yang sama. Contohnya, untuk mengira fib(4), fib(3) dan fib(2) digunakan. Untuk mengira fib(3), fib(2) dan fib(1) digunakan. Ambil perhatian bahawa fib(2) digunakan secara berlebihan. Kita boleh memperbaikinya dengan mengelak daripada memanggil berulang kali kaedah fib dengan hujah yang sama. Ambil perhatian bahawa nombor Fibonacci baharu diperoleh dengan menambah dua nombor sebelumnya dalam jujukan. Jika anda menggunakan dua pembolehubah f0 dan f1 untuk menyimpan dua nombor sebelumnya, nombor baharu, f2, boleh diperolehi serta-merta dengan menambah f0 dengan f1. Sekarang anda harus mengemas kini f0 dan f1 dengan memberikan f1 kepada f0 dan menugaskan f2 kepada f1 , seperti yang ditunjukkan dalam Rajah di bawah.

Image description

Kaedah baharu dilaksanakan dalam kod di bawah.

Image description

Masukkan indeks untuk nombor Fibonacci: 6
Nombor Fibonacci pada indeks 6 ialah 8

Masukkan indeks untuk nombor Fibonacci: 7
Nombor Fibonacci pada indeks 7 ialah 13

Jelas sekali, kerumitan algoritma baharu ini ialah O(n). Ini merupakan peningkatan yang luar biasa terhadap algoritma O(2^n) rekursif.

Algoritma untuk mengira nombor Fibonacci yang dibentangkan di sini menggunakan pendekatan yang dikenali sebagai pengaturcaraan dinamik. Pengaturcaraan dinamik ialah proses menyelesaikan submasalah, kemudian menggabungkan penyelesaian submasalah untuk mendapatkan penyelesaian keseluruhan. Ini secara semula jadi membawa kepada penyelesaian rekursif. Walau bagaimanapun, adalah tidak cekap untuk menggunakan rekursi, kerana submasalah bertindih. Idea utama di sebalik pengaturcaraan dinamik adalah untuk menyelesaikan setiap submasalah sekali sahaja dan menyimpan keputusan untuk submasalah untuk kegunaan kemudian bagi mengelakkan pengkomputeran berlebihan bagi submasalah.

Atas ialah kandungan terperinci Mencari Nombor Fibonacci Menggunakan Pengaturcaraan Dinamik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!