Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.67 KB | None | 0 0
  1. Student1 – Nikola Kolovic RA133/2017
  2. Trie stablo
  3. Trie stablo je struktura podataka koja je pogodna za cuvanje stringova. (primer: cuvanje svih reci iz teksta). Za potrebe programa Search Engine koristili smo standardni trie. Standardni trie ima osobinu da svaki cvor osim korena sadrzi jedan karakter i putanja od korena do lista daje jedan string.
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19. Standardni trie trosi O(n) prostora gde n predstavlja ukupnu duzinu stringova.
  20. Za dodavanje i pretragu elemenata trosi O(dm) vremena, m- duzina stringa, d- velicina alfabeta
  21. TrieNode se sastoji od elemenata (char(karakter), children(niz dece za svaki cvor), endOfWord(Boolean koji cuva da li se u datom cvoru zavrsava rec) i polje stranice koje predstavlja set html linkova koje sadrze datu rec (polje stranice je neprazno samo ukoliko je endOfWord=True)
  22. Dodavanje elemenata u trie:
  23. add_word(word,file)
  24. Input: word: rec koja se unosi
  25. Input: file: fajl u kojem je pronadjena
  26. 1. Za trenutni cvor postavljamo root cvor
  27. 2. Prolazimo kroz sve karaktere koji se nalaze u reci
  28. 3. Ako se karakter ne nalazi u polju children tekuceg cvora
  29. a. U children trenutnog cvora dodajemo cvor sa tekucim karakterom
  30. 4. Za trenutni cvor postavljamo cvor koji sadrzi dati karakter u children
  31. 5. Ukoliko nismo prosli kroz sve karaktere u reci vracamo se na korak 2
  32. 6. U suprotnom, trenutnom cvoru postavljamo vrednost endOfFile na true
  33. 7. U polju stranice dodajemo u skup dati html file
  34.  
  35. Pretraga elemenata u trie:
  36. search(word)
  37. Input: word – rec koja se pretrazuje
  38. 1. Za trenutni cvor postavljamo root cvor
  39. 2. Prolazimo kroz sve karaktere koji se nalaze u reci
  40. 3. Ako se karakter ne nalazi u polju children tekuceg cvora
  41. a. Rec nije pronadjena, vracamo string “False” i None
  42. 4. Za trenutni cvor postavljamo cvor koji sadrzi dati karakter u children
  43. 5. Ukoliko nismo prosli kroz sve karaktere u reci, vracamo se na korak 2
  44. 6. U suprotnom, rec je pronadjena, vracamo “True” i polje stranice
  45.  
  46. Parsiranje i validacija unosa obicne pretrage
  47. Parsiranje obicne pretrage:
  48. Parsiranje obicne pretrage parsira uneti kriterijum tako sto pomocu funckije .strip() otklanja
  49. sve praznine ispred prvog karaktera i iza poslednjeg. Zatim zamenjuje sve tabove sa praznim
  50. stringom(brise unete tabove sa tastature) pomocu funkcije .replace(‘\t’,’’). Zatim kreira novi
  51. niz kriterijuma pomocu komande re.split(‘ ‘, kriteterijum) tako sto splituje string po razmaku
  52. i stavlja u niz kriterijuma. U slucaju da je korisnik uneo vise razmaka jedan pored drugog u
  53. nizu kriterijuma ce se pojaviti razmak, koji moramo ukloniti da bi niz kriterijuma sadrzao
  54. samo operatore i reci koje pretrazujemo.
  55. Primer: input: “ python and java “
  56. output: [“python”,”and”,”java”]
  57. Validacija unosa obicne pretrage:
  58. Validacija unosa pretrage sluzi da proveri da li je kriterijum u pravilnom formatu. Za potrebe
  59. ovog programa uzeli smo da je skup operatora (OR,AND,NOT, “ “ prazan string ce gledati kao OR operator).
  60. Pravilan format unosa: Uslov1 OPERATOR Uslov2 | NOT Uslov1 | Uslov1 Uslov2 … UslovN
  61. U prvom slucaju izmedju 2 uslova mora se nalaziti operator, u drugom slucaju se radi negacija uslova tako sto nakon operatora “NOT” ide uslov, treci slucaj je kada unosimo N uslova izmedju kojih se nalazi razmak koji se ponasa kao operator “OR”
  62. U slucaju kada je ispostovan format unosa funkcija vraca True, u suprotnom False.
  63.  
  64.  
  65.  
  66. Obicna pretraga
  67. slozenijaPretraga(kriterijum, operacija)
  68. input: kriterijum – niz kriterijuma pretrage
  69. input: operacija – string koji pokazuje koju operaciju izvrsiti nad nizom kriterijuma(“OR”,”AND”,”NOT”,”KOMPLEMENT”)
  70. Algoritam:
  71. 1.Pomocu if-elif proveravamo koji je operator pretrage i ulazimo u odgovorajuci blok
  72. 2.Ukoliko je operacija “OR”
  73. a. Iteriramo kroz sve uslove u kriterijumu
  74. b. Pozivamo pretrazivanje iz globalnog trie stable
  75. c. Ukoliko je rec iz uslova pronadjena u RESULT_SKUP dodajemo skup html stranica
  76. u kojima se ta rec nalazi
  77. d. Ukoliko nismo dosli do kraja niza kriterijuma vracamo se na korak a), u suprotnom
  78. e. Prolazimo kroz sve skupova HTML dokumenata koji ispunjavaju uslov i pomocu
  79. operacije | ugradjene u Set odredjujemo RESULT_SET
  80. 3.Ukoliko je operacija “AND”
  81. a. Iteriramo kroz sve uslove u kriterijumu
  82. b. Pozivamo pretrazivanje iz globalnog trie stable
  83. c. Ukoliko je rec iz uslova pronadjena
  84. c1. Ukoliko je kriterijum prvi, u RESULT_SET stavljamo pretrazeni skup
  85. stranica da ne bi radili operaciju & sa praznim skupom
  86. c2. Ukoliko je kriterijum drugi, njega smestamo u drugu promenljivu
  87. d. Kada prodjemo kroz sve uslove, pomocu operacije & ugradjene u Set odredjujemo
  88. RESULT_SET
  89. 3.Ukoliko je operacija “NOT”
  90. a. Ponavljamo korake a), b),c) iz koraka 3.
  91. b. Pomocu operacije – ugradjene u Set odredjujemo RESULT_SET
  92. 4.Ukoliko je operacija “KOMPLEMENT”
  93. a. Pretrazujemo trie za zadati kriterijum
  94. b. Ako je za dati kriterijum pronadjen skup html fajlova taj skup stavljamo kao
  95. rezultujuci
  96. c. U odnosu na taj rezultujuci skup radimo komplement pomocu funkcije u Set-u
  97. i dobijamo trazeni RESULT_SET
  98.  
  99.  
  100.  
  101.  
  102. Napredna pretraga(#parser)
  103. Parsiranje za naprednu pretragu je napravljeno tako sto se kriterijum pretrage prebacuje iz infiksne u postfiksnu notaciju, zatim iz postfiksne notacije u stablo parsiranja. Stablo parsiranja je binarno stablo.
  104. Prebacivanje kriterijuma iz infiksne u postfiksnu notaciju(Algoritam)
  105.  
  106. Uvodimo mapu prioriteta(kljuc je operator a vrednost je prioritet), “!” ima najveci prioritet 4, “&&” ima prioritet 3, “||” ima prioritet 2 i “(“ ima prioritet 1.
  107. Takodje uvodimo brojac koji ce brojati uzastopno pojavljivanje obicne reci, to znaci da ukoliko imamo vrednost brojaca vecu od 0 znaci da se kriterijum pojavio uzastupno 2 ili vise puta a da izmedju nije bilo operatora (u specifikaciji se podrazumeva “||”).
  108. 1.Iteriramo od prvog do poslednjeg stringa u kriterijumu
  109. 2.Ukoliko naidjemo na levu zagradu stavimo je na stek i resetujemo brojac na 0
  110. 3.Ukoliko naidjemo na desnu zagradu sve dok se na vrhu steka ne naidje na levu zagradu
  111. skidamo element sa vrha steka i stavljamo u rezultujuci niz i resetujemo brojac na 0
  112. 4.U slucaju da naidjemo na operatore “!”,”||” ili “&&” sve dok stek nije prazan i prioritet
  113. vrha steka je veci ili jednak prioritetu trenutnog operatora u rezultujuci niz stavljamo
  114. vrednost sa vrha steka, nakon cega stavljamo operator u rezultujuci niz i resetujemo brojac
  115. 5.Ukoliko naidjemo na obicnu rec(kriterijum), kriterijum pretrage ubacujemo u rezultujuci
  116. niz, takodje proveravamo ako je brojac veci od 0 dodajemo u rezultujuci niz i “||”, nakon
  117. cega uvecavamo brojac
  118. 6.Kada prodjemo kroz sve kriterijume u rezultujuci niz ubacujemo sve preostale elemente
  119. sa steka
  120. Kreiranje binarnog stabla (stablo parsiranja) – Algoritam
  121. 1.Iteriramo kroz elemente niza kriterijuma koji je u postfiksnoj notaciji
  122. 2.Ukoliko element nije operator kreiramo cvor stable i stavljamo na stek
  123. 3.U suprotnom, ukoliko je element operator
  124. a. Ako je u pitanju “!” kreiramo cvor sa vrednoscu “!” a za levo dete stavljamo
  125. element sa vrha steka, desno dete ostaje prazno(None)
  126. b. Ako je u pitanju neki drugi operator kreiramo cvor sa vrednoscu tog operatora
  127. i kao levo i desno dete postavljamo prve dve vrednosti sa vrha steka
  128. c. Na stek stavljamo novokreirani cvor
  129. 4.Kada se zavrsi iteriranje kroz elemente na vrhu steka se nalazi root cvor
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement