Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Użycie drzewa decyzyjnego w programie typu system pomocy

Ostatnio zmodyfikowano 2016-03-19 23:12
Autor Wiadomość
locust
Temat założony przez niniejszego użytkownika
Użycie drzewa decyzyjnego w programie typu system pomocy
» 2016-03-13 20:59:22
Witam! Potrzebuję wskazówek dotyczących możliwości użycia drzewa decyzyjnego. Moje zadanie brzmi następująco: "Oprogramować system pomocy działający w oparciu o drzewo. System ma zadawać pytania i w oparciu o odpowiedzi podążać w dół drzewa kończąc działanie diagnozą. Proszę oprogramować przynajmniej 3 różne rodzaje pytań w węzłach drzewa (bazujące na abstrakcyjnej klasie węzła)."

Po 3ech wykładach z obiektówki znam kilka formułek, definicji, składni zapisu klas, metodę dziedziczenia, itp. Nie jest to jeszcze wiele, a przychodzi mi zmierzyć się z takim zadaniem, w momencie kiedy jeszcze nie za bardzo czuję jak "wcisnąć" w programy ową obiektowość. Zatem czy ktoś pomógłby mi zrozumieć dobrze cel mojego zadania zanim pójdę na konsultację do prowadzącego (nie ukrywam, chciałbym już iść z jakąś koncepcją)?

Drzewo decyzyjne rozumiem, że dostaje dane na wejście, samo oblicza np. prawdopodobieństwa zaistnienia jakichś konsekwencji kolejnych kroków i na wyjściu oddaje optymalną opcję wyboru. W moim zadaniu wydaje mi się, że pozostaje tylko struktura drzewa w postaci kolejnych eliminowanych etapów, bo i w każdym kroku zamiast obliczeń dostajemy gotową odpowiedź od użytkownika. Strukturalnie można by było uzyskać to przez długą listę kolejnych IFów. Jak mogę skorzystać tu z obiektów? Klasa abstrakcyjna "węzeł" miałaby służyć do dziedziczenia najbardziej podstawowych atrybutów (jedyne co przychodzi mi do głowy to jedna zmienna na ciąg znaków "pytanie" no i wczytywanie odpowiedzi). Jakie inne klasy powinienem stworzyć i co jeszcze powinny one zawierać?

Zdaje sobie sprawę, że pytam o wiele, jednak jeśli ktoś mógłby mnie chociaż nakierować na potrzebę zastosowania klas w moim zadaniu byłbym bardzo wdzięczny. :)
Pozdrawiam!
P-145986
carlosmay
» 2016-03-13 21:42:54
Klasy są wygodnym narzędziem do tworzenia drzew.
Nawet nie bardzo wiem jak inaczej, by to rozwiązać (class, struct).
Może tutaj znajdziesz kierunek poszukiwań:
drzewo przeszukiwań binarnych
drzewo binarne
P-145988
locust
Temat założony przez niniejszego użytkownika
» 2016-03-14 17:29:23
Przyznaję, kod trochę rozjaśnił ideę drzew. Dzięki. Chociaż nadal brakuje mi pomysłu na jego wykorzystanie w moim zadaniu (oprócz samej struktury, że z jednego zapytania wynika kolejne). Miałby ktoś jakiś pomysł? 
P-146015
1aam2am1
» 2016-03-14 17:40:39
struktura musi posiadać:
1. Dwa wskaźniki na następne struktury (odpowiedź TAK i NIE)
2. Tekst pytania
3. Odpowiedź która jest wyświetlana tylko gdy ...

P-146016
locust
Temat założony przez niniejszego użytkownika
» 2016-03-14 19:47:46
To miałaby zawierać ta w zadaniu opisana "abstrakcyjna klasa węzła", tak?
P-146017
1aam2am1
» 2016-03-15 07:09:30
Węzeł powinien posiadać funkcje wyświetlpytanie() i ...
A klasy abstrakcyjne powinny je przeciążać aby spowodować inne zachowanie np pojawienie się innego pytania.
W gruncie rzeczy od ciebie zależy jak to zrobisz.
P-146024
DejaVu
» 2016-03-16 22:13:25
Bierzesz korzeń drzewa i wyświetlasz z niego pytanie. Odpowiedź TAK - idziesz do lewego liścia, odpowiedź NIE - idziesz do prawego liścia.
Dla bieżącego liścia ponawiasz w/w algorytm tj. wyświetl pytanie i podejmij decyzję do którego liścia pójść.
Jeżeli nie ma więcej liści to ostatni liść powinien zawierać diagnozę i ta diagnoza powinna zostać wypisana zamiast pytania.
P-146110
locust
Temat założony przez niniejszego użytkownika
» 2016-03-19 23:12:23
Wielkie dzięki za wszystkie podpowiedzi. Jeśli macie jeszcze do mnie cierpliwość to prosiłbym o poświęcenie kolejnej chwili na moje zadanie. :)

Jako że mam użyć 2óch rodzajów pytań (np. Tak/Nie oraz wyboru z kilkoma opcjami 1./2./3./...) pomyślałem że chyba lepszym pomysłem byłoby drzewo "tablicowe". Mój pomysł na poruszanie się po nim wygląda następująco:    http://oi66.tinypic.com/207kjsm.jpg

Jednak nie samo drzewo jest najważniejsze lecz użycie klas. Chciałem utworzyć klasę abstrakcyjną "węzeł" z dwiema wirtualnymi funkcjami "wyswietlpytanie" oraz "odczytajodp". Dalej pochodna klasa "pytanie" oraz kolejna - "odpowiedz" (pierwsza zależna względem drugiej). Gdzie pierwsza zawiera treść pytania jako string, licznik jako int oraz ciało funkcji "wyswietlpytanie" uwzględniającą przyrost licznika względem odpowiedzi. Druga miałaby zawierać odpowiedź jako int oraz funkcję "odczytajodp". Czy ten mój plan w ogóle "ma ręce i nogi"? Jeśli nie, bardzo prosiłbym o pomoc i propozycje konkretnych zmian.

Kiedy już wydawało mi się, że jestem na dobrej drodze, kiedy doczytałem że muszę również w programie skorzystać z polimorfizmu. I teraz nie mam pojęcia jak go zastosować...

Z góry dzięki za pomoc. 
P-146249
« 1 »
  Strona 1 z 1