Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.58 KB | None | 0 0
  1.  
  2. 1
  3. bostjan.vouk@tsc.si
  4. Programski jezik Java
  5. Interno gradivo za predmet
  6. Algoritmi in programski jeziki (4. letnik)
  7. Sortirni algoritmi
  8. (nepre
  9. č
  10. č
  11. eno besedilo)
  12. Urejanje
  13. Metode sortiranja razvrš
  14. č
  15. amo v dve skupini,
  16. in sicer na notranje in zunanje metode.
  17. Notranje sortiranje
  18. kadar se podatki nahajajo v hitrih pomnilnikih z
  19. naklju
  20. č
  21. nim dostopom,
  22. Zunanje sortiranje
  23. podatki se nahajajo v po
  24. č
  25. asnejših toda ve
  26. č
  27. jih
  28. zunanjih pomnilnikih
  29. trdi diski, ki temeljijo na mehansko gibljivih
  30. napravah z zaporednim dostopom
  31. bostjan.vouk@tsc.si
  32. Urejanje
  33. Pri algoritmih za sortiranje nas vedno zanima tudi
  34. kako hitro
  35. uredijo elemente in koliko prostora potrebujejo za
  36. sortiranje.
  37. Lo
  38. č
  39. imo algoritme, ki sortirajo elemente
  40. na mestu,
  41. zavzamejo samo toliko prostora, kolikor ga potrebuj
  42. ejo
  43. elementi
  44. ki elemente prestavljajo na druge lokacije,
  45. potrebujejo ve
  46. č
  47. prostora.
  48. Glede na
  49. č
  50. asovno zahtevnost algoritmov pa lo
  51. č
  52. imo
  53. preprostejše,
  54. elemente uredijo v
  55. č
  56. asu O(n
  57. 2
  58. ), tem pravimo navadne
  59. metode
  60. hitrejše
  61. elemente uredijo v
  62. č
  63. asu O(n log(n)),
  64. č
  65. e je
  66. bostjan.vouk@tsc.si
  67. n število elementov
  68. 2
  69. Urejanje
  70. Kateri algoritem za sortiranje bomo izbrali, pa je
  71. seveda odvisno tudi od števila elementov.
  72. Navadne metode
  73. preprostejše, asimptoti
  74. č
  75. no po
  76. č
  77. asnejše
  78. na majhnem številu elementov prav zaradi svoje
  79. preprostosti veliko bolj u
  80. č
  81. inkovite, kot pa metode, ki
  82. elemente uredijo v logaritemskem
  83. č
  84. asu
  85. bostjan.vouk@tsc.si
  86. Zunanje sortiranje
  87. Algoritme ne moremo uporabiti,
  88. č
  89. e podatkov, ki jih
  90. moramo urediti, ne moremo imeti v hitrem
  91. pomnilniku, ampak na zunanjih pomnilnih
  92. napravah, za katere vemo, da moramo do njih
  93. dostopati zaporedno.
  94. Na zunanjih pomnilnikih podatke shranjujemo v
  95. datotekah, kjer je v vsakem trenutku dosegljiv le
  96. en podatek. To pa je kar huda omejitev glede na
  97. to, da v polju lahko vsak trenutek dosežemo
  98. katerikoli element.
  99. To rešujemo z uporabo sortirnih metod, ki jim pravi
  100. mo
  101. zunanje metode.
  102. bostjan.vouk@tsc.si
  103. Zunanje sortiranje
  104. Pri zunanjih metodah naložimo le majhen del podatko
  105. v v
  106. glavni pomnilnik, uporabimo notranjo sortirno metod
  107. o in nato
  108. shranimo podatke na zunanje pomnilnike. Urejene del
  109. e nato
  110. zlijemo skupaj tako, da uporabimo eno od variant so
  111. rtiranja z
  112. zlivanjem, ki ga imenujemo tudi Merge sort.
  113. Č
  114. eprav smo metodo zlivanja opredelili kot zunanjo me
  115. todo,
  116. je hkrati tudi notranja metoda in jo lahko uporablj
  117. amo za
  118. sortiranje polj. Tudi to metodo lahko priredimo tak
  119. o, da
  120. elemente zamenjujemo na mestu, torej ne potrebujemo
  121. dodatnega prostora. Vendar je v tem primeru metoda
  122. v
  123. primerjavi z ostalimi notranjimi metodami precej
  124. neu
  125. č
  126. inkovita.
  127. Č
  128. e pa ji ponudimo malo dodatnega prostora,
  129. postane ena izmed najhitrejših med notranjimi metod
  130. ami.
  131. bostjan.vouk@tsc.si
  132. 3
  133. Zunanje sortiranje
  134. Metoda Sortiranja z zlivanjem sortira elemente
  135. dobesedno z zlivanjem dveh zaporedij v enega, pri
  136. č
  137. emer izbira med trenutno dosegljivimi elementi.
  138. To pa pomeni, da morata biti zaporedji urejeni, da
  139. potem lahko s pomo
  140. č
  141. jo primerjanja prvih
  142. elementov zaporedja dobimo eno urejeno
  143. zaporedje.
  144. Metoda temelji na strategiji deli in vladaj.
  145. Zaporedje najprej razbije na podzapredja, nato pa
  146. jih toliko
  147. č
  148. asa zliva skupaj, da dobimo eno urejeno
  149. zaporedje.
  150. bostjan.vouk@tsc.si
  151. Opis algoritma
  152. Algoritem uporablja paradigmo
  153. deli in vladaj
  154. .
  155. Za
  156. č
  157. ne s podtabelami velikosti 1, ki so same
  158. po sebi seveda urejene. Nato za
  159. č
  160. ne z
  161. zlivanjem(in sprotnim urejanjem) parov
  162. podtabel v ve
  163. č
  164. jo podtabelo in te tabele nato
  165. zopet zliva v ve
  166. č
  167. je, dokler ne zlije vseh
  168. elementov tabele v eno urejeno tabelo.
  169. bostjan.vouk@tsc.si
  170. bostjan.vouk@tsc.si
  171. 4
  172. Notranje sortiranje
  173. Vsi algoritmi za urejanje (sortiranje) podatkov
  174. slonijo na eni od treh osnovnih tehnik:
  175. 
  176. izbiranju
  177. 
  178. vstavljanju
  179. 
  180. premenami
  181. bostjan.vouk@tsc.si
  182. Urejanje z vstavljanjem
  183. Algoritem sortiranja z vstavljanjem uredi elemente
  184. tako, da po vrsti jemlje elemente in vsakega vstavi
  185. na svoje mesto.
  186. Za
  187. č
  188. ne z drugim elementom in ga primerja s prvim.
  189. Č
  190. e je manjši od prvega, potem ga postavi na prvo
  191. mesto, sicer na drugo. Nato vzame tretji element
  192. in ga primerja z drugim.
  193. Č
  194. e je manjši od drugega,
  195. ga primerja še s prvim, in v odvisnosti od rezultata
  196. vstavi tretji element na svoje mesto.
  197. Ta postopek ponavlja do zadnjega elementa.
  198. bostjan.vouk@tsc.si
  199. Opis algoritma
  200. 1.
  201. Spremenljivki i priredi 1;
  202. 2.
  203. i-ti element primerjaj z elementi pred njim,
  204. za
  205. č
  206. enši z elementom na mestu i-1. Dokler ne
  207. naletiš na manjšega oziroma na za
  208. č
  209. etek polja,
  210. vsak element prestavi za eno mesto naprej;
  211. 3.
  212. Vstavi i-ti element na svoje mesto;
  213. 4.
  214. Spremenljivki i priredi i+1;
  215. Ponavljaj korake 2, 3 in 4, dokler spremenljivka i
  216. ne preseže števila elementov.
  217. bostjan.vouk@tsc.si
  218. 5
  219. Psevdokoda
  220. Algoritem navadnega vstavljanja lahko
  221. zapišemo takole:
  222. for(i=1; i<a.length; i++){
  223. x=a[i];
  224. x vstavi na pravo mesto v a
  225. 1
  226. ...a
  227. i-1
  228. }
  229. bostjan.vouk@tsc.si
  230. Metoda
  231. public static void urejanjeVstavljanje(Element[] a)
  232. {
  233. int i, j;
  234. Element x;
  235. for(i=1; i<a.length; i++){
  236. if(a[i]>a[i-1]) continue;
  237. //izboljšava
  238. x=a[i];
  239. j=i-1;
  240. while(j>=0 && x<(a[j])){
  241. a[j+1]=a[j];
  242. j--;
  243. }
  244. a[j+1]=x;
  245. }
  246. }
  247. bostjan.vouk@tsc.si
  248. Primer
  249. Podana je tabela elementov: 12,1,7,33,14,6,77,8,21,10
  250. 0.
  251. Napiši, kako se spreminja vsebina tabele pri urejanju z
  252. vstavljanjem.
  253. 
  254. 12,
  255. 1
  256. ,7,33,14,6,77,8,21,100.
  257. 1,12,
  258. 7
  259. ,33,14,6,77,8,21,100
  260. 1,7,12,
  261. 33
  262. ,14,6,77,8,21,100
  263. 1,7,12,33,
  264. 14
  265. ,6,77,8,21,100
  266. 1,7,12,14,33,
  267. 6
  268. ,77,8,21,100
  269. 1,6,7,12,14,33,
  270. 77
  271. ,8,21,100
  272. 1,6,7,12,14,33,77,
  273. 8
  274. ,21,100
  275. 1,6,7,8,12,14,33,77,
  276. 21
  277. ,100
  278. 1,6,7,8,12,14,21,33,77,
  279. 100
  280. 1,6,7,8,12,14,21,33,77,
  281. 100
  282. bostjan.vouk@tsc.si
  283. 6
  284. Analiza navadnega vstavljanja
  285. Č
  286. e upoštevamo, da so vse permutacije
  287. elementov enako verjetne, lahko ocenimo
  288. število C
  289. i
  290. primerjanj med elementi. V i-tem
  291. pogrezanju je primerjanj najve
  292. č
  293. i-1 in
  294. najmanj 1, torej v povpre
  295. č
  296. ju i/2. Število M
  297. i
  298. premikov oziroma prirejanj elementov pa je
  299. C
  300. i+2
  301. (
  302. č
  303. e upoštevamo tudi prirejanje vrednosti
  304. stražarju).
  305. bostjan.vouk@tsc.si
  306. Analiza navadnega vstavljanja
  307. Celotno število primerjanj in premikov:
  308. najmanj C
  309. min
  310. =n-1 M
  311. min
  312. =2(n-1)
  313. povpre
  314. č
  315. no C
  316. ave
  317. =1/4(n
  318. 2
  319. +n-2) Mave=1/4(n
  320. 2
  321. +9n-10)
  322. najve
  323. č
  324. C
  325. max
  326. =1/2(n
  327. 2
  328. +n)-1 M
  329. max
  330. =1/2(n
  331. 2
  332. +3n-4)
  333. Najmanjše število primerjanj in premikov dobimo v
  334. primeru, ko so elementi že urejeni, najve
  335. č
  336. je pa v
  337. primeru, ko so elementi na za
  338. č
  339. etku nasprotno
  340. urejeni. Kar bi logi
  341. č
  342. no tudi pri
  343. č
  344. akovali, pa vendar
  345. pri vseh algoritmih to ne drži. Vidimo, da je
  346. algoritem tudi stabilen, saj medsebojni vrstni red
  347. elementov z enakimi klju
  348. č
  349. i ostane nespremenjen.
  350. bostjan.vouk@tsc.si
  351. Analiza navadnega vstavljanja
  352. Algoritem navadnega vstavljanja seveda
  353. lahko izboljšamo, saj je kon
  354. č
  355. no zaporedje, v
  356. katerega vstavljamo nove elemente, že
  357. urejeno. Kar pa pomeni, da bi lahko uporabili
  358. kakšno hitrejšo metodo za iskanje mesta za
  359. vstavljanje naslednjega elementa. Na primer
  360. dvojiško iskanje, kjer naredimo primerjavo z
  361. elementom na sredi kon
  362. č
  363. nega zaporedja in
  364. nadaljujemo z razpolavljanjem dokler ne
  365. najdemo ustreznega mesta za vstavljanje.
  366. bostjan.vouk@tsc.si
  367. 7
  368. Analiza navadnega vstavljanja
  369. To lastnost ima algoritem, ki ga imenujemo
  370. Sortiranje z vstavljanjem s padajo
  371. č
  372. im
  373. prirastkom
  374. oziroma Shell sortiranje po
  375. njegovem avtorju.
  376. Lahko re
  377. č
  378. emo, da ima algoritem Navadnega
  379. izbiranja prednost pred Navadnim
  380. vstavljanjem, je pa Navadno vstavljanje
  381. nekoliko hitrejše takrat, ko so elementi na
  382. za
  383. č
  384. etku že sortirani ali pa skoraj urejeni.
  385. bostjan.vouk@tsc.si
  386. Urejanje z izbiranjem
  387. Sortiranje z Navadnim izbiranjem temelji na
  388. na
  389. č
  390. elu iskanja oziroma izbiranja
  391. najmanjšega elementa.
  392. V vsakem prehodu skozi polje poiš
  393. č
  394. emo
  395. najmanjši element in ga postavimo na prvo
  396. mesto, kar pomeni, da so za
  397. č
  398. etni elementi
  399. polja urejeni in teh v naslednjih prehodih ne
  400. preverjamo ve
  401. č
  402. .
  403. bostjan.vouk@tsc.si
  404. Opis algoritma
  405. 1.
  406. Najdi najmanjši element in ga zamenjaj s
  407. prvim elementom polja.
  408. 2.
  409. Med ostalimi elementi najdi drugi najmanjši
  410. element v polju in ga zamenjaj z drugim
  411. elementom polja.
  412. 3.
  413. Ponavljaj do predzadnjega elementa polja.
  414. bostjan.vouk@tsc.si
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement