Bir BinarySearchTree kullanarak PriorityQueue Uygulamak: Java

oy
4

Benim algoritmaları II sınıf için bir ikili arama ağacına (BST) tarafından uygulanan bir öncelik sırası oluşturmak gerekir. Ancak, ben bir öncelik sırası olarak bir ikili arama ağacı kullanmak istiyorsunuz tam olarak nasıl emin değilim. Birisi atama yapmamı istiyor ne olduğunu açıklayabilir misiniz?

Bir referans olarak, burada PriorityQueue uygulamalıdır yöntemleri şunlardır:

add – adds a new item to the queue
peek – returns the head of the queue
remove – removes the head of the queue and returns it
search – returns the position of an element in the queue, or -1 if it is not found.
size – returns the total number of elements in the queue
inorder – returns an in-order, comma-separated string of every element in the queue
preorder – returns an pre-order, comma-separated string of every element in the queue
height – returns the height of the underlying BST

Herhangi bir tavsiye için şimdiden teşekkür ederiz!!

Oluştur 21/05/2011 saat 22:50
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
0

Bir ikili arama ağacı verimli sıralanmış sırayla öğeleri korumak için kullanılır. Sort-order önceliğine dayalı ise, o zaman ikili ağaç öncelikli kuyruk olur. Sen önceliklerine göre en yüksek öncelikli öğesi kapalı pop ve yeni öğeler ekleyin.

Eklemek Düzenlendi:

Bir kötü durumda olan nasıl O (N) 'dir listede aşağı tüm yol yürüyerek dışında, yeni bir öğe eklemek için nereye bilemez, Sıranızdaki olarak bağlantılı liste kullanılırsa - O alternatifleri düşünmeye yardımcı olabilir bir ikili ağaç kullanma N. o sorunu çözer.

Cevap 21/05/2011 saat 22:57
kaynak kullanıcı

oy
4

Bir İkili Arama Ağacı daima sıralanır ve yeni öğeler eklenir eğer hep sırayla kalacak.

diğer veri yapıları üzerinde ikili arama ağaçların büyük avantajı, içinde sipariş geçişi gibi ilgili sıralama algoritma ve arama algoritmaları çok etkili olabilmesidir.

Ve bu senin Öncelik Sırası var. Olası bir uygulamada, en az öncelikli ürün en düşük sayıyı alacak en yüksek önceliğe sahip en yüksek sayıda ve öğeleri alacak. Bu öğeler BST içine yerleştirilir ve bunu okursanız inorder, o zaman kuyruk işlenmelidir sırayı var.

kuyruğu işleme koyulabilmesi için, ağaçta ilk öğe kapalı "pop" ve gerisi BST tarafından otomatik olarak sıralanacaktır.

Eğer hakkında dikkat çekmek için gereken tek şey yeni ağaca elemanları ve ne ilki kaldırılırsa ne olur doğru yerleştirilmesini içerir.

Sizin yöntemleri, ağaç işlemleri ile eşleştirilir adddoğru yerde yeni bir öğe ekler ve gerekirse ağaç değiştirmek sizeörnek ağacının büyüklüğünü geri verir için, inorderağaç erişir.

Biraz daha açık hale umuyoruz.

Cevap 21/05/2011 saat 22:58
kaynak kullanıcı

oy
0

gözetleme kaldırmayı eklemek bir BST için standart yöntemlerdir

Arama için düğüm kök olduğu alt ağacındaki elementlerin mevcut sayısı olacak her düğümünde boyutunu önbelleğe alabilir (ya da diğer bir deyişle node.size = 1+ (node.right==null?0:node.right.size) + (node.left==null?0:node.left.size))

daha sonra arama olur

int search(E el,Node n){
    if(n==null)return -1;//stop recursion && nullpointer
    int comp = el.compareTo(n.value);
    if(comp==0)return n.left==null?0:node.left.size;
    else if(comp<0){
        return search(el,node.left);
    }else{
        int res = search(el,node.right)
        return res<0?res:res+(n.left==null?0:node.left.size)+1;//pass through -1 unmodified
    }
}
Cevap 21/05/2011 saat 23:08
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more