Ändringar mellan två versioner
Här visas ändringar i "Håll reda på media" mellan 2016-09-20 22:35 av Linda Kann och 2021-10-11 07:04 av Linda Kann.
Håll reda på media
Det som gör att koden inte fungerar är¶
1. att det inte finns någon krockhantering.
hashvektor[hashcode] = tvbolag; För att lösa det kan man använda t.ex. krocklistor eller, linjär probning.¶ Linjär probning fungerar så att om det är upptaget på den givna positionen så söker man tills man antingen hittar nyckeln (den var redan instoppad sedan tidigare) eller tills man hittar ett tomt element i vektorn.¶ eller kvadratisk probning.¶
2. Hashkoden är ganska korkat implementerad. Strängarna "AB" och "BA""AB" och "BA" får samma värde.¶
alfanum = find(alfabet, tvbolagsnamn[i])+1 hashcode += alfanum För att lösförbättra detn kan man vikta genom att multiplicera med t.ex. 1, 100 och 10000.
3. Längden på hashvektorn är lite för liten och dessutom inget primtal. Välj istället hashvektorns storlek till exempelvis 151 (dubbelt så stor som förväntade antalet element)p=100, vilket inte är tillräckligt för att vi ska få 50% luft om vi stoppar in 75 TV-bolag, vi behöver minst 150 platser (dubbelt så stor som förväntade antalet element). Om vi vill använda kvadratisk probning för krockhanteringen. måste hashvektorns storlek dessutom vara ett primtal. 151 är närmast större primtal efter 150.