INDA Introduktion till Datalogi Tentamen Mars 09

Relevanta dokument
Inga hjälpmedel tillåtna.

Observera : Lämna in svaren på frågorna på detta blad genom att lämna in detta blad!

Skriv i Java två klassmetoder, en rekursiv och en iterativ, som beräknar fib(i).

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 9 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Tentamen i Algoritmer & Datastrukturer i Java

public interface Skrivbar { void skriv(); } public class Punkt implements Skrivbar { public double x; public double y;

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.

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Föreläsning 3. Stack

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Objektorienterad programmering i Java

Programmering för språkteknologer II, HT2011. Rum

Quicksort. Koffman & Wolfgang kapitel 8, avsnitt 9

Programmering för språkteknologer II, HT2014. Rum

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Tentamen i Grundläggande Programvaruutveckling, TDA548

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 8: Exempel och problemlösning

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

2I1049 Föreläsning 5. Objektorientering. Objektorientering. Klasserna ordnas i en hierarki som motsvarar deras inbördes ordning

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Del A (obligatorisk för alla)

Länkade strukturer, parametriserade typer och undantag

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

Den som bara har en hammare tror att alla problem är spikar

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

TENTAMEN OOP

DAT043 - Föreläsning 7

Föreläsning 2. Länkad lista och iterator

Föreläsning 12: Exempel och problemlösning

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Att skriva till och läsa från terminalfönstret

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

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

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

TENTAMEN OOP

Tentamen Programmeringsteknik II Inledning. Anmälningskod:

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

DAT043 Objektorienterad Programmering

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Lösningsförslag till exempeltenta 1

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Laboration 13, Arrayer och objekt

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

Föreläsning 7. Träd och binära sökträd

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

TENTAMEN PROGRAMMERING I JAVA, 5P SOMMARUNIVERSITETET

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

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Lösningsförslag till exempeltenta 2

Föreläsning 2, vecka 8: Repetition

Föreläsning 3. Stack

Tentamen i Algoritmer & Datastrukturer i Java

Instuderingsfrågor, del D

Datastrukturer. föreläsning 3. Stacks 1

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

BST implementering, huvudstruktur

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Tentamen Datastrukturer D DAT 036/DIT960

Outline. Objektorienterad Programmering (TDDC77) Signatur. Klassen calculator. Överlagring (overloading) Arv (inheritance) Ahmed Rezine

TDDD78 Viktiga begrepp, del 2

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

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.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Föreläsning 2. Länkad lista och iterator

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

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 för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Malmö högskola 2008/2009 CTS

public boolean containskey(string key) { return search(key, head)!= null; }

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag aug - 23 Tentamen i Objektorientering och Java Skrivtid 5 h

Objektorienterad Programmering (TDDC77)

Konstruktion av klasser med klasser

Algoritmer och datastrukturer

Recitation 4. 2-D arrays. Exceptions

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Föreläsning 9: Arv och UML

Tentamen Programmeringsteknik 2 och MN Skrivtid: Inga hjälpmedel.

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Transkript:

KTH Nada Leif Kusoffsky INDA Introduktion till Datalogi Tentamen 20002 Mars 09 READ THESE INSTRUCTIONS VERY CAREFULLY. IF YOU DO NOT FOLLOW THESE INSTRUCTIONS, WE WILL BE COMPLETELY MERCILESS. There are three parts to this exam. The maximum point values of the first, second, and third parts are 26, 26, and 48 points respectively. You may use your points for Quiz1 (kontrollskrivning 1) instead of taking the first part of the exam. Likewise and independently, you may use your points from Quiz2 (kontrollskrivning 2) instead of taking the second part of the exam. As for the third part of the exam, you start with the points you have earned from your A-homework-assignments and B-homework-assignments. You need 50 points to pass this exam. The number of points required for a 4 on the exam is 74 and for 5 89 points and for a 6 100 points. The grade of the exam and the grade for the laborations gives the grade of the course. So you do not need to take the exam provided you are satisfied the grade of the examination part corresponing to the points you already have. NOTE: You must decide whether to use any of your quiz points before you turn in your papers. You must put a note on the cover page (i.e., the blue page where your name and ID number is written) clearly telling us what you want us to do. If you tell us that you want, for example, to use your points from Quiz1, then we will not even look at anything you might have written for the first part of the exam. WARNING!!!!!!!!! (1) If you do not tell us what to do with your quiz points for either quiz, then we will BY DEFAULT use your quiz points - even if you have solved the problems on the tenta and even if you got ZERO points on the quiz. (2) Your instructions must be clearly written on your blue cover sheet, otherwise they will be ignored. Inga hjälpmedel tillåtna. Lycka till!! Del I ( 1 <= fråga <= 6) 1. a) Skriv en iterativ klassmetod (dvs en metod med en snurra, "loop", och inget rekrusivt anrop) (8p)..... sumiter(int n, int [] arr) {... som summerar elementen i arr från och med elementet med index 0 till och med elementet med index n. b) Skriv motsvararande rekursiva metod..... sumrek(int n, int [] arr) {... (8p) Tips: Summan av elementen med index i 0<= i <= n är, n >0 lika med summan av elementet med index n och summan av elementen med index i 0<= i <= n-1.

Observera : Lämna in svaren på frågorna på detta blad genom att lämna in detta blad! 2. Klassmetoder och klassvariabler deklareras med ordet (2p) a) void b) final c) static a b c 3. För klassmetoder gäller att de (2p) a) kan anropas enbart om det finns objekt av klassen a b c b) kan anropas med <klassnamn>.<metodnamn> c) kan anropas enbart om det inte finns objekt av klassen 4. Det är möjligt att programmera på traditionellt imperativt sätt, i stort sett icke-objekt-inriktat, i Java genom a) att bara använda instansvariabler (2p) b) att aldrig använda referensvariabler a b c c) att bara använda klassvariabler och klassmetoder 5. Antag att vi har deklarationen int i = 5;och anropet dosomething1(i); i en klass MyClass (2p) Värdet på i i ett objekt av typen MyClass kan efter anropet a) ha ändrats b) ej ha ändrats c) ha avrundats a b c 6. En java-applikation startar alltid med en metod main som (2p) a) är void b) retunerar ett heltal c) är en instansmetod a b c Del II ( 7<= fråga <= 11) 7. För instansmetoder gäller att de (2p) a) kan anropas bara om det finns objekt av klassen a b c b) kan anropas med <klassnamn>.<metodnamn> c) kan anropas bara om det inte finns objekt av klassen 8. Antag att vi i en klass MyClass har deklarationen int [] myarr = {1,2; och anropet dosomething2(myarr);elementvärden i arrayen i ett MyClass-objekt kan efter anropet a) ha ändrats b) ej ha ändrats c) ha ändrats om de är primitiva typer a b c (2p) 9. Antag att vi vi i en klass MyClass har deklarationen MyMyx myx; och anropet dosomething3(myx); Objektet myx i ett MyClass-objekt kan efter anropet a b c (2p) a) ha ändrats b) ej ha ändrats c) ha ändrats om instansvariablerna i myx är primitiva typer 10. Ett Java-interface deklarerars som public interface Sx {... (2p) Deklarationen och initieringen Sx mysax = new Dx(..); a) är alltid felaktig a b c b) är korrekt om Dx(..)är en konstruktor i en klass som implementerar Sx b) är korrekt om Sx ärver en superklass till klassen Dx. Observera : Lämna in svaren på frågorna på detta blad genom att lämna in detta blad!

11 a). Antag att länder kan vara antingen monarkier eller republiker. Statschefen i en monarki är en (10p) regent (dvs en kung eller regerande drottning), statschefen i en republik är en president. Alla monarkier och vissa republiker har ett parlamentariskt system med en regeringschef med titeln premiärminister, men i vissa republiker som ej har ett parlamentariskt system (t ex USA) är presidenten även regeringschef. Skriv i Java fyra klasser som modellerar denna situation, dvs skriv fyra klasser som implementerar de klasser som illustreras av nedanstående UML-liknade klassdiagram: Land String namn String statschef() String regeringschef() Monarki String regent String premiärminister String tostring() Republik String president String tostring() ParlamentariskRepublik String premiärminister String tostring() b) Skriv en klass med ett huvudprogram som skapar en array med tre länder och som skriver ut (4p) information om länderna. Utskriften skall bli så här: Sverige (monarki) Statchef : Kung Karl XVI Gustav. Regeringschef : Göran Persson USA (republik) Statchef och regeringschef : President Georg W Bush Frankrike (parlametarisk republik) Statchef : President Jaques Chirac. Regeringschef : Lionel Jospin Utskiften av uppgifterna om de tre länderna skall ske utan användning av instanceof och med metoderna tostring(). c) Arrayen i uppgift b) kan skapas och instansieras på två sätt. Hur ser det sätt ut som du inte (4p) använde i uppgift b)?

Del III (12 <= fråga <= 14) 12 Implementera en prioritetskö med en dubbellänkad lista i en klass DLPriorityQueue (16p) som skall implementera gränsnittet PriorityQueue. Listan innehåller objekt av klassen DLItemNode. Listan hålls sorterad med avsende på nycklarna, (key), i DLItemNode.. För att jämföra nycklar används ett objekt som implementar gränsnittet java.util.comparator. Högsta prioritet = minsta nyckel. Du skall skriva hela klassen (bl a det som behövs för att skapa en lämplig datastruktur) med undantag för att av metoderna i gränssnittet PriorityQueue behöver du bara behöver implementera metoden public void insertitem(object k, Object e). Givet: public interface PriorityQueue { // Högsta prioritet = minsta nyckel public int size() ; // Antalet "items" i prioritetskön public boolean isempty(); // Är prioritetskön tom? public Object minelement() throws PriorityQueueEmptyException ; // Elemenet- delen av det "item" som har högst prioritet public Object minkey() throws PriorityQueueEmptyException; // Nyckeln i det "item" som har högst prioritet public void insertitem(object k, Object e); // Tillför nytt "item" public Object removemin() throws PriorityQueueEmptyException ; // Avlägsna det "item" som har högst prioritet public class DLItemNode implements Item { private Object element; private Object key; private DLItemNode left; private DLItemNode right; /** constructor with parameters */ public DLItemNode(Object k, Object e) { this(k, e, null, null); /** constructor with parameters */ public DLItemNode(Object k, Object e,dlitemnode ileft, DLItemNode iright ){ setelement(e);setkey(k); left = ileft; right = iright; public Object element() { return element; public void setelement(object o) { element=o; public Object key() { return key; public void setkey(object o) { key=o; public DLItemNode left() {return left; public void setleft(dlitemnode ileft) {left = ileft; public DLItemNode right() {return right; public void setright(dlitemnode iright) {right = iright;

13 Visa att f(n) är O(n2), där f(n) är exekveringstiden i speciellt fall för att sortera (16p) n distinkta element med Quicksort. (Det speciella fallet är i själva verket det värsta fallet). Beviset får hänvisa till fomeln för summan av en aritmetisk serie och satserna 3.16 ur boken, varav dessa två är de som torde behövas : 3.16.1 : If d(n) is O(f(n), then ad(n) is O(f(n)), for any constant a >0. 3.16.5 : If f(n) is apolynominal of degree d (that is f(n) = a0 + a1n +... + adnd), then f(n) is O(nd) 14 Visa hur man med radix-sortering gör en lexiografisk sortering av strängar med två tecken, (16p) alla tecken c i intervallet a <= c <= z. Svara genom att visa hur dessa strängar sorteras: zb pe mm fg ae ma vm kl le pp Vilken komplexitet har radix-sorteringen?

Förslag till svar tenatamen i 2D1340 Introduktion till datalogi 2002 mars 09. 1 public static int sumrek(int n, int [] arr) { if (n<0) { return 0; else { return arr[n] + sumrek(n-1, arr); public static int sumiter(int n, int [] arr) { int result = 0; for (int i = 0; i<=n; i = i+1) { result = result + arr[i]; return result; 2. Klassmetoder och klassvariabler deklareras med ordet (2p) a) void b) final c) static a b cx 3. För klassmetoder gäller att de (2p) a) kan anropas enbart om det finns objekt av klassen a bx c b) kan anropas med <klassnamn>.<metodnamn> c) kan anropas enbart om det inte finns objekt av klassen 4. Det är möjligt att programmera på traditionellt imperativt sätt, i stort sett icke-objekt-inriktat, i Java genom a) att bara använda instansvariabler (2p) b) att aldrig använda referensvariabler a b cx c) att bara använda klassvariabler och klassmetoder 5. Antag att vi har deklarationen int i;och anropet dosomething1(i); (2p) Värdet på i kan efter anropet a) ha ändrats b) ej ha ändrats c) ha avrundats a x b c 6. En java-applikation startar alltid med ett metod main som är (2p) a) är void b) retunerar ett heltal c) en instansmetod a x b c Del II 7. För instansmetoder gäller att de (2p) a) kan anropas bara om det finns objekt av klassen a x b c b) kan anropas med <klassnamn>.<metodnamn> c) kan anropas bara om det inte finns objekt av klassen 8. Antag att vi har deklarationen int [] myarr; och anropet dosomething2(myarr); (2p)

Värdet på elementen i arrayen kan efter anropet a x b c a) ha ändrats b) ej ha ändrats c) ha ändrats om de är primitiva typer 9. Antag att vi har deklarationen MyClass myx; och anropet dosomething3(myx); (2p) Värdet på instansvariablerna i objektet kan efter anropet a x b c a) ha ändrats b) ej ha ändrats c) ha ändrats om de är primitiva typer 10. Ett Java-interface deklarerars som public interface Sx {... (2p) Deklarationen och initieringen Sx mysax = new Dx(..); a) är alltid felaktig a bx c b) är korrekt om Dx(..)är en konstruktor i en klass som implementerar Sx b) är korrekt om Sx ärver en superklass till klassen Dx. 11 public abstract class Land { // a) protected String namn; public abstract String statschef(); public abstract String regeringschef(); public class Monarki extends Land{ private String regent; private String premiärminister; public Monarki(String inamn, String iregent, String ipm) { namn = inamn; regent = iregent; premiärminister = ipm; public String statschef(){ return regent; public String regeringschef() { return premiärminister; public String tostring() { return namn + " (monarki) \n Statchef : " + regent + ". Regeringschef : " + premiärminister; public class Republik extends Land{ protected String president;

public Republik(String inamn, String ipresident) { namn = inamn; president = ipresident; public String statschef(){ return president; public String regeringschef() { return president; public String tostring() { return namn + " (republik) \n Statchef och regeringschef : " + president; public class ParlamentariskRepublik extends Republik { private String premiärminister; public ParlamentariskRepublik(String inamn, String ipresident, String ipm) { super(inamn, ipresident); premiärminister = ipm; public String statschef(){ return president; public String regeringschef() { return premiärminister; public String tostring() { return namn + " (parlametarisk republik) \n Statchef : " + president + ". Regeringschef : " + premiärminister; public class Lander { // b) public static void main(string [] args) { Land [] land = { new Monarki("Sverige", "Kung Carl XVI Gustav", "Göran Persson"),

new Republik("USA", "President Georg W Bush"), new ParlamentariskRepublik("Frankrike", "President Jaques Chirac", "Lionel Jospin"); for (int i = 0; i < land.length; i = i+1) { System.out.println(land[i]); Land [] land = new Land[3]; // c) land[0] = new Monarki("Sverige", "Kung Karl XVI Gustav","Göran Persson"); land[1] = new Republik("USA", "President William Clinton"); land[2] = new ParlamentariskRepublik("Frankrike", "President Jaques Chirac", "Lionel Jospin"); 12 import java.util.*; public class DLPriorityQueue implements PriorityQueue { private Comparator comp; private int size = 0; private DLItemNode sentinel; public DLPriorityQueue(Comparator c) { if (c == null) { throw new IllegalArgumentException("Null comparator passed"); else { comp = c; sentinel = new DLItemNode(null, null,null, null); sentinel.setleft(sentinel); sentinel.setright(sentinel); public void insertitem(object k, Object e) { sentinel.setkey(k); DLItemNode walker = sentinel.right(); while (comp.compare(k, walker.key()) > 0) { walker = walker.right(); DLItemNode ny = new DLItemNode(k, e, walker.left(), walker); (walker.left()).setright(ny); walker.setleft(ny); size = size + 1;

13 Quicksort delar rekursivt de distinkta elementen som skall sorteras i tre delar: L = elemenet mindre än ett valt element, "pivot-elemntet" E = pivot-elemntet G = elemenet större än ett valt element, "pivot-elemntet". Den rekursiva arbetet kan illustreras med ett "quicksort-träd" med noder som innehåller de elemnt som skall sortras i ett viss anrop. Djupet på en nod i trädet är antalet rekursiva anrop man gjort för att komma till anropet av sorteringen av elmenten i noden: 85 24 63 45 17 31 96 50 24 45 17 31 85 63 96 24 17 45 85 63 24 85 Värsta fallet intäffar när delen L eller delen G blir tom i varenda steg, vilket gör trädets höjd maximalt, t ex 17 24 31 45 50 63 85 96 17 24 31 45 50 63 85 17 24 31 45 50 63 17 24 31 45 50 osv. Trädets höjd blir n-1, eftersom bara pivot-elemntet försvinner för varje nivå i trädet. Exekveringstiden för att dela upp sekvensen i en nivå är proportionell mot antalet element på nivån, (och att konkatenera L och E är O(1). På nivå i är antalet element n-i. Totala arbetet är arbetet summerat över hela trädet, dvs (summering av aritmetisk serie) n O( Σ (n-i) ) = O( (n+1)*((n+0)/2) = O (0.5*n2 + 0.5 *n) = O(n2) i=0 n p g a att summan av en aritmetisk serie Σ ai = (n*( an+a1))/2 v.s.v. i=1 och satserna 3.16 ur boken: 3.16.1 : If d(n) is O(f(n), then ad(n) is O(f(n)), for any constant a >0. 3.16.5 : If f(n) is apolynominal of degree d (that is f(n) = a0 + a1n +... + adnd), then f(n) is O(nd)

14 Skapa en "hink"-array med "hink"-index a till z (I Java, som kräver heltalindex, kan man enkelt förvandla index till heltalsindex med t ex (int) c - (int) a ). a b c d e f g h i j k l m n o p q r s t u v w x y z 0 25 Elementen i arrayen (hinkarna, "buckets") kan lagra köer av de element som skall sorteras. zb pe mm fg ae ma vm kl le pp Stoppa in elementen i hinken med hinkindex == andra tecknet i elementet. Vi får : le ae vm ma zb pe fg kl mm pp a b c d e f g h i j k l m n o p q r s t u v w x y z Ta ur elementen ur hinkarnas köer (Först in, sist ut) i ordning till en sekvens: ma zb pe ae le fg kl ma mm vm pp Stoppa in elementen i hinken med hinkindex == första tecknet i elementet. Vi får : mm pp ae fg kl le ma pe vm zb a b c d e f g h i j k l m n o p q r s t u v w x y z Ta ur elementen ur hinkarnas köer (Först in, sist ut) i ordning till en sekvens: ae fg kl le ma mm pe pp vm zb Sorterat, klart. Komplexitet O(n + N), där n antalet element och N antalet hinkar.