Sıralı, sıralı ve sıralı sıralamaların hangi kombinasyonları benzersizdir?


28

Siparişi biliyoruz,

post L(x)     => [x]
post N(x,l,r) => (post l) ++ (post r) ++ [x]

ve ön sipariş

pre L(x)     => [x]
pre N(x,l,r) => [x] ++ (pre l) ++ (pre r)

ve sırayla çapraz cevap. sequentialisation.

in L(x)     => [x]
in N(x,l,r) => (in l) ++ [x] ++ (in r)

İkili ayrı anahtarlar / etiketler varsaysak bile, verilen bir ağacı benzersiz şekilde tanımlayamadığı kolayca görülebilir.

Üçün hangi kombinasyonları bu amaçla kullanılabilir ve hangileri kullanılamaz?

Olumlu cevaplar, ağacı yeniden yapılandırmak için (etkili) bir algoritma içermeli ve neden doğru olduğuna dair bir kanıt içermelidir. Olumsuz cevaplar karşı örnekler sağlamalıdır, yani aynı temsili olan farklı ağaçlar.

Yanıtlar:


16

İlk olarak, tüm öğelerin farklı olduğunu varsayacağım. Hiçbir ardışık düzenlenme miktarı size elemanları olan bir ağacın şeklini söyleyemez [3,3,3,3,3]. Tabii ki bazı ağaçları yinelenen unsurlarla yeniden inşa etmek mümkündür; Hangi güzel koşulların mevcut olduğunu bilmiyorum.

Negatif sonuçlara devam edersek, bir ikili ağacı yalnızca siparişten sonraki ve siparişten sonraki sıralamalardan tamamen yeniden oluşturamazsınız. [1,2]Ön sipariş ver, [2,1]siparişin 1kökünde olması gerekir , fakat 2sol veya sağ çocuk olabilir. Bu belirsizliği umursamıyorsanız, ağacı aşağıdaki algoritma ile yeniden yapılandırabilirsiniz:

  • Let ön sipariş geçişi ve olmak [ y , n , ... , y 1 ] sonrası geçişine olabilir. X 1 = y 1 olmalı ve bu ağacın köküdür.[x1,,xn][yn,,y1]x1=y1
  • kökün en soldaki çocuğu ve y 2 en soldakiçocuktur. Eğer x 2 = y 2 ise, kök düğüm tekdüzedir; üzerinde Recurse [ x 2 , ... , x , n ] ve [ y , n , ... , y 2 ] , tek bir alt ağaç oluşturmak için.x2y2x2=y2[x2,,xn][yn,,y2]
  • Aksi takdirde, ve j , x 2 = y i ve y 2 = x j olacak şekilde göstergeler olsun . [ x 2 , , x j - 1 ] , sol alt ağacın ön sıra geçişi, [ x j , , x n ] sağ alt ağacın sıra geçişidir ve benzer şekilde, sipariş sonrası geçişler için. Sol alt ağacın j - 2 = n - i +ijx2=yiy2=xj[x2,,xj1][xj,,xn] eleman ve sağ alt ağaç i - 2 = n - j + 1 elemanlara sahiptir. Her alt ağaç için bir kez tekrar edin. Bu arada, bu yöntem rasgele dallanma ile ağaçlara genelleştirir. Rasgele dallanma ile sol alt ağacın boyutunu bulun ve j - 2 öğelerini her iki listeden kesin, ardından ikinci alt ağacın soldan kesilmesi için tekrarlayın.j2=ni+1i2=nj+1
    j2

Belirtildiği gibi, çalışma süresi olan ile İçeride ISTV melerin RWMAIWi'nin ( n 2 ) En kötü durumda (iki çocuklu durumunda, biz doğrusal biçimde her listesinde arama). Sen çevirebilirsiniz O ( nO(n2)Θ(n2) Bir n oluşturmak için listeleri hazırlarsanızO(nlg(n)) giriş listelerinde pozisyonlarına eleman değerlerinden sonlu harita yapısı. Ayrıca, dizinlerden değerlere geçmek için bir dizi veya sonlu harita kullanın; Global endekslere sadık kalın, böylece özyinelemeli çağrılar tüm haritaları alacak ve ne yapılması gerektiğini bilmek için bir argüman olarak yer alacaktır.nlg(n)

[x1,,xn][z1,,zn]

  • x1
  • kzk=x1[z1,,zk1][zk+1,,zn][x2,,xk][xk+1,,xn]

O(n2)O(nlg(n))

Sipariş sonrası artı sipariş elbette simetriktir.


Burada bir yazım hatası var mı: "[1,2] ön sipariş veren, [1,2] post-order'ın kökünden 1 olması gerekir, ancak 2 tanesi sol veya sağ çocuk olabilir." ağaç, 2'nin sol mu sağ mı, [1,2] değil [1,2] olur. Ayrıca, hem ön sipariş hem de posta gönderenin verilip verilmediğini, ağacı yeniden yapılandıramayacağımızı mı kastediyorsunuz, yoksa yalnızca bunlardan birini verirsek ağacı yeniden yapılandıramaz mıyız?
CEGRD

@CEGRD Nitekim, postacder bir yazım hatası oldu. Örnek, bu durumda ağacı tamamen yapılandıramadığınızı gösterir: 2sol çocuk mu sağ çocuk mu bilemezsiniz . Bu, yeniden yapılanma algoritmasının “tek alt ağacı” durumuna karşılık gelir.
Gilles 'SO- kötülük olmayı bırak'

İkili Arama Ağacı olduğunu biliyorsak, bu nasıl değişir? Örnekteki basit durum için ([1,2] sipariş, [2,1] sipariş sonrası], kökün 1 olduğunu ve 2'nin doğru çocuk olduğunu belirleyebildik (çünkü 2, 1'den büyük) ... sağ?
fersarr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.