1 / 18

Några standardalgoritmer

Några standardalgoritmer. Utökning och minskning av vektor Sortering av vektor Sökning i vektor Sammanslagning av sorterade vektorer. Indata: vektor, nytt. Utökning. Skapa nyVektor med längden av vektor + 1. i = 0. i < vektorns längd. nyVektor[i] = vektor[i]. i = i + 1. true.

conner
Download Presentation

Några standardalgoritmer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

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

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

  6. Sorteringar

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

  8. Indata: vektor BubbleSort (FD) BubbleSort true 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. 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. 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 true i < minst 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. Flödesdiagram Linjär sökning Linjär Sökning Indata: vektor, target JSP i = 0 Indata: vektor, target Linjär sökning i < vektorns längd? false returnera -1 returnera -1 i = 0 Iteration (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 high – low > 1 Binär Sökning 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) o o returnera -1 returnera low * probe = (high + low) / 2 Selektion (vektor[probe] > target) o o high = probe low = probe

  15. first är tom second är tom false Skapa ny vektor merged med längd av first + second countFirst = 0 countSecond = 0 i = 0 false Merge Förena listor (FD) Indata vektorer: first , second true true returnera second returnera first i = i + 1 i < längden av merged false returnera merged 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. Indata vektorer: first, second Merge Förena listor (JSP) 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 returnera first o o i = i + 1 Selektion (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?

More Related