Hei! Dagens leksjon vil være litt annerledes enn resten. Det vil avvike ved at det bare er indirekte relatert til Java. Når det er sagt, er dette emnet veldig viktig for enhver programmerer. Vi skal snakke om algoritmer . Hva er en algoritme? Enkelt sagt er det en rekke handlinger som må fullføres for å oppnå et ønsket resultat . Vi bruker ofte algoritmer i hverdagen. For eksempel, hver morgen har du en spesifikk oppgave: gå på skole eller jobb, og samtidig være:
- Påkledd
- Ren
- Fed
- Våkn opp ved hjelp av en vekkerklokke.
- Ta en dusj og vask deg.
- Lag frokost og litt kaffe eller te.
- Spise.
- Hvis du ikke strøk klærne forrige kveld, så stryk dem.
- Kle på seg.
- Forlat huset.
- Kjøp eller last ned 1961-utgaven av Webster's Third New International Dictionary.
- Finn hvert navn fra listen vår i denne ordboken.
- På et stykke papir skriver du siden i ordboken som navnet står på.
- Bruk papirlappene til å sortere navnene.
for
loop som utfører denne oppgaven
int[] numbers = new int[100];
// ...fill the array with numbers
for (int i: numbers) {
System.out.println(i);
}
Hva er kompleksiteten til denne algoritmen? Lineær, dvs. O(n). Antall handlinger som programmet må utføre avhenger av hvor mange tall som sendes til det. Hvis det er 100 tall i matrisen, vil det være 100 handlinger (utsagn for å vise strenger på skjermen). Hvis det er 10 000 tall i matrisen, må 10 000 handlinger utføres. Kan algoritmen vår forbedres på noen måte? Nei. Uansett hva, må vi få N til å gå gjennom matrisen og utføre N setninger for å vise strenger på konsollen. Tenk på et annet eksempel.
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(0, 20202);
numbers.add(0, 123);
numbers.add(0, 8283);
}
Vi har en tom LinkedList
som vi setter inn flere tall i. Vi må evaluere den algoritmiske kompleksiteten ved å sette inn et enkelt tall i LinkedList
eksemplet vårt, og hvordan det avhenger av antall elementer i listen. Svaret er O(1), altså konstant kompleksitet . Hvorfor? Merk at vi setter inn hvert tall i begynnelsen av listen. I tillegg vil du huske at når du setter inn et tall i en LinkedList
, flytter ikke elementene seg noe sted. Linkene (eller referansene) er oppdatert (hvis du har glemt hvordan LinkedList fungerer, se på en av våre gamle leksjoner ). Hvis det første tallet i listen vår er x
, og vi setter inn tallet y foran på listen, er alt vi trenger å gjøre dette:
x.previous = y;
y.previous = null;
y.next = x;
Når vi oppdaterer lenkene, bryr vi oss ikke om hvor mange tall som allerede er iLinkedList
, om én eller én milliard. Kompleksiteten til algoritmen er konstant, dvs. O(1).