Rumah >Java >javaTutorial >Masalah persilangan senarai terpaut kitaran atau akiklik
Terdapat beberapa algoritma yang boleh digunakan untuk menentukan sama ada dua senarai terpaut bersilang, walaupun satu atau kedua-duanya mempunyai kitaran. Satu pendekatan biasa ialah menggunakan algoritma pencarian kitaran Floyd untuk mengesan kehadiran kitaran dalam setiap senarai. Jika mana-mana senarai mempunyai kitaran, algoritma akan mengembalikan titik permulaan kitaran. Jika kedua-dua senarai mempunyai kitaran, algoritma akan mengembalikan titik permulaan kitaran biasa. Setelah kitaran telah dikesan, titik persilangan boleh ditemui dengan merentasi kedua-dua senarai secara serentak, bermula dari titik permulaan kitaran dalam setiap senarai. Titik persilangan ialah nod pertama yang biasa kepada kedua-dua senarai.
Kerumitan masa pencarian kitaran Floyd algoritma ialah O(n), dengan n ialah jumlah bilangan nod dalam dua senarai terpaut. Kerumitan ruang bagi algoritma ialah O(1), kerana ia tidak memerlukan sebarang ruang tambahan di luar ruang yang telah diduduki oleh senarai terpaut.
Algoritma lain untuk mencari titik persilangan dalam menyilang senarai terpaut dengan kitaran termasuk Kura-kura dan algoritma Hare dan algoritma Brent. Algoritma ini mempunyai kerumitan masa dan ruang yang serupa dengan algoritma pencarian kitaran Floyd.
Algoritma sedia ada untuk mencari titik persilangan dalam senarai terpaut tidak bersilang boleh disesuaikan untuk mengambil kira kehadiran kitaran dengan menggunakan algoritma pencarian kitaran Floyd untuk mengesan kehadiran kitaran dalam setiap senarai. Jika mana-mana senarai mempunyai kitaran, algoritma boleh digunakan untuk mengembalikan titik permulaan kitaran. Jika kedua-dua senarai mempunyai kitaran, algoritma boleh digunakan untuk mengembalikan titik permulaan kitaran biasa. Setelah kitaran telah dikesan, titik persilangan boleh ditemui dengan merentasi kedua-dua senarai secara serentak, bermula dari titik permulaan kitaran dalam setiap senarai. Titik persilangan ialah nod pertama yang biasa kepada kedua-dua senarai.
Atas ialah kandungan terperinci Masalah persilangan senarai terpaut kitaran atau akiklik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!