To je pseudo domácí (je to kreditu navíc). Mám BST což je index slov, které ukazují na tratích (uložené někde jinde), které obsahují slova. Potřebuji implementovat způsob, jak vyhledávat pomocí S-výrazy, takže mohu kombinovat a (a) a nebo (|).
Na příkazovém řádku si uživatel mohl zadat něco jako:
QUERY ((((fire)&(forest))|((ocean)&(boat)))&(water))
Zásadě, že by se měly vrátit všechny řádky, které obsahují slova oheň, lesní a vodní, jakož i všechny řádky, které obsahují oceán, loď a vodu.
To, co jsem opravdu potřebují pomoc s je logika pro analýzu a vkládání uzlů do stromu správně reprezentovat výraz více než skutečný kód. Jediná věc, kterou jsem pracoval na to, že má smysl, aby mi vrací sadu řádků pro každé slovo ve výrazu. Pak v závislosti na tom, zda se jedná o „nebo“ nebo „a“ Provoz bych provést unii nebo operace typu křižovatka v těchto souborech vytvořit novou sadu a předat že dále až do stromu.
Jsem trochu ztratil na tom, jak analyzovat řádek, který obsahuje výraz. Poté, co někteří si mysleli, zdá se, že „dále“ se jeden z dílčích projevů je tím vyšší by měl být podle mého s expresí stromu? Myslím, že kdybych mohl dostat push správným směrem, pokud jde o analýzu a vkládání výrazů do stromu bych měl být v pořádku.
Můj vzorek strom, který jsem přišel s pro výše uvedené dotaz vypadá podobně jako;
&
/ \
| water
/ \
& &
/ \ / \
fire forest ocean boat
To dává smysl, protože oheň se vrátí sadu řádků, které všechny obsahují oheň a lesy by se vrátil sadu řádků, které všechny obsahují les. Pak na „&“ level bych, aby tyto dva soubory a vytvořit další sadu, která obsahovala pouze řádky, které byly v obou sadách tím, že mi sadu, která má pouze řádky, které obsahují jak oheň a les.
Moje další kámen úrazu, jak reprezentovat vše ve stromu poté, co jsem překonat překážku rozebrat. Mám třídu ExpTreeNode, který bude sloužit jako uzly pro můj ExpTree (BST), a pak mám 2 podtřídy, operátory a operandy, ale nejsem si jistý, jestli je to dobrý přístup.













