SORU
29 Mayıs 2010, CUMARTESİ


Döngüsü başlatmak döngüsü düğüm bulma listesi işe bağlı nasıl açıklar?

Anladığım kadarıyla bu Kaplumbağa ve Tavşan toplantı sonucuna varlığı döngü, ama nasıl hareketli kaplumbağa için başlangıç bağlantılı bir listesini tutmak tavşan toplantı yeri, ardından hareketli hem de bir adım daha at onları karşılamak başlangıç noktası döngüsü?

CEVAP
24 Mayıs 2011, Salı


Beni http://en.wikipedia.org/wiki/Cycle_detection#Tortoise_and_hare sağlanan döngüsü algılama algoritmasını açıklamak için kendi kelimeleri deneyelim.

Benim açıklamam bu şekil için drawing bakın.

Nasıl çalışır

Hadi bir kaplumbağa ile tavşan (işaretçiler adı) bir döngü ile liste başında işaret.

Hadi kaplumbağa 1 Adım ve 2 adım tavşan bir anda hareket edersek, eninde sonunda bir noktada buluşacaklar varsayımında. Hadi tüm bu hipotez ilk gerçek olduğunu gösteriyor.

Bu şekil bir döngü ile bir listesini gösterir. Döngüsü n uzunluğu olan ve başlangıçta uzak döngüsü m blok ... Hadi buluşma noktası k adımları döngüsü başından uzak olduğunu söylüyorlar ve kaplumbağa ve tavşan buldum toplam adım sonra da karşılar.

2 aşağıdaki koşullara sahip olması gerekmektedir:

1) ı = m * n k p

2) 2ı = m s * k n

İlk kaplumbağa benim adım taşır ve ben bu adımda birinci aşama aldığını söylüyor. Bazı pozitif p sayısı için çevrim p kere geçer. Nihayet hare karşılayana kadar k daha fazla düğüm yok.

Benzer bir tavşan için de geçerlidir. 2ı adım hareket eder ve bu 2ı adımda birinci aşama alır. Bazı pozitif sayı q döngüsü q kere geçer. Sonunda kaplumbağa yerine getirene kadar üzerinde k daha fazla düğüm yok.

Bu nedenle,

2 ( m p * n (k ) = m s * n k

=>= 2m 2pn 2k m k nq

=>= ( s - 2 P ) m k n

M, n, k, p arasında, q, ilk iki verilen listede özellikleri vardır. Eğer bu denklemi doğru yapan k, q, p değerleri için en az bir dizi olduğunu gösterebilirsek, önermenin doğru olduğunu göstermek.

Böyle bir çözüm kümesi aşağıdaki gibidir:

= 0 p

q = m

k = m n - m

Bu değerler aşağıdaki gibi olduğunu teyit edebiliriz

= ( s - 2 P ) m k n

=>m M - ( m - 2*0) m = n

=>mn = mn.

Bu set için

ben = m p n k

=>m 0 * n m - m = mn.

Tabii ki, bu mutlaka en küçük ben mümkün olduğunu görmelisiniz. Diğer bir deyişle, kaplumbağa ve tavşan zaten daha önce birçok kez bir araya geldi olabilir. Karşılamak gösteriyoruz beri ancak, bir noktada en az bir kez, önermenin doğru olduğunu söyleyebiliriz. Eğer onlardan 1 Adım hareket edersek tanışmak istedikleri bu, diğeri 2 seferinde bir adım.

Şimdi döngüsünün başlangıcı bulmak için bir algoritma ikinci kısmına geçebiliriz.

Döngü Başlıyor

Kaplumbağa ve tavşan karşılamak sonra, tanıştıkları kaplumbağa listenin başına koy ve hare kalsın k adımları döngüsü başından uzak olan).

Hipotez eğer onları aynı hızda (Adım 1) hareket etmesine izin verirsek, onlar hiç bir araya ilk kez yeniden çevrim bir başlangıç olacak.

Hadi bu hipotezi kanıtlamak.

Hadi biraz oracle m ne söyler varsayalım.

Eğer onları m k adım hareket etmesine izin verirsek o zaman, kaplumbağa aslında (k) yürüme döngüsünün başlangıcı şekilde görüyorum adımlar) buluştukları noktaya gelmesi gerekir.

Daha önce = m k (q - 2 p) n gösterdik.

Beri m k adımlar katı olan döngü uzunluğu n, hare, bu arada, ki geçmesi döngüsü (s-2 P) kez ve geri gelmek için aynı noktaya (k) adım uzaklıkta döngüsü başlangıç).

Eğer onları m adımları tek hareket edersek şimdi, onlara izin vermek yerine, m k adımları taşımak, kaplumbağa döngüsünün başında geliyor. Hare k adımlar kısa giderdim tamamlama (s-2 P) dönmeler. Döngüsü başına önünde k adımlar başladığından beri, hare döngüsünün başında gelmesi gerekir.

Sonuç olarak, bu açıklar, onlar bir araya döngüsü başladıktan sonra bazı dizi adım için ilk defa (ilk defa çünkü kaplumbağa geldi döngüsü sonra m adımları ve asla görmek hare olan oldu zaten döngüsü).

Şimdi karşılayacak kadar taşımamız gerekiyor adım sayısını döngüsü başlangıç, m listesinin en başında mesafe olduğu ortaya çıkıyor. Tabii ki, algoritma m ne olduğunu bilmek gerekmez. Sadece karşılayacak kadar iki kaplumbağa ve tavşan adım adım hareket edecek. Buluşma noktası döngüsü başlar ve adım sayısı mesafe (m) döngüsü başına olmalıdır. Listenin uzunluğu bildiğimizi varsayarak, ayrıca, listenin uzunluğu m çıkararak döngüsü uzunluğunu hesaplayabiliriz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • BenjiManTV

    BenjiManTV

    20 Mart 2011
  • knopik96

    knopik96

    7 Mayıs 2011