IT Računalniško programiranje
description
Transcript of IT Računalniško programiranje
ITRačunalniško
programiranjePrimeri algoritemskih
programov (sortiranje, matrične operacije,
geometrijske transformacije)
Danijel Rebolj, FG 2007/2008
Literatura
D. Knuth: The art of computer programming, Addison Wesley Volume 1 - Fundamental Algorithms Volume 2 - Seminumerical Algorithms Volume 3 - Sorting and Searching Volume 4 – 7 v pripravi
Časovna zahtevnost
Podatek o tem, koliko časa se bo algoritem pri danih vhodnih podatkih izvajal, preden bo vrnil rešitev
Čas običajno merimo v osnovnih operacijah stroja
Časovno zahtevnost podamo kot funkcijo velikosti vhodnih podatkov (npr. velikost seznama)
Časovna zahtevnost
O-notacija označuje red rasti problemaPrimeri (n-velikost vhoda, c-
konstanta):O (log n)O (n)O (n2)O (nc)O (cn)
Primeri algoritemskih programovZaporedja (primer: Fibonaccijevo)Operacije z množicami točkRotacija kockeMatrične operacije Iskanje v seznamu (linearno,
binarno)Sortiranje (bubble sort, selektivno)
Fibonaccijevo zaporedje
Operacije z množicami točk
PremikSkaliranjeZrcaljenjeRotacijaKoordinatno oknoObseg poligona
Geometrijske transformacije
premik
skaliranje
zrcaljenje
zasuk
tp'p
][Sp'p
z
y
x
s
s
s
00
00
00
][ zSp'p
][][][ zyx RRRp'p
cossin0
sincos0
001
cos0sin
010
sin0cos
100
0cossin
0sincos
Rotacija kocke
UkazNastavi UkazRotiraj
DolociKocko
Izris
Rotiraj3D
Rotacija Odmor
RotacijaYIzracun projekcij
RotacijaX RotacijaZ
Rotacija kocke
Private Type Tocka X As Double Y As Double Z As Double XP As Double YP As DoubleEnd TypePrivate Type Daljica p1 As Long p2 As LongEnd Type
Rotacija kocke
Dim Ogl(8) As Tocka ‘OgliščaDim Rob(12) As Daljica ‘robovi kockeDim IndexOffset As Long ‘zamik indeksaDim Odmik As Single ‘odmikDim Ocisce As SingleDim KotRotacije As SingleDim IzrisObstaja As BooleanDim Rotiraj As BooleanDim Hitrost As Single
Rotacija kocke
Sub Rotacija() If RotacijaX Then _ call RotirajKoordinateOkoliX_ (KotRotacije) If RotacijaY Then _ call RotirajKoordinateOkoliY_ (KotRotacije) If RotacijaZ Then _ call RotirajKoordinateOkoliZ_ (KotRotacije)End Sub
Rotacija kocke
Sub RotirajKoordinateOkoliX(Kot As single) Dim i As Long, NovY As Single Dim NovZ As Single For i = 1 To 8 NovY = Ogl(i).Y * Cos(Kot) - _ Ogl(i).Z * Sin(Kot) NovZ = Ogl(i).Y * Sin(Kot) + _ Ogl(i).Z * Cos(Kot) Ogl(i).Y = NovY Ogl(i).Z = NovZ Next iEnd Sub
Rotacija kocke
Sub IzracunajProjekcijeTock() Dim i As Long For i = 1 To 8 Ogl(i).XP = Ogl(i).X * Ocisce / _ (Ocisce + Ogl(i).Z) + Odmik Ogl(i).YP = Ogl(i).Y * Ocisce / _ (Ocisce + Ogl(i).Z) + Odmik Next iEnd Sub
Matrične operacije
Osnova je dvojna zanka:FOR i = 1 TO n FOR j = 1 to m Matrika (i,j) = 0 NEXT jNEXT i
seštevanjemnoženje
Množenje matrik
DIM M(iMmax,jMax),N(jMax,kMax),P(iMax,kMax)
FOR i = 1 TO iMax FOR k = 1 TO kMax P (i, k) = 0 FOR j = 1 to jMax P (i,k) = P (i,k) + M (i,j)*N(j,k) NEXT j NEXT kNEXT i
Linearno iskanje v seznamu
Strategija:V neurejenem seznamu podatkov
preverimo vsak element ali ustreza iskanemu podatku
Iskanje se konča, ko je iskani element najden ALI ko se senam konča
Binarno iskanje v seznamu
Zahteva urejen seznam elementovUporabno kadar mora biti iskanje
hitro in se pogosto ponavljaTemelji na primerjavi med
elementom v sredini seznama in iskano vrednostjo
Implementacija je mogoča tudi v rekurzivni obliki
Sortiranje
Enostavno sortiranje ima časovno zahtevnost O (n2):
selektivno sortiranje, bubble sortManjša zahtevnost: QuickSort,
Merge,...Primerjava algoritmov Podroben prikaz delovanja
algoritma QuickSort
Selektivno sortiranje
Poiščemo najmanjši element v seznamu in ga zamenjamo s prvim (v primeru, ko želimo naraščajoče vrednosti)
Postopek ponavljamo za preostali del seznama dokler ni celoten seznam urejen
Selektivno sortiranjeSub SelektivniSort(n AS Long, seznam()) For i = 1 To n-1 smin = seznam(i): jmin = i For j = i + 1 To n If seznam(j) < smin Then smin = seznam(j): jmin = j endif Next j seznam(jmin) = seznam(i) seznam(i) = smin Next iEnd Sub
Bubble sort
Elemente v seznamu primerjamo v parih in ju zamenjamo, če je naslednik manjši od predhodnika
Največji element se po enem prehodu seznama znajde na zadnjem mestu (kot mehurček)
Postopek ponavljamo za preostali del seznama dokler ni celoten seznam urejen
Bubble sortSub BubbleSort(n AS Long, seznam()) FOR i = 0 TO iMax Prvi = Seznam(i) FOR j = i+1 TO iMax Drugi = Seznam (j) if Drugi < Prvi then Seznam(i) = Drugi Seznam(j) = Prvi Prvi = Drugi endif NEXT j NEXT IEnd Sub