IT Računalniško programiranje

Post on 21-Jan-2016

55 views 0 download

description

IT Računalniško programiranje. Primeri 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 - PowerPoint PPT Presentation

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)

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