Reklama
Pokazuje wyniki od 1 do 8 z 8

Temat: [java] binary search tree przeszukiwanie

  1. #1
    Avatar Terr
    Data rejestracji
    2004
    Położenie
    Venore
    Posty
    1,993
    Siła reputacji
    22

    Domyślny [java] binary search tree przeszukiwanie

    mam sobie klasyczne BST, z tym że zamiast samych intów zawiera ono pary string + double, musze napisać metode ktora zwraca true jesli w drzewku znajduje sie para o danym stringu. jak to zrobic? drzewko jest budowane na podstawie wartosci double. mam coś takiego:
    Kod:
    public boolean search(String s) {
                if (current.compareKeys(s)) {
                    System.out.println("yup");
                    return true;                        
                }
                if (right != null)
                    right.search(s);            
                if (left != null)
                    left.search(s);
                System.out.println("nope");
                return false;            
            }
    Kod:
    ///METODA COMPARE KEYS Z KLASY PAIR KTORA PRZECHOWUJE String key i dou
    public boolean compareKeys(String s) {     
            if (key.equals(s)) {        
                return true;
            }
            return false;
        }
    tylko że to przeszukuje cale drzewko, i nawet jesli znajdzie moj klucz to i tak zwroci na koncu false, to przykładowy output:
    Kod:
    nope
    nope
    yup
    nope
    nope
    nope
    nope
    nope
    nope
    nie moge tez zastosowac klasycznego przeszukiwania drzewek, tutaj przyklad w nie-javie z wiki:
    Kod:
    define BST_TREE_SEARCH (Node, Key):
        if (Node == NULL) or (Node->Key == Key)
            return Node
        if Key < Node->Key
            return BST_TREE_SEARCH (Node->Left, Key)
        return BST_TREE_SEARCH (Node->Right, Key)
    bo liczy sie tam wartosc klucza, a w moim przypadku jest to nieistotne

    mecze się nad tym już którąś godzine, a jestem pewien ze rozwiązanie jest jakieś mega proste. nakierujcie mnie proszę!

    edit. moglbym zrobic np zmienna found i zrobic cos takiego
    Kod:
    boolean found = false;
    
    public boolean search3(string s) {
      found = false;
       root.search2(s);
       return found;
    }
    a w search2 dodac to, ze jesli znajdzie moj klucz to zmienia wartosc found na true, ale chyba da sie to rozwiazac jakos inaczej?
    Ostatnio zmieniony przez Terr : 26-10-2014, 18:02

  2. #2
    Avatar Absherr
    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    578
    Siła reputacji
    16

    Domyślny

    No ale w sumie nic nam nie daje fakt, że jest to bst. Zrób zwykłego dfsa bez rekurencji i będziesz miał wszystko w jednej metodzie ;d

    A jakby sprawdzić w searchu:
    if oba dzieci: return left.search || right.search
    elif tylko lewe: return left.search
    elif tylko prawe: return right.search
    else: return false;
    Ostatnio zmieniony przez Absherr : 26-10-2014, 18:22 Powód: zamienilem bts na bst ;d

  3. Reklama
  4. #3
    Avatar Terr
    Data rejestracji
    2004
    Położenie
    Venore
    Posty
    1,993
    Siła reputacji
    22

    Domyślny

    Cytuj Absherr napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    No ale w sumie nic nam nie daje fakt, że jest to bst. Zrób zwykłego dfsa bez rekurencji i będziesz miał wszystko w jednej metodzie ;d

    A jakby sprawdzić w searchu:
    if oba dzieci: return left.search || right.search
    elif tylko lewe: return left.search
    elif tylko prawe: return right.search
    else: return false;
    Kod:
    public boolean search(String s) {
                if (current.compareKeys(s)) {
                    System.out.println("yup");
                    return true;                        
                }
                if (right != null && left != null)
                    return right.search(s) || left.search(s);            
                else if (left == null)
                    return right.search(s);
                else if (right == null)
                    return left.search(s);
                else
                     return false;            
            }
    wypierdala nullpointera w sumie nie wiem czemu, zaraz sprawdze dfs

  5. #4
    Avatar Absherr
    Data rejestracji
    2008
    Położenie
    Kraków
    Posty
    578
    Siła reputacji
    16

    Domyślny

    Kod:
    public boolean search(String s) {
                if (current.compareKeys(s)) {
                    System.out.println("yup");
                    return true;                        
                }
                if (right != null && left != null)
                    return right.search(s) || left.search(s);            
                else if (left == null)
                    return right.search(s);
                else if (right == null)
                    return left.search(s);
                else
                     return false;            
            }
    Nullpointer? nie mam pojęcia czemu ;/

    Może tak:
    Kod:
    public boolean search(String s) {
                if (current.compareKeys(s)) {
                    System.out.println("yup");
                    return true;                        
                }
                if (right != null && left != null)
                    return right.search(s) || left.search(s);            
                else if (left != null)
                    return left.search(s);
                else if (right != null)
                    return right.search(s);
                else
                     return false;            
            }
    @down
    No brawo Szerloku ;d
    Ostatnio zmieniony przez Absherr : 26-10-2014, 20:14

  6. #5

    Data rejestracji
    2010
    Posty
    2,657
    Siła reputacji
    16

    Domyślny

    Cytuj Absherr napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Kod:
    public boolean search(String s) {
                if (current.compareKeys(s)) {
                    System.out.println("yup");
                    return true;                        
                }
                if (right != null && left != null)
                    return right.search(s) || left.search(s);            
                else if (left == null)
                    return right.search(s);
                else if (right == null)
                    return left.search(s);
                else
                     return false;            
            }
    Nullpointer? nie mam pojęcia czemu ;/
    no a jak left == null && right == null?

  7. #6
    Avatar Lord
    Data rejestracji
    2012
    Położenie
    CPK xDDD
    Wiek
    29
    Posty
    10,451
    Siła reputacji
    18

    Domyślny

    @Terr ; zdradź mi co robisz? ;)

  8. #7
    Avatar Terr
    Data rejestracji
    2004
    Położenie
    Venore
    Posty
    1,993
    Siła reputacji
    22

    Domyślny

    Cytuj Absherr napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Kod:
    public boolean search(String s) {
                if (current.compareKeys(s)) {
                    System.out.println("yup");
                    return true;                        
                }
                if (right != null && left != null)
                    return right.search(s) || left.search(s);            
                else if (left == null)
                    return right.search(s);
                else if (right == null)
                    return left.search(s);
                else
                     return false;            
            }
    Nullpointer? nie mam pojęcia czemu ;/

    Może tak:
    Kod:
    public boolean search(String s) {
                if (current.compareKeys(s)) {
                    System.out.println("yup");
                    return true;                        
                }
                if (right != null && left != null)
                    return right.search(s) || left.search(s);            
                else if (left != null)
                    return left.search(s);
                else if (right != null)
                    return right.search(s);
                else
                     return false;            
            }
    @down
    No brawo Szerloku ;d
    ooo królu złoty, teraz działa, dzięki!

    cusz, nie pomyslalem o przypadku kiedy left i right są nullami


    a robie to: @LordCompi ;
    http://www.ii.uni.wroc.pl/~prz/2014z...a/zad/zad4.pdf
    Ostatnio zmieniony przez Terr : 26-10-2014, 20:50

  9. #8
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

    Kolega z IIUWr?

    Kursy są lepsze z Hansem. Polecam ;).

    IMHO dobrym pomysłem byłoby napisanie 'generycznej' implementacji BST i przekazywanie strategii porównywania jako parametr konstruktora drzewa. Możesz w tym celu wykorzystać klasy sparametryzowane.

    Pozdrawiam
    Killavus

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Tree of Savior
    Przez Kucyk w dziale Inne gry
    Odpowiedzi: 230
    Ostatni post: 27-08-2016, 01:23
  2. Odpowiedzi: 3
    Ostatni post: 03-05-2016, 22:39
  3. Przeszukiwanie w internacie
    Przez Rajan w dziale Prawo i finanse
    Odpowiedzi: 5
    Ostatni post: 07-03-2016, 21:42
  4. [Poszukuję][program] Przeszukiwanie maili
    Przez Ortodoksyjny Żyd w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 4
    Ostatni post: 09-05-2013, 19:49
  5. Przeszukiwanie mapy...
    Przez Koldryszek w dziale Tibia
    Odpowiedzi: 10
    Ostatni post: 20-07-2008, 19:42

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •