Elemzés és az épület S-kifejezések használatával szettek és bináris keresési fa

szavazat
1

Ez ál házi (ez extra hitel). Van egy BST amely egy index szó, hogy pont a vonalak (tárolt máshol), amely tartalmazza a szavak. Kell, hogy végre egy utat keresni az S-kifejezések, így tudok kombinálni és (&) és vagy (|).

Írja be a parancssorba a felhasználó tudta be valami ilyesmit:

QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))

Lényegében, hogy vissza kell adnia minden sort, amely tartalmazza a szavak tűz, erdő és a víz, valamint a sorokban, amelyek tartalmazzák az óceán, a hajó és a víz.

Amit igazán kell segíteni a logika értelmezésére és beillesztése csomópontok a fába, hogy megfelelően képviselje a kifejezés több, mint a tényleges kódot. Az egyetlen dolog, amit dolgoztam ki, hogy van értelme számomra visszatér egy sor sor minden szó a kifejezésben. Aztán attól függően, hogy ez egy „vagy” vagy „és a” művelet azt végrehajtani unió vagy metszettípust műveletet az említett készletek létrehozása egy sor új és add, hogy akár a fa.

Én egyfajta elveszett, hogyan kell elemezni a sort, amely tartalmazza a kifejezést. Némi gondolkodás után úgy tűnik, hogy a „távolabbi” ki az egyik al-kifejezéseket a magasabb kell legyen az én s-kifejezésfa? Azt hiszem, ha kaphatnék egy push a helyes irányba, amennyire elemzés és behelyezi a kifejezést a fát én minden rendben lesz.

Saját minta fa kitaláltam a fenti lekérdezés valahogy így néz ki;

                                            &
                                         /     \
                                       |       water
                                   /      \
                                 &          &
                               /   \        /   \
                            fire  forest  ocean boat

Ez az értelme, mint a tűz visszatér egy sor vonalak, melyek mindegyike tartalmazza a tűz és az erdő visszatér egy sor vonalak, melyek mindegyike tartalmazza erdőben. Aztán a „&” szint azt, hogy ezeket a két, és hozzon létre egy másik, amely csak a vonalak, amelyek a mindkét ezáltal nekem egy sor, amely csak vonalak, amelyek mind a tűz és az erdő.

A másik akadály az, hogyan képviselje mindent a fa, miután az akadályt leküzdeni a elemzés. Van egy ExpTreeNode osztály szolgál majd a csomópontokat az én ExpTree (BST), és akkor már 2 alosztályok, operátor és operandus, de nem vagyok biztos abban, hogy ez egy jó megközelítés.

A kérdést 13/04/2011 18:11
a forrás felhasználó
Más nyelveken...                            


1 válasz

szavazat
4

Dijkstra tette azt már :-)

Próbálja ki a tolatási udvar algoritmus: http://en.wikipedia.org/wiki/Shunting-yard_algorithm

Hozhat létre az RPN (fordított lengyel jelölés) a tolatási udvar algoritmus, és egyszer, hogy jön létre, akkor lehet, hogy egy át rajta, hogy megteremtse a bináris fa.

Normális esetben a RPN szokta az értékelés, de ténylegesen létre egy fa.

Például ahelyett, hogy értékeli, létrehoz facsomópontok és nyomja őket a verembe.

Tehát, ha látsz Node1, node2, az üzemben. Létrehoz egy új csomópont

   Operator
   /     \
  node1   node2

majd tolja vissza a verembe.

Egy részletesebb példáját:

Mondjuk a kifejezés (apples AND oranges) OR kiwis

Az RPN Ennek kiwis oranges apples AND OR

Most séta ez, miközben a verem.

Készíts egy csomópontot ki kivi nyomja rá verem. Node ki a narancs tolja rá verem. Ugyanaz almával.

Így a verem

Node:Apples
Node:Oranges
Node:Kiwis

Most már láthatja a és az RPN.

Pop a felső kettő a verem, és hozzon létre egy új csomópont az ÉS, mint szülő.

Node: AND, [node: Alma, Node: Narancs]

Alapvetően a fa

       AND
     /    \
  Apples  Oranges

Most nyomja a csomópont-ra verem.

Tehát köteg

Node:AND, [Node:Apples, Node:Oranges]
Node:Kiwis

Most már láthatja a vagy RPN és hozzon létre egy csomópont vagy mint szülő és Csomópont: és és Node Kiwis a gyerekek egyre a fa

           OR 
         /   \
       AND   Kiwis
     /    \
  Apples  Oranges

Lehet, hogy még képes lehet módosítani a tolatási udvar algoritmust létrehozni a fát, de foglalkozik a RPN egyszerűbbnek tűnik.

Másik megoldás, akkor próbálja meg rekurzív Descent elemző technikákat. Mit kérsz nagyon gyakori, és akkor képes lesz arra, hogy megtalálják a nyelvtanok és a kódot is, ha keresni az interneten.

By the way, akkor csak azt jelenti, bináris fa van? BST (bináris keresési fa) van egy extra kényszer ...

Válaszolt 13/04/2011 18:14
a forrás felhasználó

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