Αλγόριθμος για να επιστρέψει το μήκος της συντομότερης υποκατάστημα σε ένα δυαδικό δέντρο

ψήφοι
0

Ένα δυαδικό δέντρο μπορεί να κωδικοποιούνται χρησιμοποιώντας δύο συναρτήσεις l και r τέτοια ώστε για ένα κόμβο n, l (n) να δώσει το αριστερό παιδί του n, r (n) δίνουν το δικαίωμα παιδί του n.

Ένα κλαδί ενός δένδρου είναι ένα μονοπάτι από τη ρίζα προς ένα φύλλο, το μήκος του υποκαταστήματος σε ένα συγκεκριμένο φύλλο είναι ο αριθμός των τόξων στο μονοπάτι από τη ρίζα στην εν λόγω φύλλου.

Ας MinBranch (l, r, x) να είναι ένας απλός αναδρομικό αλγόριθμο για τη λήψη ενός δυαδικού δένδρου που κωδικοποιείται από τις λειτουργίες L και R μαζί με τον κόμβο ρίζα χ για το δυαδικό δέντρο και επιστρέφει τη συντομότερη κλαδί του δυαδικού δένδρου.

Παρακαλώ δώστε τον ψευδοκώδικα για αυτόν τον αλγόριθμο.

Δημοσιεύθηκε 03/08/2009 στις 04:30
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
4

Κοιτάξτε τις δύο κλάδους. Βρείτε το μήκος της συντομότερης διαδρομής σε κάθε μία. Προσθέστε ένα με το μικρότερο και θεωρούν ότι είναι η συντομότερη κλάδο.

Απαντήθηκε 03/08/2009 στις 04:31
πηγή χρήστη

ψήφοι
0
function recurseMin(n)
{
if r(n) is null and l(n) is null, return 1
if r(n) is not null, rightSum = recurseMin( r(n-1) )
if l(n) is not null, leftSum = recurseMin ( l(n-1) )
return 1 + min( leftSum, rightSum )
}
Απαντήθηκε 03/08/2009 στις 04:34
πηγή χρήστη

ψήφοι
5

Βλέπω έχετε λάβει απαντήσεις σχετικά με το πώς να πάρει το μήκος του συντομότερου κλάδου, αλλά εργασία για το σπίτι σας είναι στην πραγματικότητα για να επιστρέψει το υποκατάστημα ίδιο, προφανώς ως μια λίστα των κόμβων. Έτσι, εδώ είναι εκτελέσιμο ψευδοκώδικα (δηλαδή, Python) για να επιστρέψετε στην πραγματικότητα τον κλάδο, χρησιμοποιώντας Noneσημαίνει μηδενική:

def MinBranch(l, r, x):
  if x is None: return []
  left_one = MinBranch(l, r, l(x))
  right_one = MinBranch(l, r, r(x))
  if len(left_one) < len(right_one):
    tail = left_one
  else:
    tail = right_one
  return [x] + tail
Απαντήθηκε 03/08/2009 στις 04:48
πηγή χρήστη

ψήφοι
1

Μπορείτε επίσης να το βρείτε σε O (2 R ), όπου R είναι το αποτέλεσμα. Χρήσιμες αν το δέντρο είναι πολύ ισορροπημένη ή άπειρο. Είναι <= O (N).

Μπορείτε να το κάνετε αυτό με επαναληπτική-εμβάθυνση DFS.

Απαντήθηκε 03/08/2009 στις 13:51
πηγή χρήστη

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