Förlustfri datakompression

Storlek: px
Starta visningen från sidan:

Download "Förlustfri datakompression"

Transkript

1 Förlustfri datakompression Patrik Lindberg Institutionen för informationsbehandling Åbo Akademi, Åbo, Finland E-Post: Abstrakt Detta papper ger en kort introduktion till förlustfri datakompression samt en presentation av välkända förlustfria kompressionsalgoritmer som frekvent används. De mest centrala begrepp inom ämnet kommer att presenteras eller nämnas. Exempel på innehåll är t.ex Huffman koder och diverse applikationer av dem, familjen av LZ kompressionsmetoder samt en översikt av Burrow Wheeler transformationen. Endel allmän teori på introduktionsnivå presenteras. Slutligen diskuteras kort patentskydden som gäller för nästan alla algoritmer inom ämnet. Klassificering Enligt ACM E. Data E.4 Coding and information theory -Data compaction and compression E.2 Data storage representation Enligt ACM SIG: SIGACT 1

2 1 Introduktion Behovet av att förmedla och lagra information växer hela tiden. Speciellt förmedlingen av information kräver effektiva metoder. Detta betyder att vi vill sträva till att överföra ett minimalt antal bytes för att få en viss data överförd, vilket inte är en helt trivial uppgift. Ett ganska konkret hinder är faktumet att det inte existerar en enda algoritm som skulle förmå att förminska all data (mera om detta senare), vilket betyder att olika metoder kan uppnå olika resultat på samma data. En metod kan vara mycket effektiv på en typ av data och ineffektiv på en annan, medan det motsatta kan gälla för en annan metod. I allmänhet brukar man skilja mellan två huvudtyper av datakompressionsmetoder: metoder som orsakar förlust och metoder som inte gör det (eng. lossy och lossless). I praktiken innebär detta att då man använder förlustfria metoder så kan en exakt kopia av ursprungsdatan skapas av den komprimerade datan. Om man accepterar förlust i ursprungsdatan så kan kompressionen givetvis göras mycket effektivare. Detta används t.ex för bilder, video och ljud. Tänk t.ex på mpeg, mp3 eller jpeg formaten. I regel använder man förlustfria metoder också då man först applicerat en metod som orsakar förlust. T.ex då man effektivt vill förminska bilder applicerar man först metoder som orsakar förlust. Det spelar ingen roll om vi byter ut två närliggande pixels mot medeltalet av dem, då de för ögat är nästa identiska. När hela bilden är processerad med dylika metoder applicerar man en förlustfri metod. Orsaken till att det är av stor betydelse att uppnå maximal kompression av data är ganska uppenbar. Tänk t.ex ett nätverk vars överföringskapacitet begränsas av en viss mängd bitar per tidsenhet. Om man komprimerar datan som skall överföras så är det ekvivalent med att öka nätverkets maximala kapacitet utan att på något sätt modifiera nätverket fysiskt. Dock behövs hårdvara eller programvara som utför kompressionen, vilket i praktiken innebär att kompressionen ofta görs på en användarmaskin. Idag är det så att det mesta vi överför i våra nätverk är komprimerat på något sätt. Man kanske inte direkt kommer att tänka på det, men det är nästan alltid så att de bildformat som används på nätet är sådana som applicerar kompressionsmetoder. Då man vill överföra data som är lagrat enligt ett format som inte använder sig av kompressionsmetoder så överförs inte den verkliga datan utan ett paket som är väl komprimerat. Paketen skapas med allmänt kända program, vilka omformaterar datan med hjälp av någon välkänd kompressionsalgoritm. Exempel på dessa paket eller filformat är t.ex gz, zip eller rar. Dessa format är mycket kända och vilken vanlig användare som helst kan packa upp datan på egenhand. I detta papper ges en översikt 2

3 av de vanligaste metoderna som används i dessa välkända kompressions program. Exempel på hur metoderna fungerar förekommer också. 1.1 Olika sätt att se på data Data är tal som representerar olika saker i olika sammanhang. Man kan sedan åstadkomma varierande skriftliga notationer av talen, beroende av vilken talbas man använder. Valet av talbas varierar och görs ofta på basen av bekvämlighetsskäl. Som alla vet så använder vi människor talbasen tio samt att vi har bestämt att datorer internt representerar tal med hjälp av talbasen två. Sedan har vi givetvis massor med olika typer av tal att välja mellan men för att hålla saker enkla så tolkar vi i detta papper all data som positiva hela tal (inklusive talet noll). Man kan se en fil som ett enda enormt tal eller så kan man se på varje bit eller varje byte skilt och tolka filen som en n dimensionell följd av bitar, där n står för antalet bitar som filen innehåller. Det är vanligt att ange storleken eller längden på en data i bytes eller mera approximativt med enheterna KB, MB eller GB. En byte är åtta bitar, alltså representerar varje byte ett värde mellan noll och 255 om man tolkar den som ett tal i talbasen tio. 1.2 Kort om datakomplexitet För en given data går det att bestämma ett tal som beskriver dess komplexitet. Det bör också för varje data existera en minimal data som kan erhållas via en bijektiv transformation av ursprungsdatan. För denna minimala data bör gälla att den har den högsta möjliga komplexiteten och att den inte på något sätt kan göras mindre. Det existerar ett antal metoder för att approximera storleken på den minimala datan, t.ex Shannons entropi ekvation. Det är dock problematiskt då man vill bilda allmän teori gällande detta eftersom transformationen med vilken den minimala datan uppnås inte behöver vara entydig. Kolmogorov var den första som insåg att man kan mäta komplexiteten hos en data, därför talas det ofta om Kolmogorov komplexitet. Ett viktigt samband mellan data komplexitet och kompression är att en data som har högre komplexitet är svårare att komprimera än en data som har lägre komplexitet. Teorier för komplexitets bestämning är ännu inte helt fullständiga och brukar i allmänhet vara mycket invecklade, varför det inte talas mera om dem i denna uppsats. En bra bok om komplexitet är [LiVi97]. 3

4 Vi skall se lite på hur man kan använda ekvivalensklasser och permutationer för att beskriva en mängd av olika datan. Varje unikt värde i datan bildar en egen ekvivalensklass inom vilken man kan permutera datan godtyckligt utan att den ändrar. Däremot så är ekvivalensklassernas permutationer sinsemellan helt avgörande för hur data ser ut. Man kan genom att permutera de ekvivalensklasser som utgör datan skapa alla olika datan som ekvivalensklasserna kan bygga upp. All data är alltså premutationer av de ekvivalensklasser som bygger upp datan. Ett exempel för att klargöra detta: antag att vi har 3 ekvivalensklasser t.ex, [0, 0, 0], [2, 2] och [5, 5, 5]. Dessa ekvivalensklasser kan t.ex utgöra denna data: [0, 0, 0, 2, 2, 5, 5, 5]. Nu kan vi permutera eller byta plats på nollorna sinsemellan utan att datan ändrar, men permuterar vi däremot ekvivalensklasserna sinsemellan så ändrar datan t.ex [0, 0, 2, 0, 2, 5, 5, 5]. Genom att permutera datan på detta sätt kan vi också komma åt all data som vår mängd av ekvivalensklasser möjligtvis kan utgöra: [0, 0, 0, 2, 2, 5, 5, 5], [0, 0, 2, 0, 2, 5, 5, 5], [0, 0, 2, 2, 0, 5, 5, 5],..., [5, 5, 5, 2, 2, 0, 0, 0]. Man kan också tolka detta enligt följande; För att kunna skapa en data D så räcker det med att veta vilka ekvivalensklasser E som datan består av samt den permutation P som skapar datan. Man kan visa att för P (E) = D gäller att P är entydig. Man kan också inse att om ekvivalensklasserna inte alls är blandade in i varann så kan inte datans komplexitet vara speciellt hög. 2 Teori och beteckningar Följande information ges nu för att förtydliga förklaringarna av de välkända kompressionsalgoritmerna som presenteras i nästa avsnitt. Låt X representera en oändlig följd av tal. Antag att följande gäller: M (N {0}), supm = 255, infm = 0, x X : x M Då gäller för varje ändlig serie av bytes D att D X. Antag att D representerar ursprungsdatan, alltså den data som ges åt kompressionsalgoritmen. Låt f beteckna en implicit definierad bijektiv funktion och antag att D = f(d). Man kan visa att det existerar en invers till f som transformerar D till D. Upp- och nerpackningsprocessen då kan skrivas ner 4

5 enligt: Nerpackning D f D Uppackning D f 1 D Låt F (x) beteckna frekvensen med vilken x förekommer i en given data D. Då gäller x D F (x) > 0 och y / D F (y) = 0. Låt size(x) vara en funktion som returnerar längden i bytes av x. 2.1 Allmän teori Det existerar ingen algoritm som kan komprimera alla D som är av storleken n = size(d). Antag att en sådan algoritm f existerar. Då gäller för f att D : size(d) = n size(d) > size(d ). Antag nu att size(d) = size(d ) 1. Då har varje D komprimerats med endast en byte, vilket är det minsta möjliga. Då gäller x, y D : x = y. Vilket är en motsägelse eftersom x, y D > f 1 > e. Alltså f kan inte vara bijektiv f är inte en förlustfri kompressionsalgoritm. Tänk också att om en sådan algoritm skulle existera så måste den klara av att förminska all data av längden två bitar till data som har längden en bit, eller en data som har längden en bit till en data som har längden noll, vilket är absurt. Man kan också visa att det inte existerar en rekursiv kompressionsalgoritm som skulle förmå att komprimera data i varje iteration. Man kan också visa att för varje data D så existerar ett teoretiskt maximum för hur mycket denna data går att komprimera. Detta är lätt att inse också om man tänker att om detta vore falskt så skulle det inte finnas något som skulle hindra oss från att komprimera varje data till längden noll. [C00] innehåller information om en jämförelse mellan prestandan på olika välkända kompressionsprogram. 5

6 3 Välkända kompressionsalgoritmer 3.1 RLE (Run Length Encoding) RLE är den enklaste möjliga datakompressionsmetoden. Man brukar ibland skilja mellan ett antal olika RLE metoder, vilka väsentligen fungerar enligt samma princip. Hela idén bygger på att man i D finner långa sträckor av likadan data. Sedan substituerar man ut dessa enligt ett på förhand bestämt sätt. Hittar man t.ex 100st nollor i D så skriver man i D 0,100 (värde/antal). En liten modifikation till detta har vi en annan variant av RLE-kodning. Då RLE kodar vi endast de värden som är mindre än ett på förhand bestämt värde. Om vi antar att denna gräns är talet 128 så skriver vi de tal som är mindre än 128 rakt in i D medan de övriga kodas enligt värde/antal. Om vi applicerar denna metod på datan D = {2, 5, 4, 150, 150, 150, 8}, så skulle kodningen bli D = {2, 5, 4, 150, 3, 8}. Man kan givetvis byta ut antalet bitar som används för att representera antal-fältet eller ändra på gränserna som bestämmer vilka värden som kodas. Man uppnår ganska varierande resultat på samma data då man gör detta. En annan vanlig tillämpning av RLE-principen använder sig av ett speciellt tecken (eng: escape character) i D för att identifiera en position som följs av värde/antal kodning. Det föråldrade bildformatet pcx använder sig av RLE med varierande effekt på bildstorleken. RLE är ett acceptabelt val för att minska på pcx-bilden då färgdjupet är åtta bitar. Då kan man optimera palettrepresentationen så att den passar bättre in för den valda RLE-kodningen. I grund och botten fungerar RLE-kodning inte så bra eftersom hela principen bygger på det felaktiga antagandet att data innehåller långa följder av likadana värden. Följden av en RLE-kodning kan ofta vara att D > D. 3.2 Substitution, Huffman-koder och aritmetisk kodning Vi vill sträva till att skapa nya, kortare representationer för sådana värden i D som förekommer oftare än andra. Man åstadkommer detta genom att frekvensanalysera D. Då erhåller man en tabell som sedan används för att substituera korta koder åt de värden som förekommer oftast. För att varje unikt värde i D skall få en entydig ny representation i D så krävs det, då D består av x st unika värden, log 2 (x) bitar. Detta är uppenbart, tänk t.ex att log 2 (256) = 8 och 2 8 = 256. Ett binärt träd råkar vara en mycket lämplig 6

7 struktur för att exemplifiera detta och utveckla teorin vidare. Man kan nu med hjälp av det binära trädet enkelt skapa de nya koderna genom att placera varje x D i ett löv i trädet. Gör man detta så kommer varje nya kod att vara unik. En annan viktig egenskap som de nya värdena kommer att ha är att inget av dem existerar som ett prefix i ett annat (man kallar därför ibland dessa binära träd för prefix träd). Om man skulle skapa ett balanserat träd (vilket är optimalt endast då följande gäller: (1) x D : F (x) = k, alltså alla unika värden förekommer med samma frekvens, (2) antalet unika värden i D är en potens av två) skulle djupet av trädet bli [log 2 (x)] a, där [x] betecknar heltalsdelen av x och definieras enligt [x] x < [x] + 1 och a = 0 då [log 2 (x)] N annars är a = 1. Vi exemplifierar detta med endel bilder och förklaringar. I figuren ovan representerar [1], [2], [3] och [4] unika datan. [1] kunde tänkas representera bokstaven a, [2] representerar bokstaven b och så vidare. Enligt trädet ovan så skulle [1] kodas om med värdet 00, [2] blir 01, [3] blir 10 och [4] blir 11. Detta uppnår man då man noterar en nolla då man traverserar trädet åt vänster och en etta då man traverserar åt höger. Observera att inget av dessa förekommer som ett prefix i ett annat. Trädet ovan åstadkommer ännu ingen kompression men det förklarar hur det går till när vi ger nya koder åt datan. Antag att F ([1]) = 500, F ([2]) = 20, F ([3]) = 20 och F ([4]) = 15. Vi ser att datan som [1] identifierar förekommer mycket oftare än de övriga, och vill utnyttja detta. Om vi substituerar datan i fråga enligt figuren ovan så kommer D att vara mindre än D. Detta är möjligt just för att F ([1]) är mycket större än F ([2]), F ([3]) och F ([4]). Koden för [1] i D kommer att vara 1 vilken är hälften kortare än den ursprungliga koden i D. I verkligheten så behandlas flera datavärden än fyra i gången eftersom det oftast är ändamålsenligt, men det framfaller nu att man med denna metod kan åstadkomma kompression. Det är också uppenbart att vissa prefixträd åstadkommer bättre kompression än andra, jämför t.ex de två träden ovan. 7

8 Metodens nytta framfaller tydligare då vi behandlar ett större antal olika datavärden, där vissa förekommer med hög frekvens och vissa med låg frekvens. Det går att visa att det för en given data D existerar åtminstone ett optimalt prefixträd (oftast existerar det en mängd av optimala prefixträd). Mannen som först presenterade en algoritm för att uppnå ett optimalt prefix träd var Huffman [H52]. Man brukar därför tala om Huffman-koder eller Huffman-träd då man hänvisar till dessa stukturer. Man kan visa att Huffman-kodningen genererar optimal kod endast om frekvensen av varje element i D är en potens av 1/2. En metod som inte lider av denna begränsning är aritmetisk kodning. Då man använder aritmetisk kodning på ett optimalt sätt så är det den effektivaste metoden som existerar för att komprimera data idag. Man kan visa att då längden av D är stor så är den aritmetiska kodningens effektivitet nära 100% av det teoretiska maximumet. En sådan tillämpning involverar mera komplexa metoder som t.ex dynamisk Markov-modellering och andra metoder som används för att förutspå frekvenser inom en delmängd av D. Läs mera i [LiVi97]. Aritmetisk kodning har dock en ganska stor nackdel (förutom patentskydd) som gör att metoden i allmänhet inte används. Problemet är att det kräver väldigt mycket minne och prosessor resurser att utföra kodningen på ett optimalt sätt. Använder man Markov-modelleringen så börjar man med en modellering av ordningen noll som sedan kan utvidgas till ordningen n. Då n går mot oändligheten så är kodningen optimal, men problemet är att resurskraven också går mot oändligheten, vilket inte är acceptabelt. I grunden fungerar aritmetisk kodning så att varje x D tilldelas en delmängd i intervallet [0, 1] R, på basen av den relativa frekvensen med vilken x förekommer i D. Man kan använda statiska tabeller för att bestämma symbolfrekvenserna, men det är mera optimalt att använda statistisk modellering (t.ex Markov-modellering). Som sagt så är hela processen ganska invecklad varför vi inte går vidare med detta i denna uppsats. Följande bild från [FAQ] beskriver dock grafiskt hur kodningen går till då man har två olika datan som vi kallar för X och Y (Den statistiska modelleringen faller lite utanför syftet med detta papper och man kan läsa mera om det i böcker om diskret matematik, t.ex [S94]). 8

9 3.3 LZ (Lempel, Ziv) Familjen av kompressorer De två mest använda metoderna för att komprimera data idag är LZ77 (se [ZiLe77]) och LZ78. Båda baserar sig på användningen av en data-ordbok (eng: data dictionary). LZ77 är en sekventiell algoritm. D gås alltså igenom från början till slut (=sekventiellt) samtidigt som algoritmen håller reda på de n senaste bytesen i D. Detta kallas allmänt för glidande fönster metoden (eng: sliding window). Om man påträffar en sekvens av bytes som existerar i fönstret så skrivs detta ner i D i form av ett offset/längd par, där offset säger hur många bitar man skall räkna tillbaka i fönstret, varifrån man sedan tar så många bytes som specifieras av längd parametern. I D så identifieras en pekare (som pekar in i fönstret) med en nolla och okomprimerad data med en etta, vilket betyder att okomprimerade bytes kommer att ta 9 bitar istället för 8 i D. Storleken på fönstret är avgörande för resultatet eftersom ett för litet fönster minimerar chansen att hitta identiska strängar och ett för stort fönster genererar för stora pekare. LZ77 fungerar bra för text eftersom det är sannolikt att samma ord förekommer ofta i texten. Vid kompression av text kan man räkna med att LZ77 har i medeltal följande effekt: D.33D, vilket är ett utmärkt resultat. Vid implementering av LZ77 används oftast binära träd och hashtabeller så att sökningen i det glidande fönstret kan göras så effektivt som möjligt. Många applikationer som använder sig av LZ77 kör ännu en nivå av 9

10 kompression på D (som resulterar från applicerandet av LZ77 på D). Detta lönar sig eftersom en frekvensanalys av D (från LZ77) visar att frekvenserna kan variera ganska mycket, vilket medför att det är sannolikt att t.ex Huffman-kodning ytterligare kan minska på storleken. LZ78 är en metod som baserar sig på ett indexerings system, där data sekvenser identifieras på basen av ett index i en data-ordbok (data dictionary). Data ordboken behöver inte sparas explicit i D utan uppackningsproceduren kommer att vara helt oberoende av den. Man kan observera att både LZ77 och LZ78 i grunden åstadkommer kompression genom substitution såsom de metoder som diskuterats tidigare också har gjort. Det är också av intresse att veta att man kan visa att data-ordboksmetoden i LZ78 är ekvivalent med glidande fönster metoden i LZ77 och att dessa båda kan visas vara ekvivalenta med substitutions metoden. Det existerar massor med olika algoritmer som baserar sig på LZ77 och LZ78. Dessa varianter av LZ77 och LZ78 skiljer sig i regel åt endast via de data strukturer som används i implementeringen eller i representationen av data (små optimeringar och specialfallsbeaktanden förekommer också). Exempel på varianter av LZ77 är t.ex LZR, LZSS, LZB och LZH. Varianter av LZ78 innehåller LZW, LZC, LZT, LZMW, LZJ. Många flera existerar. Som ett konkret exempel kan nämnas att zip och unzip programmen baserar sig på LZH (Lempel-Ziv-Huffman) vilket i praktiken betyder att LZ77 appliceras först och sedan appliceras Huffman-kodning som en andranivå kompression. UNIX compress metoden baserar sig däremot på den välkända LZW metoden, vilken introduceras nedan. LZW (Lempel-Ziw Welch) metoden av Terry Welch [W84] var ursprungligen menad för att operera som inbyggd programvara i ett kontrollkort som var menat för att styra ett sekundärminne. Det var meningen att detta skulle öka prestandan hos sekundärminnet. LZW-algoritmen fungerar på basen av antagandet att en sekvens av bytes kommer att förekomma flera gånger i D. Alltid när en viss byte kombination hittas på nytt så markeras detta i en tabell (i data-ordboken). Den ursprungliga tabellen innehåller endast element av längden ett. Hela nerpackningsproceduren går till så att man tar en byte i gången från D tills man har hittat en sträng som inte finns i tabellen. När man gjort detta så sparar man den nya strängen som ett nytt element i tabellen och fortsätter vidare i D. Vanligtvis så brukar implementeringar av LZW begränsa antalet element i tabellen. När denna gräns av element nås så tilläggs inte nya element till tabellen mera utan nerpackningsproceduren fortsätter att använda de element som finns tills man har gått igenom alla bytes i D. 10

11 3.4 BW (Burrows, Wheeler) Algoritmen Burrow-Wheeler-transformationen är egentligen inte en komressionsmetod men har utmärkta egenskaper som kan utnyttjas mycket effektivt då man komprimerar data. Transformationen i sig åstadkommer inte någon kompression utan dess syfte är att ordna om datan i en sådan form som är mycket lämplig för kompression. Prestandan är nära den som erhålls vid aritmetisk kodning medan resursanvändningen är på LZ-kodarnas nivå. Det är också värt att påpeka att det inte existerar några patenter som hänvisar direkt till denna metod, men eftersom BW-transformationen måste användas i samband med övriga kompressions metoder så minskar betydelsen av detta. BW-transformationen har inte blivit en standard för dagens datakomprimering utan den domineras ännu av LZ-kompressorer och Huffman-kodare. BW-transformationen utförs på en delmängd av D i gången. I [BuWh94] rekommenderas att varje delmängd som tas från D bör vara av storleken 1KB eller större, medan man idag kan konstatera att implementationer använder sig av en block storlek av minst 50KB. Antag att för varje x D gäller att x X, där X är en ordnad mängd. För varje delmängd d av D utförs följande. Först skapas ett kvadratiskt block så att följande gäller: a : [x, a] = [y, a], x = y, 0 a < size(x) = n. Sedan utförs b steg aritmetisk shift left för rad b, börjande med rad 0 och till sist rad (n 1) Efter detta så gäller att varje element i blocket också finns i d och d är en delmängd av D. Det gäller också att diagonalen [n x 1, x], där 0 x < n, består av likadana element och alla dessa element hör givetvis fortfarande till d. Sedan ordnar man om raderna så att kolumnen K0 innehåller samma ordningsrelation som X. Ett exempel för att klargöra det hela följer. Exempel: d D : d = {01, 03, 02, 07, 05, 11} X = N Steg 1 Steg 2 Steg 3 ---K0,K1,K2,K3,K4,K5 ---K0,K1,K2,K3,K4,K5 ---K0,K1,K2,K3,K4,K5 R0:01,03,02,07,05,11 R0:01,03,02,07,05,11 R0:01,03,02,07,05,11 R1:01,03,02,07,05,11 R1:03,02,07,05,11,01 R2:02,07,05,11,01,03 R2:01,03,02,07,05,11 R2:02,07,05,11,01,03 R1:03,02,07,05,11,01 R3:01,03,02,07,05,11 R3:07,05,11,01,03,02 R4:05,11,01,03,02,07 R4:01,03,02,07,05,11 R4:05,11,01,03,02,07 R3:07,05,11,01,03,02 R5:01,03,02,07,05,11 R5:11,01,03,02,07,05 R5:11,01,03,02,07,05 Resultatet av en BW-transformation är alltid den sista kolumnen (K(n 1)) samt indexet av det elementet i den sista kolumnen som innehåller det första elementet i D. Notera att det inte spelar någon roll om vi i steg två 11

12 roterar raderna åt höger eller vänster. Den K(n 1) som skapas då man i steg två roterar raderna åt vänster är alltså alltid identisk med den K(n 1) som skapas då man roterar raderna åt höger. Teorin ändras lite om man väljer att rotera elementen åt höger, så vi antar nu att elementen roteras åt vänster. I exemplet ovan är n 1 = 5, K5 = {11, 03, 01, 07, 02, 05} och index = 2. Indexet är lätt att bestämma eftersom R0 = d vilket medför att sista elementen i R1 alltid är det sökta elementet. Kom ihåg att R(n + 1) skapas genom att rotera Rn ett steg åt vänster och första elementet i R0 placeras sist i R1. Eftersom den sista kolumnen och indexet är vad vi får ut från transformationen måste det gälla att vi med denna information kan återskapa ursprungsdatan. Man kan med den information vi har skapa en lista av index som säger hur vi skall flytta elementen i vektorn för att återskapa ursprungsdatan. Detta går till såhär: Steg 1 Steg 2 ---K5,K0 R0:11,01 (K5,R0) = (K0,R5) -> T[5]=0 R1:03,02 (K5,R1) = (K0,R2) -> T[2]=1 R2:01,03 (K5,R2) = (K0,R0) -> T[0]=2 R3:07,05 (K5,R3) = (K0,R4) -> T[4]=3 R4:02,07 (K5,R4) = (K0,R1) -> T[1]=4 R5:05,11 (K5,R5) = (K0,R3) -> T[3]=5 -> T=2,4,1,5,3,0 Steg ett går ut på att återskapa K0 från K(n 1). Eftersom vi vet att K0 är sorterad så utför vi en sortering på K(n 1) för att generera K0. I steg två så genereras transformations vektorn. Denna är entydig och man kan med T skapa den ursprungliga datan. I verkligheten så finns det flera element som är lika i K(n 1) och K0. Då väljs alltid det element som är högst upp i K0 och inte är valt från tidigare. Eftersom dekodnings processen inte direkt är intuitiv så är det lättaste sättet att förstå hur dekodaren fungerar en studie över hur den opererar steg för steg på vårt exempel. Vi använder följande C kod för att skapa debug utskrift för dekodaren: 12

13 #define BYTE unsigned char void BWTDecode(int index,byte* T, BYTE* Kn, int range) { int lp; printf( Primaty Index = %d\n,index); for (lp = 0 ; lp < range ; lp++) { printf("kn[%d]=%d\n", index, Kn[ index ]); printf("index = T[%d] = %d\n",index,t[index]); index = T[ index ]; } } Funktionen är en modifierad version av ett kodexempel från N[96]. N[96] innehåller också fullständig källkod för att kunna skapa BW-transformerad komprimerad data. Som följande anropas BWTDecode med parametrarna från vårt exempel så ser vi hur ursprungs datan genereras. BYTE T[6]=02,04,01,05,03,00; BYTE K5[6]=11,03,01,07,02,05; BWTDecode(2,T,K5,6); ->utskriften av programmet: Primaty Index = 2 Kn[2]=1 index = T[2] = 1 Kn[1]=3 index = T[1] = 4 Kn[4]=2 index = T[4] = 3 Kn[3]=7 index = T[3] = 5 Kn[5]=5 index = T[5] = 0 Kn[0]=11 index = T[0] = 2 13

14 Vi ser tydligt hur koden hoppar fram och tillbaka i T för att få fram elementen i den ordning som de var från början. En detaljerad förklaring av BW transformationen finns i [BuWh94]. 4 Patenter Det finns massor av patenter som gäller för varje välkänd datakompressionsalgoritm. Patenterna gäller endast i USA och inte i den övriga världen (just nu), men ofta har detta den följden, att t.ex företag inte kan använda sig av dessa algoritmer. Massor av patenter är i konflikt med varandra och många syftar till sådant som inte är teoretisk möjligt. Det existerar en patent som diffust beskriver algoritm med ord i stil med: denna patent gäller för alla algoritmer som kan minska på data och en annan som säger ungefär såhär: en algoritm som minskar varje data som ges åt den (vilket inte är teoretisk möjligt). IBM äger över 30 patenter som syftar på olika implementationer av aritmetisk kodning. I varje fall så är det viktigt att vara medveten om detta, så att nästa effektiva kompressionsalgoritm som uppfinns publiceras under ett allmänt licens. 14

15 Källor [LiVi97] [W99] [H52] [W84] [S94] [ZiLe77] [N96] [BuWh94] [C00] [FAQ] Ming Li, Paul Vitanyi, An Introduction to Kolmogorov Complexity and Its Applications, Second Edition, Springer, Mark Allen Weiss, Data Structures and Algorithm analysis in Java, Addison-Wesley, D. Huffman, A Method for the Construction of Minimum-Redundancy Codes, 1952 Terry A. Welch, A Technique for High Performance Data Compression, IEEE Computer, 17(6), June 1984, pp William J. Stewart, Introduction to the Numerical Solution of Markov Chains, Princeton University Press, J. Ziv and A. Lempel, A Universal Algorithm for Sequential Data Compression, IEEE Transactions on Information Theory, Vol. IT-23, No3, May 1977, pp Mark Nelson, Data Compression with the Burrows-Wheeler Transform Dr. Dobb s Journal, Sept eller Michael Burrows, David Wheeler, A Block-Sorting Lossless Data Compression Algorithm Digital Systems Research Center, Research report, May 10, 1994 A comparison between lossless compression programs, sept. 2000, Compression FAQ, 15

Ordbokskodning. Enkel variant av kodning med variabelt antal insymboler och fixlängds kodord. (Jfr tunstallkodning)

Ordbokskodning. Enkel variant av kodning med variabelt antal insymboler och fixlängds kodord. (Jfr tunstallkodning) Datakompression fö 6 p.1 Ordbokskodning Enkel variant av kodning med variabelt antal insymboler och fixlängds kodord. (Jfr tunstallkodning) Man skapar en ordbok som innehåller 2 b olika sekvenser av symboler

Läs mer

Exempel, minnesfri binär källa. Ordbokskodning. Lempel-Zivkodning. Lempel-Zivkodning, forts.

Exempel, minnesfri binär källa. Ordbokskodning. Lempel-Zivkodning. Lempel-Zivkodning, forts. Datakompression fö 6 p.3 Datakompression fö 6 p.4 Ordbokskodning Exempel, minnesfri binär källa Enkel variant av kodning med variabelt antal insymboler och fixlängds kodord. (Jfr tunstallkodning) Man skapar

Läs mer

Tentamen, Algoritmer och datastrukturer

Tentamen, Algoritmer och datastrukturer UNDS TEKNISKA ÖGSKOA (6) Institutionen för datavetenskap Tentamen, Algoritmer och datastrukturer 23 8 29, 8. 3. Anvisningar: Denna tentamen består av fem uppgifter. Totalt är skrivningen på 36 poäng och

Läs mer

FLAC (Free Lossless Audio Coding)

FLAC (Free Lossless Audio Coding) Datakompression fö 9 p.1 FLAC (Free Lossless Audio Coding) Distorsionsfri kodning av ljud Ljudsignalen delas in i block (typiskt några tusen sampel). Koda summa/skillnad av de två stereokanalerna om det

Läs mer

Föreläsning 17 - Komprimering

Föreläsning 17 - Komprimering DD1343 Datalogi och numeriska metoder del 1 Föreläsning 17 - Komprimering Komprimering Följdlängdskodning (run-length encoding) Huffmankodning Lempel-Ziv-kodning Entropi Komprimering av bilder Komprimering

Läs mer

Burrows-Wheelers transform

Burrows-Wheelers transform Datakompression fö 7 p.1 Burrows-Wheelers transform Transformen själv ger ingen kompression, men gör det lättare att koda signalen med en enkel kodare. Antag att vi vill koda en sekvens av längd n. Skapa

Läs mer

Källkodning. Egenskaper hos koder. Några exempel

Källkodning. Egenskaper hos koder. Några exempel Källkodning Källkodning innebär att vi avbildar sekvenser av symboler ur en källas alfabet på binära sekvenser (kallade kodord). Mängden av alla kodord kalls för en kod. (Man kan förstås tänka sig att

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok, t.ex. den rekommenderade kursboken. Boken får ha anteckningar,

Läs mer

Föreläsning 5: Grafer Del 1

Föreläsning 5: Grafer Del 1 2D1458, Problemlösning och programmering under press Föreläsning 5: Grafer Del 1 Datum: 2006-10-02 Skribent(er): Henrik Sjögren, Patrik Glas Föreläsare: Gunnar Kreitz Den här föreläsningen var den första

Läs mer

Teoretisk del. Facit Tentamen TDDC (6)

Teoretisk del. Facit Tentamen TDDC (6) Facit Tentamen TDDC30 2014-08-29 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är skillnaden mellan synligheterna public, private och protected? (1p) Svar:public: Nåbar för

Läs mer

Träd och koder. Anders Björner KTH

Träd och koder. Anders Björner KTH 27 Träd och koder Anders Björner KTH 1. Inledning. Det är i flera sammanhang viktigt att representera information digitalt (d.v.s omvandla till sviter av nollor och ettor). Beroende på vilka villkor som

Läs mer

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1

Inlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1 Inlämningsuppgift : Finn 2D1418 Språkteknologi Christoffer Sabel E-post: csabel@kth.se 1 1. Inledning...3 2. Teori...3 2.1 Termdokumentmatrisen...3 2.2 Finn...4 3. Implementation...4 3.1 Databasen...4

Läs mer

Shannon-Fano-Elias-kodning

Shannon-Fano-Elias-kodning Datakompression fö 5 p.1 Shannon-Fano-Elias-kodning Antag att vi har en minnesfri källa X i som tar värden i {1, 2,...,L}. Antag att sannolikheterna för alla symboler är strikt positiva: p(i) > 0, i. Fördelningsfunktionen

Läs mer

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation

Innehåll. Föreläsning 11. Organisation av Trie. Trie Ytterligare en variant av träd. Vi har tidigare sett: Informell specifikation Innehåll Föreläsning 11 Trie Sökträd Trie och Sökträd 356 357 Trie Ytterligare en variant av träd. Vi har tidigare sett: Oordnat träd där barnen till en nod bildar en mängd Ordnat träd där barnen till

Läs mer

Övning 6 - Tillämpad datalogi 2012

Övning 6 - Tillämpad datalogi 2012 /home/lindahlm/activity-phd/teaching/12dd1320/exercise6/exercise6.py October 2, 20121 0 # coding : latin Övning 6 - Tillämpad datalogi 2012 Sammanfattning Idag gick vi igenom komprimering, kryptering och

Läs mer

Adaptiv aritmetisk kodning

Adaptiv aritmetisk kodning Datakompression fö 8 p.1 Adaptiv aritmetisk kodning Aritmetisk kodning är väldigt enkel att göra adaptiv, eftersom vi bara behöver göra en adaptiv sannolikhetsmodell, medan själva kodaren är fix. Till

Läs mer

Arduinokurs. Kurstillfälle 4

Arduinokurs. Kurstillfälle 4 Kurstillfälle 4 CW-generering Det här kan ses som överkurs men kan ändå vara roligt för att kunna generera CW på ett enkelt sätt. Det blir en hel del nytt men vi tar det steg för steg Som alla vet gäller

Läs mer

Ekvivalensrelationer

Ekvivalensrelationer Abstrakt datatyp för disjunkta mängder Vi skall presentera en abstrakt datatyp för att representera disjunkta mängder Kan bl.a. användas för att lösa ekvivalensproblemet avgör om två godtyckliga element

Läs mer

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer

Läs mer

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder

Block 2 Algebra och Diskret Matematik A. Följder, strängar och tal. Referenser. Inledning. 1. Följder Block 2 Algebra och Diskret Matematik A BLOCK INNEHÅLL Referenser Inledning 1. Följder 2. Rekursiva definitioner 3. Sigmanotation för summor 4. Strängar 5. Tal 6. Övningsuppgifter Referenser Följder, strängar

Läs mer

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn

Ett generellt träd är. Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn Träd allmänt Träd allmänt Ett generellt träd är Antingen det tomma trädet, eller en rekursiv struktur: rot /. \ /... \ t1... tn där t1,..., tn i sin tur är träd och kallas subträd, vars rotnoder kallas

Läs mer

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts. Datakompression fö 3 p.3 Datakompression fö 3 p.4 Optimala koder Övre gräns för optimala koder En prefixkod kallas optimal om det inte existerar någon annan kod (för samma alfabet och sannolikhetsfördelning)

Läs mer

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or. Datakompression fö 3 p.1 Optimala koder En prefixkod kallas optimal om det inte existerar någon annan kod (för samma alfabet och sannolikhetsfördelning) som har lägre kodordsmedellängd. Det existerar förstås

Läs mer

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4 Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa

Läs mer

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L.

3. Toppkvinnor på hög Låt lådan och de två kvinnornas famnar utgöra stackarna L, K1 respektive K2. Från början finns alla kort i L. KTH, Nada, Erik Forslin 2D1343, LÖSNING TILL TENTAMEN I DATALOGI FÖR ELEKTRO Lördagen den 8 mars 2003 kl 14 19 Maxpoäng tenta+bonus = 50+7. Betygsgränser: 25 poäng ger trea, 35 ger fyra, 45 ger femma.

Läs mer

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1. Schenker har interna system som handhar information som är av intresse för våra kunder/partners. Idag finns ett flertal av dem tillgängliga via Internet, sk Online-tjänster. Dessa erbjuder inte bara hämtning

Läs mer

Fredag 10 juni 2016 kl 8 12

Fredag 10 juni 2016 kl 8 12 KTH CSC, Alexander Baltatzis DD1320/1321 Lösningsförslag Fredag 10 juni 2016 kl 8 12 Hjälpmedel: En algoritmbok (ej pythonkramaren) och ditt eget formelblad. För betyg E krävs att alla E-uppgifter är godkända,

Läs mer

Skurlängdskodning. aaaabbbbbbbccbbbbaaaa. Man beskriver alltså sekvensen med ett annat alfabet än det ursprungliga.

Skurlängdskodning. aaaabbbbbbbccbbbbaaaa. Man beskriver alltså sekvensen med ett annat alfabet än det ursprungliga. Datakompression fö 4 p1 Skurlängdskodning Ibland har man källor som producerar långa delsekvenser av samma symbol Det kan då vara praktiskt att istället för att beskriva sekvensen som en följd av enstaka

Läs mer

Facit Tentamen TDDC (7)

Facit Tentamen TDDC (7) Facit Tentamen TDDC30 2014-03-18 1 (7) Teoretisk del 1. (3p) "Snabba frågor" a) Varför kan man tänkas vilja dölja metoder och variabler med private? (0.5p) Svar:För att skydda interna variabler från ändringar

Läs mer

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor Abstrakta datatyper 1 Primitiva vektorer Vektorer kan skapas av primitiva datatyper, objektreferenser eller andra vektorer. Vektorer indexeras liksom i C från 0. För att referera en vektor används hakparenteser.

Läs mer

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6 Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar

Läs mer

Tanka program KAPITEL 7. Shareware och freeware. Shareware. Freeware

Tanka program KAPITEL 7. Shareware och freeware. Shareware. Freeware KAPITEL 7 Tanka program Internet bokstavligen flödar av olika program man kan ladda ner. Det finns en del nyttiga program som är bra att känna till och använda. Allt för att göra det lättare för sig. I

Läs mer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18 TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud. Analog Digitalitet Kontinuerlig Direkt proportionerlig mot källan Ex. sprittermometer Elektrisk signal som representerar ljud Diskret Digital Representation som siffror/symboler Ex. CD-skiva Varje siffra

Läs mer

Datakompression. Harald Nautsch ISY Bildkodning, Linköpings universitet.

Datakompression. Harald Nautsch ISY Bildkodning, Linköpings universitet. Datakompression fö 1 p.1 Datakompression Harald Nautsch harna@isy.liu.se http://www.icg.isy.liu.se/courses/tsbk04/ ISY Bildkodning, Linköpings universitet Datakompression fö 1 p.2 Kursinnehåll Källmodellering:

Läs mer

Kursinnehåll. Datakompression. Föreläsningar, preliminärt program. Examination

Kursinnehåll. Datakompression. Föreläsningar, preliminärt program. Examination Datakompression fö 1 p.3 Datakompression fö 1 p.4 Kursinnehåll Datakompression Harald Nautsch harna@isy.liu.se http://www.icg.isy.liu.se/courses/tsbk04/ ISY Bildkodning, Linköpings universitet Källmodellering:

Läs mer

Tentamen TEN1 HI

Tentamen TEN1 HI Tentamen TEN1 HI1029 2014-03-14 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Sökning och sortering

Sökning och sortering Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling

Läs mer

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare Prov i DAT 312: Algoritmer och datastrukturer för systemvetare Jacek Malec Datavetenskap, LU 11 april 2003 Datum 11 april 2003 Tid 14 19 Ansvarig lärare Jacek Malec (tel. 03 9890431) Hjälpmedel inga Antal

Läs mer

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036) Tentamen Datastrukturer (DAT036) Det här är inte originaltesen. Uppgift 6 var felaktigt formulerad, och har rättats till. Datum och tid för tentamen: 2011-12-16, 8:30 12:30. Ansvarig: Nils Anders Danielsson.

Läs mer

Föreläsning 7: Bild- och videokodning

Föreläsning 7: Bild- och videokodning Föreläsning 7: Bild- och videokodning Inledning - varför bildkodning - tillämpningar - grundprinciper Förlustfri kodning - Variabellängdskodning - Skurländskodning - Huffmankodning Irreversibla kodningsmetoder

Läs mer

Lösningsförslag till övningsuppgifter, del V

Lösningsförslag till övningsuppgifter, del V Lösningsförslag till övningsuppgifter, del V Obs! Preliminär version! Ö.1. (a) Vi kan lösa uppgiften genom att helt enkelt räkna ut avståndet mellan vart och ett av de ( 7 ) = 1 paren. Först noterar vi

Läs mer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Träd Traversering Insättning, borttagning

Läs mer

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer D DAT 035/INN960 Tentamen Datastrukturer D DAT 035/INN960 22 december 2006 Tid: 8.30-12.30 Ansvarig: Peter Dybjer, tel 7721035 eller 405836 Max poäng på tentamen: 60. (Bonuspoäng från övningarna tillkommer.) Betygsgränser,

Läs mer

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X Algoritmer och Datastrukturer Kary FRÄMLING/Göran PULKKIS (v23) Kap. 7, Sid 1 BINÄRA TRÄD Träd används för att representera olika slags hierarkier som ordnats på något sätt. Den mest använda trädstrukturen

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok,

Läs mer

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Algoritmanalys Inledning Exempel 1: x n När vi talade om rekursion presenterade vi två olika sätt att beräkna x n, ett iterativt: x n =

Läs mer

Objektorientering: Lagring, räckvidd och livstid

Objektorientering: Lagring, räckvidd och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Objektorientering: Lagring, räckvidd och livstid Tre sorters variabler, två sorters metoder Räckvidd och livstid 2 Variabler (lokala och medlemsvariabler)

Läs mer

Lösningar Datastrukturer TDA

Lösningar Datastrukturer TDA Lösningar Datastrukturer TDA416 2016 12 21 roblem 1. roblem 2. a) Falskt. Urvalssortering gör alltid samma mängd av jobb. b) Sant. Genom att ha en referens till sista och första elementet, kan man nå både

Läs mer

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 Avbildningar och hashtabeller Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4 1 2 Mängder i Java 3 Mängd-gränssnittet Set vs. List Mängder får endast innehålla unika element: Metoden.add(E) returnerar

Läs mer

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) Snabba frågor Alla svar motiveras väl. Facit Tentamen TDDC30 2015-08-28 kl 08-12 1 (6) Teoretisk del 1. (6p) "Snabba frågor" Alla svar motiveras väl. a) Vad är syftet med ett interface? (1p) Svar:Att ange vilka metoder som ska finnas, utan

Läs mer

Datastrukturer och Algoritmer D0041D

Datastrukturer och Algoritmer D0041D Luleå Tekniska Universitet 19 mars 2014 Laborationsrapport Laboration 3 Datastrukturer och Algoritmer D0041D Primms Algoritm Namn E-mail Magnus Björk magbjr-3@ltu.student.se Handledare Felix Hansson Primms

Läs mer

Föreläsning 3.1: Datastrukturer, en översikt

Föreläsning 3.1: Datastrukturer, en översikt Föreläsning.: Datastrukturer, en översikt Hittills har vi i kursen lagt mycket fokus på algoritmiskt tänkande. Vi har inte egentligen ägna så mycket uppmärksamhet åt det andra som datorprogram också består,

Läs mer

Krafts olikhet. En momentant avkodbar kod (prefixkod) med kodordslängderna l 1,...,l N existerar om och endast om. 2 l i. 1 i=1

Krafts olikhet. En momentant avkodbar kod (prefixkod) med kodordslängderna l 1,...,l N existerar om och endast om. 2 l i. 1 i=1 Datakompression fö 2 p.1 Krafts olikhet En momentant avkodbar kod (prefixkod) med kodordslängderna l 1,...,l N existerar om och endast om N 2 l i 1 Bevis: Antag att vi har en trädkod. Låt l max =max{l

Läs mer

1 LP-problem på standardform och Simplexmetoden

1 LP-problem på standardform och Simplexmetoden Krister Svanberg, mars 202 LP-problem på standardform och Simplexmetoden I detta avsnitt utgår vi från LP-formuleringen (2.2) från föreläsning. Denna form är den bäst lämpade för en strömlinjeformad implementering

Läs mer

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum: Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60 Superscalar vs VLIW Cornelia Kloth IDA2 Inlämningsdatum: 2018-12-05 Abstract Rapporten handlar om två tekniker inom multiple issue processorer

Läs mer

Anujan Balasingam IDA14 NAND flashminnen

Anujan Balasingam IDA14 NAND flashminnen Anujan Balasingam IDA14 NAND flashminnen Hur kan prestandan och kapaciteten förbättras? Kursansvarig: Erik Larsson Datorarkitektur med operativsystem 7,5 hp 04-12-2015 Innehållsförteckning 1. Inledning...

Läs mer

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor

International Olympiad in Informatics 2011 22 29 July 2011, Pattaya City, Thailand Tävlingsuppgifter Dag 2 Svenska 1.3. Papegojor Papegojor Yanee är fågelentusiast. Sedan hon läst om IP over Avian Carriers (IPoAC), har hon spenderat mycket tid med att träna en flock papegojor att leverera meddelanden över långa avstånd. Yanees dröm

Läs mer

Föreläsningsanteckningar F6

Föreläsningsanteckningar F6 Föreläsningsanteckningar F6 Martin Andersson & Patrik Falkman Kortaste vägen mellan en nod och alla andra noder Detta problem innebär att givet en graf G = (E,V) hitta den kortaste vägen över E från en

Läs mer

Trädstrukturer och grafer

Trädstrukturer och grafer Översikt Trädstrukturer och grafer Trädstrukturer Grundbegrepp Binära träd Sökning i träd Grafer Sökning i grafer Programmering tillämpningar och datastrukturer Varför olika datastrukturer? Olika datastrukturer

Läs mer

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering DUGGA 2 AID-nummer: Datum: 2011-02-18 1 Tekniska högskolan vid Linköpings universitet Institutionen för datavetenskap Anders Haraldsson TDDC74 Programmering, abstraktion och modellering DUGGA 2 Fredag 18 feb 2011

Läs mer

Uppgift 1 (grundläggande konstruktioner)

Uppgift 1 (grundläggande konstruktioner) Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en

Läs mer

Tentamen i. TDDC67 Funktionell programmering och Lisp

Tentamen i. TDDC67 Funktionell programmering och Lisp 1 Linköpings tekniska högskola Institutionen för datavetenskap Anders Haraldsson Tentamen i TDDC67 Funktionell programmering och Lisp och äldre kurser TDDC57 Programmering, Lisp och funktionell programmering

Läs mer

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson

Uppsala Universitet Matematiska Institutionen Thomas Erlandsson Uppsala Universitet Matematiska Institutionen Thomas Erlandsson LÄSANVISNINGAR VECKA 36 VERSION 1. ARITMETIK FÖR RATIONELLA OCH REELLA TAL, OLIKHETER, ABSOLUTBELOPP ADAMS P.1 Real Numbers and the Real

Läs mer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT 2007. Lars Larsson Algoritmer 1 Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1 1 2 3 4 5 Lars Larsson Algoritmer 2 Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut

Läs mer

SMS047 Mediakodning. Introduktion. Frank Sjöberg. Introduktion. Introduktion

SMS047 Mediakodning. Introduktion. Frank Sjöberg. Introduktion. Introduktion SMS047 Mediakodning Frank Sjöberg Email: frank@sm.luth.se Rum A3207 Kursen behandlar kodning av fyra olika typer av media Text & annan data Bild Ljud (ej tal) Video Vi kommer i första hand att studera

Läs mer

Lösning till tentamensskrivning på kursen Diskret Matematik, moment B, för D2 och F, SF1631 och SF1630, den 1 juni 2011 kl

Lösning till tentamensskrivning på kursen Diskret Matematik, moment B, för D2 och F, SF1631 och SF1630, den 1 juni 2011 kl Matematiska Institutionen KTH Lösning till tentamensskrivning på kursen Diskret Matematik moment B för D2 och F SF63 och SF63 den juni 2 kl 8.- 3.. Examinator: Olof Heden tel. 7354789. Hjälpmedel: Inga

Läs mer

Tentamen TEN1 HI

Tentamen TEN1 HI Tentamen TEN1 HI1029 2015-03-17 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Tildatenta Lösningsskiss

Tildatenta Lösningsskiss Tildatenta 2017-10-20 Lösningsskiss E-delen 1. KMP PAPPAPARTY next[i] = 0 1 0 2 1 0 4 3 1 1 2. Parent-pekare Utskriftfunktionen fungerar så här: 1. Om noden inte är None a. gör vi först ett rekursivt anrop

Läs mer

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Talsystem Teori. Vad är talsystem? Av Johan Johansson Talsystem Teori Av Johan Johansson Vad är talsystem? Talsystem är det sätt som vi använder oss av när vi läser, räknar och skriver ner tal. Exempelvis hade romarna ett talsystem som var baserat på de romerska

Läs mer

Lösningsförslag till övningsuppgifter, del II

Lösningsförslag till övningsuppgifter, del II Lösningsförslag till övningsuppgifter del II Obs! Preliminär version! Ö.1. För varje delare d till n låt A d var mängden av element a sådana att gcd(a n = d. Partitionen ges av {A d : d delar n}. n = 6:

Läs mer

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M

LAB 1. FELANALYS. 1 Inledning. 2 Flyttal. 1.1 Innehåll. 2.1 Avrundningsenheten, µ, och maskinepsilon, ε M TANA21+22/ 5 juli 2016 LAB 1. FELANALYS 1 Inledning I laborationerna används matrishanteringsprogrammet MATLAB. som genomgående använder dubbel precision vid beräkningarna. 1.1 Innehåll Du ska 1. bestämma

Läs mer

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga. Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg

Läs mer

Faltningsreverb i realtidsimplementering

Faltningsreverb i realtidsimplementering Faltningsreverb i realtidsimplementering SMS45 Lp1 26 DSP-system i praktiken Jörgen Anderton - jorand-3@student.ltu.se Henrik Wikner - henwik-1@student.ltu.se Introduktion Digitala reverb kan delas upp

Läs mer

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Försättsblad till skriftlig tentamen vid Linköpings Universitet Datum för tentamen 2013-03-27 Sal Tid 08:00 12:00 Kurskod Provkod Kursnamn/benämning Institution Antal uppgifter som ingår i tentamen Antal

Läs mer

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc.

Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, träd Weiss, avsnitt 4.7, 11.5, 12.2, etc. Ännu mera träd: 2-3-träd, B-träd, rödsvarta träd, 2-3-4-träd Weiss, avsnitt 4.7, 11.5, 12.2, etc. Peter Ljunglöf DAT036, Datastrukturer 30 nov 2012 1 2-3-träd [inte i kursboken] Ett 2-3-träd har två sorters

Läs mer

Data och Information. Dr. Johan Hagelbäck.

Data och Information. Dr. Johan Hagelbäck. Data och Information Dr. Johan Hagelbäck johan.hagelback@lnu.se http://aiguy.org Data eller information? I den verkliga världen har vi information, till exempel en bok eller ett stycke musik Denna information

Läs mer

Programkonstruktion och Datastrukturer

Programkonstruktion och Datastrukturer Programkonstruktion och Datastrukturer VT 2012 Tidskomplexitet Elias Castegren elias.castegren.7381@student.uu.se Problem och algoritmer Ett problem är en uppgift som ska lösas. Beräkna n! givet n>0 Räkna

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift

Läs mer

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik Mats Boij 18 november 2001 13 Grupper Det trettonde kapitlet behandlar grupper. Att formulera abstrakta begrepp som grupper

Läs mer

Sätt att skriva ut binärträd

Sätt att skriva ut binärträd Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary 1 1.1 Definitioner... 1 1.2 Implementation... 2 Föreläsning 5 ADT Map/Dictionary, hashtabeller TDDI16: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 16 september 2015 Tommy Färnqvist, IDA, Linköpings universitet 5.1 Innehåll Innehåll

Läs mer

Vinjetter TDDC91 Datastrukturer och algoritmer

Vinjetter TDDC91 Datastrukturer och algoritmer Vinjetter TDDC91 Datastrukturer och algoritmer 17 augusti 2015 2 Scenario 1 Man har inom Posten Logistik AB skrivit programvara för sortering av kundinformation och vill standardisera användningen av sorteringsalgoritmer.

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre

Läs mer

Föreläsninsanteckningar till föreläsning 3: Entropi

Föreläsninsanteckningar till föreläsning 3: Entropi Föreläsninsanteckningar till föreläsning 3: Entropi Johan Håstad, transkriberat av Pehr Söderman 2006-01-20 1 Entropi Entropi är, inom kryptografin, ett mått på informationsinnehållet i en slumpvariabel.

Läs mer

efact Sök Sök/Rapporter (2008-04-18)

efact Sök Sök/Rapporter (2008-04-18) efact Sök Sök/Rapporter (2008-04-18) Sök För att söka efter fakturor, tryck Alt + Ö eller klicka på Sök i den övre menyraden. Man kan söka på tre olika typer av värden; 1. Fakturavärden. Information knutet

Läs mer

tentaplugg.nu av studenter för studenter

tentaplugg.nu av studenter för studenter tentaplugg.nu av studenter för studenter Kurskod Kursnamn D0017E Inledande programmering för ingenjörer Datum 2014-10-31 Material Tentamen Kursexaminator Betygsgränser Tentamenspoäng 3 14; 4??; 5?? 25/25

Läs mer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för

Läs mer

En generell prediktiv kodare utnyttjar signalens utseende N steg tillbaka i tiden för kodningen, dvs vi kodar efter den betingade fördelningen

En generell prediktiv kodare utnyttjar signalens utseende N steg tillbaka i tiden för kodningen, dvs vi kodar efter den betingade fördelningen Prediktiv kodning Närliggande sampel i en signal är oftast starkt korrelerade med varandra, det kan därför vara en bra ide att försöka utnyttja denna korrelation (minnet) innan kvantiseringen för att få

Läs mer

Uppgift 1 ( Betyg 3 uppgift )

Uppgift 1 ( Betyg 3 uppgift ) 2008-03-12.kl.14-19 Uppgift 1 ( Betyg 3 uppgift ) Du skall skriva ett program som läser igenom en textfil som heter FIL.TXT och skriver ut alla rader där det står ett decimaltal först på raden. Decimaltal

Läs mer

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller

Sökning. Översikt. Binärt sökträd. Linjär sökning. Binär sökning. Sorterad array. Linjär sökning. Binär sökning Hashtabeller Översikt Linjär sökning Sökning Binär sökning Hashtabeller Programmering tillämpningar och datastrukturer 2 Linjär sökning Binärt sökträd Undersök ett element i taget tills du hittar det sökta Komplexitet

Läs mer

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson!

F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Datorer i system! Roger Henriksson! F2 Datarepresentation talbaser, dataformat och teckenkodning EDAA05 Roger Henriksson Von Neumann-arkitekturen Gemensamt minne för programinstruktioner och data. Sekventiell exekvering av instruktionerna.

Läs mer

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt

Linjärt minne. Sammanhängande minne är ej flexibelt. Effektivt Binära träd (forts) Ett binärt träd kan lagras i ett enda sammanhängande minne Roten har index 1 Vänster barn till nod i har index 2*i Höger barn till nod i har index 2*i + 1 Föräldern till nod i har index

Läs mer

Objektorientering: Lagring och livstid

Objektorientering: Lagring och livstid TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Objektorientering: Lagring och livstid Tre sorters variabler Tre sorters variabel (1): Lokal 2 Lokal variabel Deklareras inuti en metod Vid varje anrop

Läs mer

MA2047 Algebra och diskret matematik

MA2047 Algebra och diskret matematik MA2047 Algebra och diskret matematik Något om funktioner och relationer Mikael Hindgren 1 oktober 2018 Funktionsbegreppet Exempel 1 f (x) = x 2 + 1, g(x) = x 3 och y = sin x är funktioner. Exempel 2 Kan

Läs mer

Föreläsning 8 i kursen Ma III, #IX1305, HT 07. (Fjärde föreläsningen av Bo Åhlander)

Föreläsning 8 i kursen Ma III, #IX1305, HT 07. (Fjärde föreläsningen av Bo Åhlander) Föreläsning 8 i kursen Ma III, #IX1305, HT 07. (Fjärde föreläsningen av Bo Åhlander) Böiers 5.3 Relationer. Vi har definierat en funktion f: A B som en regel som kopplar ihop ett element a A, med ett element

Läs mer

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion Introduktion till programmering D0009E Föreläsning 6: Iteration Multipel tilldelning Helt ok att tilldela en variabel flera gånger: bruce = bruce, bruce = 7 bruce Output: 7 Som tillståndsdiagram: bruce

Läs mer

INT 3 F4. Bildkomprimering. Run Length Encoding. Medieteknik Del2. Komprimering, ljud och rörliga bilder. Olika algoritmer för bildkomprimering:

INT 3 F4. Bildkomprimering. Run Length Encoding. Medieteknik Del2. Komprimering, ljud och rörliga bilder. Olika algoritmer för bildkomprimering: INT 3 F4 Medieteknik Del2 Komprimering, ljud och rörliga bilder DSV Peter Mozelius Bildkomprimering Olika algoritmer för bildkomprimering: Icke-förstörande komprimering RLE Run Length Encoding Huffman-kodning

Läs mer