AO * algoritması nasıl uygulanır?


16

Arama algoritmalarını uygularken farklı veri yapılarının kullanıldığını fark ettim. Örneğin, genişlik ilk aramayı uygulamak için kuyruklar, önce derinlik araması uygulamak için yığınlar ve A * algoritmasını uygulamak için yığınlar kullanırız . Bu gibi durumlarda, arama ağacını açıkça oluşturmamız gerekmez.

Ancak AO * algoritmasının arama sürecini simüle etmek için basit bir veri yapısı bulamıyorum . Arama ağacı açıkça AO * algoritması uygulamak için tek yol olup olmadığını bilmek istiyorum? Biri bana verimli bir uygulama sağlayabilir mi?


3
Hoşgeldiniz! Lütfen kullandığınız standart olmayan malzemeye referanslar eklemeyi unutmayın. AO * 'nun Wikipedia makalesi olmadığından, bir bağlantı kesinlikle sıralıdır. Umarım iyi bir tane buldum, lütfen kontrol et.
Raphael

1
Bu sadece bir grafik değil mi (birisinin "sonraki" düğüme gitmesine izin veren bir fonksiyona sahip)?
soandos

Birisi AO * 'nun A * algoritmasından nasıl farklı olduğunu tasvir ederse yardımcı olacaktır. oldukça bağlantıdan anlayamadık. uygulama gelince, ağaçlar için herhangi bir yapı makul görünüyor .... bir ağaçtan geçiyor değil mi?
vzn

Yanıtlar:


1

AO * algoritmasındaki bir düğümü her genişlettiğinizde bu makaleyle ilgili olarak, öncüllerinin tüm tahmini maliyetlerini güncellemek için geriye doğru gitmelisiniz.

Düğümleri içermek için doğrusal veri yapısını kullandığınızda, veri öğelerini sırayla geçmeniz gerekir ve yalnızca bir veri öğesi doğrudan alınabilir (yığın, kuyruk, öncelik kuyruğu…).

AO * 'da, bir düğümün tahmini maliyetine göre genişletme için her alınışında algoritma, öncekileri olan tüm düğümler üzerinde (tahmini maliyetlerini güncellemek için) tekrarlar. Bu, bazen tahmini maliyetine ve bazen halefine dayalı olarak eleman almanız gerektiği anlamına gelir. Genel durumda bu koşulların her ikisini de karşılayabilecek bir dizi sırası yoktur. Muhtemelen "iç içe" doğrusal veri yapılarını kullanmanın bir yolu vardır, ancak sadece bir ağaç yapısını taklit etmelidir ve bunun yerine arama ağacını oluşturmak daha iyi olacaktır.


0

Sadece bağlandığınız açıklamaya gidiyorum, ama ya bir BST? Çözülmemiş düğümleri dengelemek için yapılandırabilirsiniz. Bu, 2. adımda size zaman kazandırabilir ve geçişlerin sayısına bağlı olarak genel sürenin azalmasına yardımcı olur. Tabii ki, ağacınızı çözülmemiş düğümlere göre dengelerseniz / sıralarsanız, muhtemelen en basitinden daha basit bir veri yapısından daha iyi olur ve potansiyel olarak logaritmik zamanın içinde / çevresinde kalırsınız.

http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree


2
Ve bunu yapabilir misin?
Raphael

BST'nin nasıl kullanılacağı o kadar net değil çünkü BST'lerin her bir düğüm için sayısal bir indeksi vardır ve bunları yerleştirmek için kullanılır. kullanılan sayısal indeks nedir?
vzn
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.