Presentation laddar. Vänta.

Presentation laddar. Vänta.

Några standardalgoritmer

Liknande presentationer


En presentation över ämnet: "Några standardalgoritmer"— Presentationens avskrift:

1 Några standardalgoritmer
Utökning och minskning av vektor Sortering av vektor Sökning i vektor Sammanslagning av sorterade vektorer

2 Utökning av en vektor (FD)
Indata: vektor, nytt Skapa nyVektor med längden av vektor + 1 i = 0 returnera nyVektor i < vektorns längd nyVektor[i] = vektor[i] true false Lägg nytt på sista platsen i nyVektor i = i + 1

3 Utökning av en vektor (JSP)
Indata: vektor, nytt Skapa nyVektor med längden av vektor + 1 i = 0 nyVektor[i] = vektor[i] Utökning Stomme Yttre loop * (i < vektorns längd) Lägg nytt på sista platsen i nyVektor returnera nyVektor i = i + 1

4 Minskning av en vektor (FD)
SlimArray Indata: vektor, index Skapa nyVektor med längden av vektor - 1 i = 0 i < index nyVektor[i] = vektor[i] true false i = index + 1 returnera nyVektor vektorns längd nyVektor[i-1] i = i + 1 i + 1

5 Minskning av en vektor (JSP)
Indata: vektor, index Skapa nyVektor med längden av vektor - 1 i = 0 nyVektor[j] = vektor[i] SlimArray Stomme Första loop * (i < index) returnera nyVektor i = i + 1 Andra loop (i < vektorns längd) i = index + 1

6 Sorteringar

7 Swap JSP Flödesdiagram Indata: vektor index a index b Swap Indata:
temp = vektor[a] vektor[a] = vektor[b] temp = vektor[a] vektor[a] = vektor[b] vektor[b] = temp vektor[b] = temp Stopp

8 BubbleSort (FD) Indata: vektor BubbleSort osorterad = true osorterad?
osorterad = false end = längden av vektorn - 1 false j = 0 j = j + 1 false vektor[j] > vektor[j + 1] j < end true false true Swap (vektor, j, j+1) osorterad = true end = end - 1 Stopp

9 end = längden av vektorn - 1
Indata: vektor BubbleSort BubbleSort (JSP) osorterad = true end = längden av vektorn - 1 Stomme Yttre loop (osorterad) * osorterad = false j = 0 Stomme Inre loop end = end - 1 (j < end) * Selektion j = j + 1 ( vektor[j] > vektor[j + 1] ) o Swap (vektor, j, j+1) osorterad = true

10 vektor[minst] > vektor[j]
Indata: vektor ExchangeSort (FD) Exchange i = 0 i = i + 1 i < vektorns längd - 1? true minst = i false j = i + 1 j = j + 1 false vektor[minst] > vektor[j] j < vektorns längd true true minst = j false i < minst true Swap (vektor, minst, i) Stopp false

11 ExchangeSort (JSP) Indata: vektor Exchange i = 0 Stomme Yttre loop
(i < vektorns längd - 1) * minst = i j = i + 1 Stomme Inre loop Selektion i = i + 1 (i < minst) (j < vektorns längd ) o Swap (vektor, minst, i) * Selektion j = j + 1 ( vektor[minst] > vektor[j] ) o minst = j

12 Linjär sökning Flödesdiagram Linjär Sökning Indata: vektor, target JSP
vektorns längd? false returnera -1 i = 0 Iteration returnera -1 (i < vektorns längd) true * vektor[i] == target true returnera i Selektion i = i + 1 false ( vektor[i] = target ) o minst = j returnera i

13 Binär sökning (FD) Indata: vektor, target Binär Sökning high – low
> 1 true high = vektorns längd false low = -1 eller vektor[low] <> target true probe = (high + low) / 2 low = -1 vektor[probe] > target false returnera low returnera -1 true false low = probe high = probe

14 Binär sökning (JSP) Indata: vektor, target Binär sökning high =
vektorns längd low = -1 Iteration Selektion ( low = -1 eller vektor[low] <> target) (high – low > 1) returnera -1 o returnera low o * probe = (high + low) / 2 Selektion (vektor[probe] > target) o o high = probe low = probe

15 Förena listor (FD) first är tom second är tom false
Skapa ny vektor merged med längd av first + second countFirst = 0 countSecond = 0 i = 0 Merge false Indata vektorer: first , second true true returnera second returnera first i = i + 1 i < längden av merged false returnera merged Förena listor (FD) true first[countFirst] < second[countSecond] countFirst = längden på first countSecond = längden på second false false false true true true Merged[i] = second[countSecond] Merged[i] = first[countFirst] Merged[i] = first[countFirst] Merged[i] = second[countSecond] countSecond = countSecond + 1 countFirst = countFirst + 1 countFirst = countFirst + 1 countSecond = countSecond + 1

16 Förena listor (JSP) Indata vektorer: first, second Merge Selektion
Skapa ny vektor merged med längd av first + second countFirst = 0 countSecond = 0 i = 0 Iteration returnera merged (i < längden av merged) (om first är tom) (om second är tom) * returnera second o returnera first o Selektion i = i + 1 (countFirst = längden på first) (first[countFirst] < second[countSecond] ) (countSecond = längden på second) o o o o merged[i] = first[countFirst] countFirst = countFirst + 1 merged[i] = second[countSecond] countSecond = countSecond + 1 merged[i] = first[countFirst] countFirst = countFirst + 1 merged[i] = second[countSecond] countSecond = countSecond + 1

17 Sortering och sökning på annat än heltal
Om vi ex. vill sortera en vektor av böcker, måste vi jämföra på annat än numeriska värden: if ( vektor[probe].ISBN.CompareTo( target ) > 0 ) Som Du ser kan vi här inte använda de vanliga relationsoperatorerna, eftersom string inte implementerat dem, utan vi är då istället tvungna att använda metoden CompareTo.

18 Brytning av listor Att tänka på:
Vilket eller vilka fält sorterar vi efter? Vilket eller vilka fält bryter vi på? Vilka variabler skall nollställas vid brytningen? Vilka skall inte nollställas?


Ladda ner ppt "Några standardalgoritmer"

Liknande presentationer


Google-annonser