Algoritmer och mjukvarudesign
Välkommen till Pär Erikssons delar av kursen. Min enkla pedagogiska ide' och erfarenhet är att man lär sig mycket genom att lägga ner tid ca 2-4 timmar varje dag på att läsa i kursboken, titta på inspelningar samt skriva av befintlig kodexempel ur boken, inspelningar etc. Gör små förändringar i och av den för att sen testköra och se vad som händer. Ta paus varje timme. Ha en tänkt app för företag, klubb eller förening som du använder dina nya kunskaper på. Där du tänker, hur kan jag tillämpa det nya jag lärt mig på deras app? Jag kör ofta en tänkt liten bilfirma som jag applicerar nya koncept/kunskaper på och skriver koden för.
Veckoplanering - Vad titta på? Vad läsa? Vad göra?
Att läsa
- En hashtabell, eller hash table, är en datastruktur som används för att lagra nyckel-värde-par. Den är mycket effektiv för att snabbt hitta, lägga till och ta bort data. Här är en grundläggande förklaring av hur en hashtabell fungerar i C#: 1) Nyckel och värde: Varje element i en hashtabell består av en nyckel och ett värde. Nyckeln används för att identifiera värdet. 2) Hashfunktion: En hashfunktion tar en nyckel och omvandlar den till ett index i tex en array där värdet lagras. Detta gör att man kan hitta värdet snabbt. 3) Kollisioner: Ibland kan två olika nycklar generera samma index. Detta kallas en kollision, och det finns olika metoder för att hantera detta, såsom chaining( kedjning) eller open addressing (öppna adressering).
- Kap 8 Hashtables
- Sid 210-212 Hashtable fundmentals
- Sid 212-213 Chaining
- Sid 214 Remove items
- Sid 213-214 Openadressing
- Sid 215 Linear Probing
Att titta på
- Del 1 Intro Hashtabeller - Första delen om Hashtabeller , en powerpoint där jag går igenom vanliga koncept, begrepp samt kode exempel för att skapa en egen implementation hashtabell. Koncepet som Hashfunktion, buckets, hantera kollisioner med chaining gås igenom. Samt vanliga algoritmer för att lägg till, ta bort och söka i hashtabell.
- Del 2 Hashtabeller Open addressing - Andra delen om Hashtabeller , en powerpoint där jag går igenom open addressering som är ett annt sätt att hantera kollisoner än chaining. Vidare pratar jag om hur man hantera när tabellen börjar bli full då görs bla en dynamsik ökninga av dess storlek samt rehashing.
- Fö1 Hashtabell (Pär) - Här lär du dig skapa en egen klass för hashtabell implementation för att hantera bla bilobjekt. Som bucket används en array av länkad lista i vilken vi kan lägga Key_Value par där Key är regnummer och value är bil objektet. Add metoden gås igenom för att kunna lägg till ett bil objekt där key är regnummer och value är bil objektet. I Add används: Hash funktionalitet samt kollisionteknik. Kollisioner hanteras med chaining tekniken där jag använder en länkad lista för att lägg till flera bilar på samma index position. I HashFunctions metod skapas med en DBJ2 algoritmen. Baserat på en sträng får jag via HashFunction en index position där bil objekt ska läggas till eller hämtas ifrån.
- Fö2 Hashtabell -Get Metoden(Pär) - Här lär du dig att skapa Get metoden där man hämtar ut data baserat på en nyckel, regnummer, och får tillbaka ett value, ett bilobjekt. I Get hanteras den chaining som ev uppstod vid kollision där olika nyckelvärden,regnummer, fick samma index position. Då loopas den länkade listan igenom för att finna matching nyckelvärden,regnummer och då returneras det objekt dvs det matchande bilobjektet
- Fö3 Hashtabell - Remove metoden (Pär) - Här lär du dig att skapa remove metoden.
- Fö4 Hashtabell - Openadressing (Pär) - Här lär du dig hur du hantera kollsion med öppenaddresseringsteknik. Exemplet visar att lägga till data där man gör en linjär sökning efter nästa lediga index postion att lägg bil objektet i.
- Fö5 Hashtabell - Openadressing (Pär) - Här lär du dig hur du hantera kollsion med öppenaddresserings teknik. Exemplet visar att hämta till bildata på regnummer där man gör en linjär sökning för att kolla om bilen finns på nästa lediga indexpositon.
- Fö6 Hashtabell (Hans Edy) - Hans Edy föreläning om hash tabeller
- Fö7 Öppen adressering (Hans Edy) - Hans Edy's föreläsning om bla öppenadressering i hashtabeller
Övningar
- Gör en egna implementation av Hashtabell som har Add, Get, Remove funktionalitet. Den ska också ha egen hash- och resize. Samt hantera kollisoner med chaining och eller openadressing. Låt AI-verktyg ställa frågor till dig om Hashtabeller samt ge dig programmeringsuppgifter på Hashtabeller
Inlämningar
- Se kursrummet i Canvas vad som ska göras, hur det ska lämnas in och redovisas samt deadline.
Frågor och svar
Formulera ditt svar. Tryck sen på frågan för att se mitt svar. Jämför svaren. Vad för likheter och skillnander ser du? Vad saknas i mitt respektive ditt svar?
- What is a hash table?
- What is a bucket in a hash table?
- What is the purpose of a hash function in a hash table?
- How is a hash function chosen for a hash table?
- What is a hash collision?
- How does a hash table handle collisions?
- What is a hash collision chain?
- What is a hash table collision resolution algorithm?
- What is the difference between open addressing and chaining collision resolution techniques?
- How does linear probing work in open addressing?
- What is the time complexity of searching for an element in a hash table?
- What is the worst-case time complexity for searching for an element in a hash table?
- What is the load factor of a hash table?
- What is the ideal load factor for a hash table?
- What is the purpose of a hash tables resize operation?
- What is the difference between a hash table and an array?
- What is the difference between a hash table and a map?
Att läsa
- Kom ihåg inlämning av labb 4 om Hashtabeller senast fredag kl 17:00
Att titta på
Övningar
Inlämningar
- Kom ihåg inlämning av labb 4 om Hashtabeller senast fredag kl 17:00
Frågor och svar
Formulera ditt svar. Tryck sen på frågan för att se mitt svar. Jämför svaren. Vad för likheter och skillnander ser du? Vad saknas i mitt respektive ditt svar?
Att läsa
- Ett binärt sökträd (BST) är en datastruktur som används för att lagra sorterade data och möjliggör snabb sökning, insättning och borttagning av element. Här är några viktiga egenskaper hos ett binärt sökträd: 1)Noder: Varje nod i trädet innehåller en nyckel och två pekare, en till vänster barn och en till höger barn. 2) Ordning: För varje nod gäller att alla nycklar i det vänstra delträdet är mindre än nodens nyckel, och alla nycklar i det högra delträdet är större. 3) Rekursion: Trädet är rekursivt definierat, vilket innebär att varje delträd också är ett binärt sökträd.
- Kap10 Trees focus binärt sökträd
Att titta på
- Fö1 Träd (Pär) - Generell genomgång om vad data strukturen träd är. Går igenom vanlig begrepp som nod, rot, barn, syskon, löv, djup och höjd.
- Fö2 Binärt sökträd (Pär) - Vad är binärt sökträd. Dess grundegenskaper. Visar hur man lägget till i ett BST. Både hur m gör det rekursivt och med och hur du gör det med hjälp av while loop
- Fö3 Binärt sökträd traversering av alla noder (Pär) - Hur du besöker alla noder i BST:n med hjälp av in-order algoritmen vilket gör att nodernas värden presenteras i stigande ordning från A-Ö
- Fö4 Binärt sökträd traversering av alla noder (Pär) - Visar hur du sökar i ett BST både rekursivt och med hjälp av while loop. Vad är tidskomplexiteten i bäst resp sämst fall?
- Fö5 Binärt sökträd traversering av alla noder (Pär) - Visar hur du sökar i ett BST både rekursivt och med hjälp av while loop. Vad är tidskomplexiteten i bäst resp sämst fall?
- Fö6 Binära träd (Hans Edy) - Hans Edy's föreläsning om träd och binäraträ, där begrepp gås igenom. Hur man traverser ett träd samt implementation av träd.
- Fö7 Binärt sökträd (Hans Edy) - Hans Edy's föreläsning om binärt sökträd. Hur man lägger till, tar bort nod.
Övningar
- Låt AI-verktyg ställa frågor till dig samt ge dig programmeringsuppgifter om binära träd.
Inlämningar
- Se kursrummet i Canvas vad som ska göras, hur det ska lämnas in och redovisas samt deadline.
Frågor och svar
Formulera ditt svar. Tryck sen på frågan för att se mitt svar. Jämför svaren. Vad för likheter och skillnander ser du? Vad saknas i mitt respektive ditt svar?
- What is a Binary Search Tree?
- What is the time complexity of searching for an element in a balanced BST?
- What is the worst-case time complexity for searching an element in a BST?
- How does an in-order traversal of a BST output the elements?
- What property must the left and right subtrees of a BST node satisfy?
- What is a balanced BST, and why is it important?
- Describe the process of inserting a new value into a BST.
- Give an example of a situation where a BST is preferable over a hash table.
- How would you check if a binary tree is a BST?
Att läsa
- Kom ihåg inlämning av labb 7 om Binära träd senast fredag kl17:00
Att titta på
Övningar
Inlämningar
- Kom ihåg inlämning av labb 7 om Binärt sökträd senast fredag kl 17:00
Frågor och svar
Formulera ditt svar. Tryck sen på frågan för att se mitt svar. Jämför svaren. Vad för likheter och skillnander ser du? Vad saknas i mitt respektive ditt svar?
HashTable
Se spellistaTree
Se spellistaKursnamn: Algoritmer och mjukvarudesign
Program: IT-säkerhet och mjukvarutestning – kandidatprogram
Beskrivning: Olika typer av datastruktur introduceras, som länkadelistor, köer, hashtabeller och träd. För- och nackdelar diskuteras med avseende till snabbhet, minnesresurser och komplexitet som grund för kvalificerade val av datastruktur för att lösa ett specifikt problem.