Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer

Størrelse: px
Starte visningen fra side:

Download "Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer"

Transkript

1 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer Asger Bruun Datalogisk Institut, Københavns Universitet Universitetsparken 1, 2100 København Ø Resumé. Formålet med undersøgelsen er at afklare slægtsskab og performanceegenskaber mellem den binomiale og den svage kø. Undersøgelsen er gennemført ved at sammenligne testresultater efter ombytning af komponenter mellem de to typer af køer. Det viser sig, at den binomiale kø er effektiv forudsat den implementeres som oprindeligt beskrevet. Selvom den svage kø på mange måder optimerer den binomiale kø, viser undersøgelsen, at vi stadig har noget at hente i de gamle kilder. Tak Lektor Jyrki Katajainen takkes for inspiration og talrige frugtbare diskussioner. 1. Indledning Den fundamentale abstrakte datatype, der kaldes en prioritetskø, har været genstand for forbedringsforslag, lige siden dens fremkomst i 1964 [1]. Et kendt forslag herpå er Vuillemins binomiale kø fra 1978 [2]. Den binomiale kø er herefter blevet genfortalt i forskellige variationer [3]. Et nyere helt entydigt og grundigt beskrevet forslag er den svage kø [4]. Den binomiale og den svage kø er nært beslægtede, på den måde, at de begge lagrer deres elementer i en skovlignende struktur, af hobordnede træer, og ved at deres trætyper kan gøres indbyrdes kompatible. Måderne, hvorpå deres skove er strukturerede og håndteres, er dog helt forskellige. En fordel ved den svage kø fremfor den binomiale kø er at tidskompleksiteten for elementindsættelse i værste fald kun er konstant i stedet for logaritmisk. Forklaringen til dette resultat findes i den svage køs skov, men et spørgsmål er hvad denne optimering koster. Formålet med det følgende eksperiment er, indenfor CPH STL [7], at sammenligne effektiviteten mellem den binomiale og den svage kø. CPH STL rapport , februar 2010.

2 2 Asger Bruun 2. Træerne Vuillemin anvender det binomiale træ som konceptuel model for at forklare den binomiale prioritetskø, men foreslår samtidigt at implementere disse som binære træer hvor rodens venstre undertræ er et fuldt træ og hvor rodens højre undertræ er tomt. Et binært træs knudes venstre undertræ er dermed binomialt største barn og højre undertræ binomialt næste søskende. Figur 1. Vuillemins binomiale træ og dets implementering. Det binomiale træ understøtter to operationer: join samler to træer af ens størelse til et nyt træ af dobbelt størelse og construct løsner børnene fra en given knude og returnerer som resultat en liste med børnene i stigende højde. Et problem med den binære træstruktur er at der ikke gives nogen vej fra en knude til dens forælder, hvilket er nødvendigt hvis f.eks en knude ændrer værdi og derfor må ombyttes med dens forælder jævnfør hobbetingelsen, hvilket er en tredje standardoperation på træet betegnet promote. En almindelig løsning er at implementere et binomialt træ direkte, men dette indebærer at ofte flere end een forælderpeger må opdateres ifald barn og forælder bytter plads. Figur 2. Et binomialt træ fra lærebøgerne [3]. Den svage kø [4] anvender en alternativ træstruktur, der ikke har ovennævnte opdateringsproblem med et stigende antal forælderpegere. Det som det kan koste ekstra at finde den binomiale forælder 1 mere end opvejer det som det ville koste at opdatere forældrepegere. Det svage træ 2 understøtter join, men eftersom det svage træ opereres anderledes i den svage kø, gives i stedet for construct operationen split der deler et træ midt over i to lige 1 I termer af den svage kø kaldes den binomiale forælder for distinguished parent. 2 Et svagt træ er på engelsk betegnet a perfect weak heap.

3 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 3 store dele. De svage træer er tæt på at være de binære træer som Vuillemin foreslog som implementering (de er spejlvendte) og begge typer af træer kan bringes til at understøtte de fire grundlæggende operationer. Derfor kan den binomiale og den svage prioritetskø direkte bytte komponenter med hinanden i form af deres trætyper. Figur 3. Et svagt træ og et binomialt træ med identiske pegere. Selve operationen promote er relativt kompliceret at implementere og er også dyr at eksekvere. En mulighed for at gøre promote billigere, er at adskille knudens værdi og struktur fra hinanden med dobbelte lænker. Forudsat barn og binomial forælder på forhånd er kendte, da består operationen i en simpel ombytning af to par af pegere. Figur 4. Et svagt træ med indirekte knuder. 3. Skovene Træerne har en overskydende peger i deres rodknude, som kan bruges til at pege på hvad som helst med. Vuillemins skov er en liste af træer hvis rødder er direkte hægtede sammen via den overskydende peger og denne skov kan have nul eller eet træ af hver højde, som modsvarer skovens størrelse målt i antal af knuder og skrevet som et binært tal. Maskinkodeinstruktioner der kan manipulere sådanne bits 3 kan udnyttes på den måde at den eneste træhøjdeinformation der kræves er den som allerede er indeholdt i skovens binære repræsentation for dens størrelse. Vuillemin implementerer binær addition på størrelsestallene og træerne parallelt. Systemet er kompakt og 3 Intel: BSF (bit scan forward) og BSR (bit scan reverse).

4 4 Asger Bruun letvægtet. En ulempe er at andre typer information kan koste tid at finde, hvis vi f.eks har en rod og gerne vil kende dens højde, da er vi nødt til at skanne bits i skovens størrelse samtidig med at vi hopper fra træ til træ i skovens rodliste indtil pågældende rod er fundet. Et problem med det binære talsystem er at hvis man inkrementerer et binært tal bestående af lutter af et-taller, da vil menten propagere hele vejen op, f.eks = 10000, hvilket betyder at indsættelse af et enkelt element i Vuillemins skov kan koste logaritmisk tid i værste fald. Figur 5. Vuillemins binomiale kø og implementation. Den svage kø adresserer problemet i det binære talsystem ved at anvende et binært redundant talsystem, der tillader flere repræsentationer for et og samme tal. Eksempelvis kan det decimale tal 17 skrives binært redundant som enten 1201, 2001 eller Størrelsestallet er skrevet almindeligt binært i den svage kø og det binære redundante system ligger derimod implicit i at skovens antal af træer i enhver højde kan skrives binært redundant. Systemet fungerer på den måde at der altid først propageres det mindst betydende ciffer lig 2 før inkrementering og dette trin benytter en hjælpestak til hele tiden at holde rede på næste 2-tal, den såkalde join schedule. Det sikres derved dels at to nabocifre aldrig begge kan være 2, og dels at mindst betydende ciffer aldrig kan være 2 før en faktisk inkrementering. Resultatet er at maksimalt eet binært redundant 2-tal propageres per inkrementering, hvilket vil sige at indsættelse af eet elemenet i den svage skov kan udføres i konstant tid. Den svage kø er også optimeret for at et træs højde kan findes direkte fra dets rod med et enkelt opslag, idet træerne er hægtede indirekte

5 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 5 sammen via en højde liste og er nu senest blevet integreret med join schedule [6]. Den svage skovs metode for addition er ved i stigende højde at udtage træerne og pushe dem på en temporær stak indtil en af de to skove løber tør for træer. Dernæst poppes træerne fra stakken og indsættes i den skov, der stadig havde træer tilbage. Fordelen herved er at join schedule stadig er valid, men ulempen er en temporær stak. Figur 6. En svag kø. 4. Talsystemer Vuillemin kan kritiseres for sin måde at inkrementere en skovs størrelse på og det er oplagt at forsøge udvidde Vuillemins løsning med et talsystem med samme garantier som den svage skovs. Mit forslag er et lazy carry talsystem, kaldet sådan fordi, jeg tør ikke garantere at det 100 pct modsvarer den svage køs binære redundante. Systemet skal forstås således at menten altid kun propageres een position ad gangen og at den dovne eventuelt multiple mente altid er mindre end akkumulator. Hvis det redundante binære systems størrelse kan repræsenteres med to ord, w1 og w2, da kan det konverteres til det dovne mentesystem ved: accu = w1 OR w2, carry = w1 AND w2 og size = accu + carry. Operationerne er herefter trivielle: propagering: if (carry) { n = (1 << bit scan forward(carry)); carry -= n; accu -= n; n <<= 1; if((accu & 1)==0) accu = n; else carry = n; } inkrementering: if ((accu & 1)==0) ++accu; else ++carry; dekrementering: n = (1 << bit scan forward(accu OR carry)); if (n & carry) { carry -= n; accu +=n; }; --accu; addition: w1 = (accu + other.carry + other.accu); w2 = carry; accu = w1 OR w2; carry = w1 AND w2; Addition foretages som Vuillemins løsning og efterfølges eventuelt af reparation på join schedule, men rummer også et designvalg, idet man istedet

6 6 Asger Bruun kunne vælge at addere mod carry. Betydningen er at når man vælger addition mod accu, vil resultatet kunne have en mindre join schedule og havde man gjort omvendt kunne vi ende med end større join schedule og som skulle genopbygges. 5. Billigere pegerarrangementer Under en diskussion havde vi på Jyrkis tavle visket alle tredje pegere ud, fordi vi fik øje på at det var let at gøre. Den delte peger kunne gå til forældre om ingen børn og ellers til mindre søskende. Det samme kan gøres på et svagt træ og i dettes termer vil det sige at slette alle forælderpegere og lade alle bladknuder (dem hvor højre undertræ er tomt) pege deres venstre undertræ på distinguished parent. Imidlertid stod det snart klart at adgang fra blad til rod i dette arrangement kan koste op mod log 2 n, hvor n er antallet af elementer. Figur 7. En binomial kø med to pegere per knude. Det gode ved strukturen er at den var let at implementere 4 og at den gav en enkel måde at iterere mellem knuderne 5 : efterfølger er = hvis har børn da største barn, ellers binomiale forælders næste søskende. For denne naive to-peger struktur kan efterfølger på denne måde findes i konstant tid. Figur 8. Binomial kø, naturlig iterator. 4 Strukturen er i min kode navngivet binomial light 5 De hidtil implementerede svage træers iteratorer var komplicerede og benyttede sig af hjælpestrukturer.

7 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 7 Således inspireret har jeg læst på Browns [5] to-peger arrangementer. Hans mest simple eksempel er det tre-peger arrangement som vi også kan finde i lærebøger [3]. Men dernæst giver han følgende to mere overaskende to-peger strukturer (og som det viste sig at være en udfordring at implementere): Figur 9. Browns R- & K-strukturer. Det problem som Brown dermed løser er at Vuilllemins construct er nød til at ombytte rækkefølgen på de søskende, for at de kan være en del af en ordnet rodliste i stigende højde idet at med Browns to letvægtede strukturer er alt allerede iorden. Browns skitse giver ikke præcis forklaring på hvordan man tester for om en given knude er en rod og det koster tilsyneladende log n tid at besvare, fordi man skal søge om hvorvidt der kan findes en forælder eller ej. Et andet problem med Browns løsning er at han nu i hans K & R strukturer vil have os til at implementere bidirektionelle rodlister. Hvad angår Browns rodlistes bidirektionalitet, er det let at modificere hans forslag til noget unidirektionelt. En fordel herved at at det atter i konstant tid kan afgøres om vi har en rod. Ulempen er at rodlisten skal omkobles i hver eneste construct.

8 8 Asger Bruun Figur 10. Browns unidirektionelle R- & K-strukturer. Nærværende benchmarks er på det foreliggende baseret på Browns unidirektionelle R & K strukturer. 6. Implementering De oplagte komponentombytninger er, at afprøve de svage træer i den binomiale skov, at afprøve de binomiale træer i den svage skov, og at afprøve disse plus minus indirektion aht. promote. Arbejdet modsvarer og kan dele komponenter med den svage kø, som er en del af CPH STL og er betegnet priority-queue framework. De udarbejdede performancetests er viderudviklede versioner af dem der findes for den svage kø og dertil er skrevet yderligere tre tests. Arbejdet kan benchmarkes mod enhver implementation der kan realisere CPH STL s meldable priority queue. Koden er skrevet crossplatform i C++ med Microsoft Visual Studio 2008 / VC9 og GCC 4.3 på Ubuntu Linux. Et problem har været at måle tid præcist 6, det har medført et større antal moduler måttes skrives og disse er flyttet over i et underprojekt med navnet Benchmarking. Det at skrive et framework, der er fuldt ud kompatibelt med den svage køs, kræver opfyldelse af et større antal interfaces. Mit framework er på den måde følsomt overfor forandringer i det framework, som findes for den 6 Der har været problemer med voldsom støj i målingerne især på Windows og i mindre grad på Linux.

9 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 9 svage kø. For at håndtere sammenbrud er der sat beskyttende klasser ind foran, men trods dette, da findes tilfælde, hvor det har været nødvendigt at branche koden. Figur 11. De væsentligste forbindelsespunkter mellem de to frameworks. 7. Resultatet De første standard CPH STL weak-queue benchmarkkørsler på mit Microsoft Windows/MSC-miljø var utilfredstillende. Nøjagtigheden på de rapporterede performancetal kunne have mindre end et betydende ciffer og nogle gange kunne observeres endog negative kørselstider, dvs. at et givent eksperiment havde kostet minus x sekunder at udføre. Windows 7 er mindre tilregneligt at måle tid i end Linux på en lille f- lerkernet maskine. I en benchmarkkørsel kunne tallene vise at den svage kø var hurtigere end den binomiale, for så i næste kørsel at vise det modsatte. Undersøgelsesstrategien ændredes derfor successivt. Første rettelse var at fordele støjen jævnt mellem de enkelte tests ved at skifte mellem dem for hver eneste repetition af et givent eksperiment og at indbygge fuld dataopsamling for efterfølgende statistisk behandling. Når man derpå beregnede kvartilerne sås det at antallet af repetitioner var nød til at være meget stort for meget små størrelser af skove for at holde en ensartet måleusikkerhed. Valgte at bruge 2 (k/c) som antallet af elementer og omvendt proportionalt antallet af repetitioner, hvor konstant c = 1.. er antallet af intervaller mellem hver potens af 2. Et andet problem i at måle tid på små antal af elementer var at CPH STL s benchmarks havde anvendt den almindelige

10 10 Asger Bruun std::clock som rapporterer 0 for alt der tager mindre end 25 millisekunder 7 og derfor skulle koden rettes med lidt maskinkode der tæller clockcykler 8 hvilket er let muligt på nyere Intel hardware. Styresystemet var imidlertid stadig stærkt interfererende og måleusikkerheden blev først i orden efter koden fik tilføjet nogle systemkald til Windows, der låser målingen til en enkelt kerne og prioriterer dennes process højest muligt indenfor styresystemet. Målingerne var nu præcise og de måleusikkerheder, der kunne observeres i et givent eksperiment, kunne reproduceres. Støjen er bragt ned i et niveau der er lavere end den naturlige spredning der kan opstå ved at permutere testdata for hver eneste repetition. Derfor permuteres testdata nu, for at sikre mod heldige kombinationer af værdier. For alle benchmarks er gældende at antallet af elementer er ført på x- aksen og at omkostningen er ført på y-aksen. Såfremt man har andgang til nærværende dokument i farver kan det vejlede, at de tre mest grønne implementationer benytter den svage skovs indirekte struktur mellem træerne og at de øvrige farver betegner variationer på direkte rodlistede skove. (a) Push (b) Increase (c) Erase (d) Pop (e) Meld (f) Pop & Push (g) Clear (h) Stefan Figur 12. Oversigt. 7 Granulariteten på std::clock afhænger af hardware og operativsystem. 8 Intel: RDTSC (read time stamp counter).

11 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 11 Det er det samme sæt af implementationer, der er målt på i de efterfølgnende plots og implementationernes grafer er punkterede og farvekodede efter følgende skema:

12 12 Asger Bruun Figur 13. Push: antal clockcykler per operation, som funktion af antal elementer. Den direkte binære skov og den indirekte svage skov pusher lige hurtigt. Den dovne mente skov er lidt bagefter. De skove der har træer med indirekte værdi er tungere og performer som forventet ringest.

13 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 13 Figur 14. Increase: antal clockcykler per operation, som funktion af antal elementer. Den direkte binære skov med bionomiale tre-peger knuder og indirekte værdi er hurtigst. Dette er den fordel som træer med indirekte værdi kan forventes at have, men fordelen er relativ lille, omkring 20%. Browns R- og K-strukturer er uventet ringere end vores naive binomiale to-peger træ.

14 14 Asger Bruun Figur 15. Erase med extract(p): antal clockcykler per operation, som funktion af antal elementer. Direkte binær skov med eller uden langsom top er hurtigst. Direkte dovne mente skove kan følge med. Indirekte binære redundante skove yder mere konstant, men ringere.

15 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 15 Figur 16. Pop med extract(find-min()): antal clockcykler per operation, som funktion af antal elementer. Direkte binær skov med langsom top er hurtigst, men bemærkes må det at med hurtig top følger lige efter, til trods for at den hver gang må kalde findmin. Indirekte binære redundante skove yder mindre konstant og ringere.

16 16 Asger Bruun Figur 17. Meld: antal clockcykler per operation, som funktion af antal elementer. Direkte binære skove er hurtigst. Direkte dovne mente skove kan følge med, men peaks på den tunge join-schedule antyder et problem i dens implementering. Indirekte binære redundante skove yder ringere og lidt mindre konstant.

17 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 17 Figur 18. Pop & Push: antal clockcykler per operation, som funktion af antal elementer. De forventede peaks i direkte binære skove af størrelser på potenser af to kan observeres. Det ses også at den direkte dovne mente skov performer mere konstant end den binære. Imidlertid performer indirekte binære redundante skove ringere og endnu mindre konstant.

18 18 Asger Bruun Figur 19. Clear med extract(): antal clockcykler per operation, som funktion af antal elementer. Direkte binær skov med eller uden langsom top er hurtigst. Direkte dovne mente skove kan følge med. Indirekte binære redundante skove yder mindre konstant og ringere.

19 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 19 Figur 20. Stefans benchmark: antal clockcykler per operation, som funktion af antal elementer. Direkte binær skov med eller uden langsom top er hurtigst. Direkte dovne mente skove kan følge med. Indirekte binære redundante skove yder ringere. Stefan Edelkamps test [8] er en enkel benchmark der beskriver et typisk mix af operationerne ved dagligdags anvendelse af en prioritetskø med antallet af dataelementer lig max N.

20 20 Asger Bruun Pseudo: N x insert() N x increase() N/2 x extract(p) N/2 x pop() 8. Diskussion Det er overraskende at måtte observere den gamle direkte binære skov eksekvere hurtigere end den indirekte mere moderne binært redundante skov i adskillige sammenligninger. Inklusionen af en direkte skov med doven mente viser at forskellen ikke kan tilskrives talsystemet. Det kan se ud til at årsagen kan findes i den indirekte binært redundante skovs ekstra allokationer og h- vor, i alle kørte tests, de to øvrige skovtypers allokeringer er konstante og ofte nul. (a) Erase (b) Pop (c) Meld (d) Pop & Push (e) Clear (f) Stefan Figur 21. Allokerede bytes per operation. Angående svaret på Vuillemins problem med menten, der worst case propagerer hele vejen igennem, har det været nødvendigt at foretage en check måling, hvor bl.a. indirekte binært redundante skove er skåret fra, fordi de var for langsomme.

21 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 21 Figur 22. Pop & Push: antal clockcykler og compares per operation, som funktion af antal elementer. Den tydeligste effekt er at den direkte binære skov derved får en dyr findmin, som til et vist mål afspejles i testens eksekveringstid og at det dovne mente talsystem er mere stabilt, end det enkle binære, imod denne værste situation. 9. Konklusion Indirekte systemer kan optimere udvalgte fordele. Træer med indirekte værdier er hurtige ifald promote eksekveres mere end noget andet. Ligeledes er indirekte skove velegnede ifald push og increase er prioriterede operationer. I øvrige hermed målte tilfælde, da er de direkte strukturer hurtigere. Nærværende rapport har afsløret problemer, der fremover kræver nærmere analyse. Litteratur [1] Floyd, Kaupe, Williams. Algorithms 113, 143, 144, 232 & 245. Communications of the ACM ( ). [2] Jean Vuillemin. A data structure for manipulating priority queues. Communications of the ACM 21 (1978), [3] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. Introduction to Algorithms, 2nd Edition, The MIT Press (2001).

22 22 Asger Bruun [4] Amr Elmasry, Claus Jensen, and Jyrki Katajainen. Relaxed weak queues: An alternative to run-relaxed heaps. CPH STL rapport , Datalogisk Institut, Københavns Universitet (2005). [5] M. R. Brown. Implementation and analysis of binomial queue algorithms. SIAM J. Computing 7(3) (1978), [6] Stefan Edelkamp, Jyrki Katajainen, Jens Rasmussen. Generic-programming framework for benchmarking weak queues and their relatives (2009). [7] The Copenhagen Standard Template Library, ( ). [8] Stefan Edelkamp, Møde den 5. januar om prioritetskøer på Datalogisk Institut, Københavns Universitet (2010).

23 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer 23 Bilag A.1 benchmarking.hpp Bilag A. Code 1 #ifndef CPHSTL BENCHMARKING HPP 2 #define CPHSTL BENCHMARKING HPP 3 / 4 Desc : Repeated measurements o f r e s o u r c e consumption. 5 An attempt to s i m p l i f y measurements and to improve 6 accuracy in time, i n c l u d e s some b a s i c s t a t i s t i c s. 7 8 Auth : Asger Bruun Impl : t i m e c o u n t e r - counts system time t i c k s. 11 compare counter - counts compares. 12 a l l o c c o u n t e r - counts a l l o c a t i o n s. 13 s t o p w a t c h - t i m e c o u n t e r c o n v e r t e d to seconds. 14 combi counter - t h e above c o u n t e r s combined counting compare - wrapper, makes your comparator count. 17 c o u n t i n g a l l o c a t o r - counting a l l o c a t o r replacement c p u a t t e n t i o n - g e t optimal system p r i o r i t y f o r timing. 20 / #include a s s e r t. h++ 23 #include m s c f i x. hpp #include b e n c h m a r k s t a t i s t i c s. hpp 26 #include benchmark compare counter. hpp 27 #include b e n c h m a r k a l l o c c o u n t e r. hpp 28 #include benchmark time counter. hpp 29 #include b e n c h m a r k f a s t e r c l o c k p o l i c y. hpp 30 #include b e n c h m a r k t s c c l o c k p o l i c y. hpp 31 #include benchmark cpu attention. hpp 32 #include benchmark combi counter. hpp #endif Bilag A.2 binary number system.hpp 1 #ifndef CPHSTL BINARY NUMBER SYSTEM H 2 #define CPHSTL BINARY NUMBER SYSTEM H 3 4 / 5 Desc : Vuillemin s t y l e bina ry number system. 6 Auth : Asger Bruun Ref : Jean Vuillemin. A data s t r u c t u r e f o r manipulating p r i o r i t y queues. 8 : Communications o f t h e ACM 21 ( 1978), / namespace c p h s t l { template<typename C, typename E> 14 // where E and C have t h e same t y p e o f comparator and v a l u e. 15 class binary number : public E : : r o o t l i s t t y p e { 16 public : typedef typename E : : comparator type comparator type ; 19 typedef typename E : : r o o t l i s t t y p e r o o t l i s t t y p e ; 20 typedef typename r o o t l i s t t y p e : : b a c k i n s e r t e r b a c k i n s e r t e r ; 21 typedef typename E : : s i z e t y p e s i z e t y p e ; 22 typedef typename E : : p o i n t e r p o i n t e r ;

24 24 Asger Bruun // would l i k e p r o t e c t e d : class b i t s c a n n e r { 27 s i z e t y p e c u r r e n t, b i t s l e f t ; public : b i t s c a n n e r ( s i z e t y p e const& d ) : b i t s l e f t ( d ) { 32 i f ( b i t s l e f t ==0) c u r r e n t = 0 ; 33 else { 34 c u r r e n t = 1 ; 35 n e x t b i t ( ) ; 36 } 37 } s i z e t y p e c u r r e n t ( ) { return c u r r e n t ; } void n e x t b i t ( ) { 42 a s s e r t ( c u r r e n t!=0) ; 43 while ( true ) { 44 i f ( ( ( this ). b i t s l e f t & 1)!=0) { - - ( this ). b i t s l e f t ; break ; } 45 else i f ( ( this ). b i t s l e f t ==0) { c u r r e n t =0; break ; } 46 else { ( this ). b i t s l e f t >>= 1 ; c u r r e n t <<= 1 ; } 47 } 48 } private : friend std : : ostream & operator << 53 ( std : : ostream & os, b i t s c a n n e r const& bs ) 54 { 55 b i t s c a n n e r tmp( bs ) ; 56 while (tmp. c u r r e n t ( ) ) { 57 os << tmp. c u r r e n t ( ) << ; tmp. n e x t b i t ( ) ; 58 } 59 return os ; 60 } 61 } ; public : enum { number system = 2 } ; typedef binary number<c, E> f a s t n u m b e r t y p e ; 68 typedef typename f a s t n u m b e r t y p e : : b i t s c a n n e r f a s t b i t s c a n n e r ; binary number ( r o o t l i s t t y p e l i s t, s i z e t y p e s i z e ) 71 : r o o t l i s t t y p e ( l i s t ), accu ( s i z e ) { a s s e r t ( i s v a l i d ( ) ) ; } bool i s v a l i d ( ) / const / { return r o o t l i s t t y p e : : i s v a l i d ( accu ) ; } s i z e t y p e s i z e ( ) const { return accu ; } 76 s i z e t y p e max size ( ) const { 77 // Note : I t i s c l e a r to t h e LWG t h a t t h e v a l u e r eturned by 78 // max size ( ) can t change from c a l l to c a l l. 79 // Ref : www. open - s t d. org / j t c 1 / sc22 /wg21/ docs / lwg - c l o s e d. html# return std : : n u m e r i c l i m i t s <s i z e t y p e >::max ( ) / E : : f o o t p r i n t ( ) ; 81 } void swap ( binary number<c, E> & h2 ) { 84 a s s e r t ( ( this ). i s v a l i d ( ) ) ; a s s e r t ( h2. i s v a l i d ( ) ) ;

25 Effektivitetsmåling på krydsninger af svage og binomiale prioritetskøer r o o t l i s t t y p e : : swap ( h2 ) ; 86 std : : swap ( accu, h2. accu ) ; 87 } // f r i e n d s t r u c t j s p o l i c y ; // i s t h i s v a l i d gcc??? 90 // f o l l o w i n g : temporarely made p u b l i c because o f problem with f r i e n d. 91 s i z e t y p e accu ; protected : s t a t i c comparator type comparator ; 96 s t a t i c const bool t r a c e=f a l s e ; private : // adder 101 s t a t i c void a c c e p t c a r r y ( b a c k i n s e r t e r & nxt, p o i n t e r& c ) { 102 nxt. add ( c ) ; c = 0 ; 103 } 104 s t a t i c void a c c e p t r e s ( b a c k i n s e r t e r & nxt, r o o t l i s t t y p e& l ) { 105 nxt. add ( l. s k i p ( ) ) ; 106 } 107 s t a t i c void p r o p c a r r y ( p o i n t e r& c, r o o t l i s t t y p e& l ) { 108 c = ( l. e j e c t ( ) ). j o i n ( c, comparator ) ; 109 } 110 s t a t i c void p r o p c a r r y 2 ( p o i n t e r& c, r o o t l i s t t y p e& l ) { 111 c = ( c ). j o i n ( l. e j e c t ( ), comparator ) ; 112 } 113 s t a t i c void c o n s t r u c t c a r r y ( p o i n t e r& c, r o o t l i s t t y p e& l1, r o o t l i s t t y p e& l 2 ) { 114 c = ( l 1. e j e c t ( ) ). j o i n ( l 2. e j e c t ( ), comparator ) ; 115 } protected : s i z e t y p e remove root ( p o i n t e r r ) { 120 // Desc : remove r o o t from r o o t l i s t and r e t u r n i t s s i z e. 121 // Todo : e i t h e r implement t h e b i d i r e c t i o n a l r o o t l i s t so t h a t 122 // : we can remove a r o o t in c o n s t a n t time or 123 // : implement r e m o v e a f t e r ( p r e v i o u s r o o t ). 124 a s s e r t ( ( r ). i s r o o t ( ) ) ; 125 p o i n t e r y ( ( this ). begin ( ) ), z ( ( this ). end ( ) ) ; 126 b i t s c a n n e r bs ( ( this ). accu ) ; 127 while ( y!= r ) { 128 bs. n e x t b i t ( ) ; z=y ; y=n e x t g e t ( y ) ; 129 } 130 s i z e t y p e d e l t a ( bs. c u r r e n t ( ) ) ; 131 r o o t l i s t t y p e : : r e m o v e a f t e r ( z ) ; 132 ( this ). accu -= d e l t a ; 133 return d e l t a ; 134 } void add ( binary number& b ) { 137 // T(n,m) = O( min ( l g m, l g n) ). 138 i f ( t r a c e ) std : : cout << add ( << b << ) - ; 139 a s s e r t ( ( this ). i s v a l i d ( ) ) ; a s s e r t ( b. i s v a l i d ( ) ) ; 140 r o o t l i s t t y p e & r1 ( this ), & r2 ( b ) ; 141 s i z e t y p e n1 ( ( this ). accu ), n2 ( b. accu ) ; 142 p o i n t e r c ( 0 ) ; 143 r o o t l i s t t y p e r e s ; 144 b a c k i n s e r t e r nxt ( r e s ) ; 145 while ( ( n1!= 0 && n2!= 0) ( c!= 0) ) { 146 switch ( ( c ==0?0:4) + ( ( n2 & 1) << 1) + ( n1 & 1) ) { 147 case 0 / 000 / : / output d i g i t zero / ; break ;

26 26 Asger Bruun 148 case 1 / 001 / : a c c e p t r e s ( nxt, r1 ) ; break ; 149 case 2 / 010 / : a c c e p t r e s ( nxt, r2 ) ; break ; 150 case 3 / 011 / : c o n s t r u c t c a r r y ( c, r1, r2 ) ; break ; 151 case 4 / 100 / : a c c e p t c a r r y ( nxt, c ) ; break ; 152 case 5 / 101 / : p r o p c a r r y ( c, r1 ) ; break ; 153 case 6 / 110 / : p r o p c a r r y 2 ( c, r2 ) ; break ; 154 case 7 / 111 / : a c c e p t r e s ( nxt, r1 ) ; p r o p c a r r y ( c, r2 ) ; break ; 155 default : a s s e r t ( 0 ) ; break ; 156 } 157 n1 >>= 1 ; n2 >>= 1 ; 158 } 159 i f ( n1!= 0) { 160 a s s e r t ( n2 == 0) ; a s s e r t ( r2. is empty ( ) ) ; 161 a c c e p t r e s ( nxt, r1 ) ; 162 r1. c l e a r ( ) ; 163 } else i f ( n2!= 0) { 164 a s s e r t ( r1. is empty ( ) ) ; 165 a c c e p t r e s ( nxt, r2 ) ; 166 r2. c l e a r ( ) ; 167 } else { 168 a s s e r t ( r1. is empty ( ) ) ; 169 a s s e r t ( r2. is empty ( ) ) ; 170 } 171 ( this ). accu += b. accu ; 172 b. accu = 0 ; 173 r1. swap ( r e s ) ; i f ( t r a c e ) std : : cout << ->( << ( this ) << ) \n ; 176 a s s e r t ( ( this ). i s v a l i d ( ) ) ; a s s e r t ( b. i s v a l i d ( ) ) ; 177 } void increment ( p o i n t e r p ) { 180 // Opti : only every second c o n t i g u o u s i n s e r t does meld. 181 a s s e r t ( i s v a l i d ( ) ) ; 182 i f ( t r a c e ) std : : cout << increment ( << ( p ). element ( ) << ) - ; 183 a s s e r t ( p!= 0) ; a s s e r t ( ( p ). h e i g h t ( ) == 0) ; 184 a s s e r t ( ( p ). i s r o o t ( ) ) ; 185 i f ( ( ( this ). accu & 1)==0) { 186 i n j e c t ( p ) ; accu ; 188 } else { 189 binary number hs ( p, 1) ; 190 add ( hs ) ; 191 } 192 i f ( t r a c e ) std : : cout << ->( << ( this ) << ) \n ; 193 } p o i n t e r decrement ( ) { 196 // Opti : Meld i s never needed because t h e t r e e e x t r a c t e d 197 // i s always t h e l e a s t s i g n i f i c a n t d i g i t. 198 a s s e r t ( ( this ). i s v a l i d ( ) ) ; 199 i f ( t r a c e ) std : : cout << decrement ( ) - ; 200 a s s e r t (! ( this ). is empty ( ) ) ; 201 p o i n t e r p ( r o o t l i s t t y p e : : e j e c t ( ) ) ; 202 p o i n t e r t ( ( p ). m o s t s i g n i f i c a n t c h i l d ( ) ) ; 203 i f ( t!= 0) { //! ( p ). i s l e a f ( ) 204 s i z e t y p e n ; 205 p o i n t e r r ( ( p ). c o n s t r u c t ( n, constant <bool, false >() ) ) ; 206 i n j e c t r a n g e ( r, t ) ; 207 } accu ; 209 a s s e r t ( i s v a l i d ( ) ) ; 210 a s s e r t ( ( p ). i s r o o t ( ) ) ; 211 a s s e r t ( ( p ). h e i g h t ( ) == 0) ;

Tuning af CPH STLs komponentstrukturer for smeltbare prioritetskøer

Tuning af CPH STLs komponentstrukturer for smeltbare prioritetskøer Speciale for kandidatgrad i datalogi Tuning af CPH STLs komponentstrukturer for smeltbare prioritetskøer Asger Bruun Datalogisk Institut, Københavns Universitet Universitetsparken 1, 21 København Ø bruun@diku.dk

Læs mere

Kursusarbejde 2 Grundlæggende Programmering

Kursusarbejde 2 Grundlæggende Programmering Kursusarbejde 2 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 31. oktober 2003 Indhold 1. Kode 2 1.1. hotel.h.................................................... 2 1.2. hotel.cc...................................................

Læs mere

Kursusarbejde 3 Grundlæggende Programmering

Kursusarbejde 3 Grundlæggende Programmering Kursusarbejde 3 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 21. november 2003 Indhold 1. Kode 2 1.1. forestillinger.h............................................. 2 1.2. forestillinger.cc.............................................

Læs mere

Userguide. NN Markedsdata. for. Microsoft Dynamics CRM 2011. v. 1.0

Userguide. NN Markedsdata. for. Microsoft Dynamics CRM 2011. v. 1.0 Userguide NN Markedsdata for Microsoft Dynamics CRM 2011 v. 1.0 NN Markedsdata www. Introduction Navne & Numre Web Services for Microsoft Dynamics CRM hereafter termed NN-DynCRM enable integration to Microsoft

Læs mere

how to save excel as pdf

how to save excel as pdf 1 how to save excel as pdf This guide will show you how to save your Excel workbook as PDF files. Before you do so, you may want to copy several sheets from several documents into one document. To do so,

Læs mere

Start på Arduino og programmering

Start på Arduino og programmering Programmering for begyndere Brug af Arduino Start på Arduino og programmering EDR Hillerød Knud Krogsgaard Jensen / OZ1QK 1 Start på Arduino og programmering Sidste gang (Introduktion) Programmeringssproget

Læs mere

Da beskrivelserne i danzig Profile Specification ikke er fuldt færdige, foreslås:

Da beskrivelserne i danzig Profile Specification ikke er fuldt færdige, foreslås: NOTAT 6. juni 2007 J.nr.: 331-3 LEA Bilag A danzig-møde 15.6.2007 Opdatering af DAN-1 og danzig Profile Specification Forslag til opdatering af Z39.50 specifikationerne efter udgivelse af Praksisregler

Læs mere

Læs venligst Beboer information om projekt vandskade - sikring i 2015/2016

Læs venligst Beboer information om projekt vandskade - sikring i 2015/2016 Læs venligst Beboer information om projekt vandskade - sikring i 2015/2016 Vi er nødsaget til at få adgang til din lejlighed!! Hvis Kridahl (VVS firma) har bedt om adgang til din/jeres lejlighed og nøgler,

Læs mere

RentCalC V2.0. 2012 Soft-Solutions

RentCalC V2.0. 2012 Soft-Solutions Udlejnings software Vores udvikling er ikke stoppet!! by Soft-Solutions RentCalC, som er danmarks ubetinget bedste udlejnings software, kan hjælpe dig med på en hurtigt og simple måde, at holde styr på

Læs mere

Om binære søgetræer i Java

Om binære søgetræer i Java Om binære søgetræer i Java Mads Rosendahl 7. november 2002 Resumé En fix måde at gemme data på er i en træstruktur. Måden er nyttig hvis man får noget data ind og man gerne vil have at det gemt i en sorteret

Læs mere

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/11-2012 Server side Programming Wedesign Forelæsning #8 Recap PHP 1. Development Concept Design Coding Testing 2. Social Media Sharing, Images, Videos, Location etc Integrates with your websites 3. Widgets extend

Læs mere

Hvor er mine runde hjørner?

Hvor er mine runde hjørner? Hvor er mine runde hjørner? Ofte møder vi fortvivlelse blandt kunder, når de ser deres nye flotte site i deres browser og indser, at det ser anderledes ud, i forhold til det design, de godkendte i starten

Læs mere

QUICK START Updated: 18. Febr. 2014

QUICK START Updated: 18. Febr. 2014 QUICK START Updated: 18. Febr. 2014 For at komme hurtigt og godt igang med dine nye Webstech produkter, anbefales at du downloader den senest opdaterede QuickStart fra vores hjemmeside: In order to get

Læs mere

www.cfufilmogtv.dk Tema: Pets Fag: Engelsk Målgruppe: 4. klasse Titel: Me and my pet Vejledning Lærer

www.cfufilmogtv.dk Tema: Pets Fag: Engelsk Målgruppe: 4. klasse Titel: Me and my pet Vejledning Lærer Me and my pet My dogs SVTV2, 2011, 5 min. Tekstet på engelsk Me and my pet er en svenskproduceret undervisningsserie til engelsk for børn i 4. klasse, som foregår på engelsk, i engelsktalende lande og

Læs mere

EU vedtager et nyt program, som med 55 millioner EUR skal give børn større sikkerhed på internettet

EU vedtager et nyt program, som med 55 millioner EUR skal give børn større sikkerhed på internettet IP/8/899 Bruxelles, den 9 december 8 EU vedtager et nyt program, som med millioner EUR skal give børn større sikkerhed på internettet EU får et nyt program for forbedring af sikkerheden på internettet

Læs mere

Databaseadgang fra Java

Databaseadgang fra Java Databaseadgang fra Java Grundlæggende Programmering med Projekt Peter Sestoft Fredag 2007-11-23 Relationsdatabasesystemer Der er mange databaseservere Microsoft Access del af Microsoft Office MySQL god,

Læs mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

Læs mere

What s Love Got to Do With It?

What s Love Got to Do With It? What s Love Got to Do With It? Gram Grid Present Continuous Vi sætter verberne i ing-form, når vi vil beskrive at noget er i gang. Der er fire hovedkategorier af ing-form: 1 Den almindelige form (common

Læs mere

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012

Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012. May 15, 2012 Algoritmer og datastrukturer Course No. 02105 Cheat Sheet 2012 May 15, 2012 1 CONTENTS 2012 CONTENTS Contents 1 Kompleksitet 3 1.1 Køretid................................................ 3 1.2 Asymptotisk

Læs mere

Bilag. Resume. Side 1 af 12

Bilag. Resume. Side 1 af 12 Bilag Resume I denne opgave, lægges der fokus på unge og ensomhed gennem sociale medier. Vi har i denne opgave valgt at benytte Facebook som det sociale medie vi ligger fokus på, da det er det største

Læs mere

Udvikling af DOTNET applikationer til MicroStation i C#

Udvikling af DOTNET applikationer til MicroStation i C# Udvikling af DOTNET applikationer til MicroStation i C# Praktiske tips for at komme i gang. Gunnar Jul Jensen, Cowi Hvorfor nu det? Mdl og Vba kan det hele Fordelene er : udviklingsmiljøet er eksternt

Læs mere

Spil Master Mind. Indledning.

Spil Master Mind. Indledning. side 1 af 16 Indledning. Spillet som denne rapport beskriver, indgår i et større program, der er lavet som projekt i valgfaget programmering C på HTX i perioden 9/11-98 til 12/1-99. Spillet skal give de

Læs mere

Automatic Code Orchestration from Descriptive Implementations

Automatic Code Orchestration from Descriptive Implementations ft her Automatic Code Orchestration from Descriptive Implementations older Professor Brian Vinter Niels Bohr Institute KU ft her Automatic Code Orchestration from Descriptive Implementations Prototypin

Læs mere

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben

Google App Engine. Google App Engine som platform. Claus Myglegaard Vagner og Jacob von Eyben GoogleAppEngine GoogleAppEnginesomplatform ClausMyglegaardVagnerogJacobvonEyben Abstract CloudcomputingerenteknologidervinderfremidengenerelleITinfrastruktur. SocialemediersåsomLinkedIn,TwitterogFacebookharøgetbehovetfor

Læs mere

Prioritetskøer og hobe. Philip Bille

Prioritetskøer og hobe. Philip Bille Prioritetskøer og hobe Philip Bille Plan Prioritetskøer Træer Hobe Repræsentation Prioritetskøoperationer Konstruktion af hob Hobsortering Prioritetskøer Prioritetskø Vedligehold en dynamisk mængde S af

Læs mere

SAX Simple API for XML.

SAX Simple API for XML. SAX Simple API for XML. En API (Application Programming Interface) et bibliotek eller et sæt af funktioner eller metoder. SAX er et sådant bibliotek af abstrakte metoder som f. eks. startdocument() eller

Læs mere

Indhold. Senest opdateret:03. september 2013. Side 1 af 8

Indhold. Senest opdateret:03. september 2013. Side 1 af 8 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 API Modeller... 2 Webshop2 API Model v1... 3

Læs mere

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet.

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet. Opsætning af Backup Dette er en guide til opsætning af backup med Octopus File Synchronizer. Det første der skal ske er, at programmet skal registreres (programmet kan dog bruges i 30 dage, hvis det ikke

Læs mere

Subject to terms and conditions. WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR

Subject to terms and conditions. WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR WEEK Type Price EUR ITSO SERVICE OFFICE Weeks for Sale 31/05/2015 m: +34 636 277 307 w: clublasanta-timeshare.com e: roger@clublasanta.com See colour key sheet news: rogercls.blogspot.com Subject to terms and conditions THURSDAY

Læs mere

Induktive og rekursive definitioner

Induktive og rekursive definitioner Induktive og rekursive definitioner Denne note omhandler matematiske objekter, som formelt er opbygget fra et antal basale byggesten, kaldet basistilfælde eller blot basis, ved gentagen brug af et antal

Læs mere

Forskning i socialpædagogik socialpædagogisk forskning?

Forskning i socialpædagogik socialpædagogisk forskning? Forskning i socialpædagogik socialpædagogisk forskning? eller knudramian.pbwiki.com www.regionmidtjylland.dkc Indhold Professionsforskning til problemløsning eller som slagvåben? Hvad er forskning? Hvad

Læs mere

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015

BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015 BACK-END OG DATA: ADMINISTRATION HVAD ER DE NYE MULIGHEDER MED VERSION 7.1? STEFFEN BILLE RANNES, 4. FEBRUAR 2015 SAS VISUAL ANALYTICS 7.1 ADMINISTRATOR Mulighed for at udføre handlinger på flere servere

Læs mere

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

Læs mere

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets.

Dagens program. Domæner. change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog. Hvad er widgets. Dagens program Har alle fået? Har nogen betalt for meget? Hav jeres koder klar Domæner change log- screen shots hver gang I har arbejdet med themet. Arkitekturen bag en wp blog Hvad er widgets Hvad er

Læs mere

Trolling Master Bornholm 2013

Trolling Master Bornholm 2013 Trolling Master Bornholm 2013 (English version further down) Tilmeldingerne til 2013 I dag nåede vi op på 77 tilmeldte både. Det er lidt lavere end samme tidspunkt sidste år. Til gengæld er det glædeligt,

Læs mere

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5

Indhold. Senest opdateret : 30. juli 2010. Side 1 af 5 Indhold Introduktion... 2 Scenarier hvor API et kan benyttes... 2 Scenarie 1 Integration til lagerhotel... 2 Scenarie 2 Integration til økonomi system... 2 Webshop2 API Model... 3 Brugen af API et... 4

Læs mere

Sunlite pakke 2004 Standard (EC) (SUN SL512EC)

Sunlite pakke 2004 Standard (EC) (SUN SL512EC) Sunlite pakke 2004 Standard (EC) (SUN SL512EC) - Gruppering af chasere igen bag efter. På den måde kan laves cirkelbevægelser og det kan 2,787.00 DKK Side 1 Sunlite pakke 2006 Standard (EC) LAN (SUN SL512EC

Læs mere

Programmeringscamp. Implementer funktionerne én for én og test hele tiden.

Programmeringscamp. Implementer funktionerne én for én og test hele tiden. Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet ksamen 06, side af sider anmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. ursusnavn: lgoritmer og datastrukturer ursus nr. 06. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer

Læs mere

2013 SP1. Konfiguration af koncernindblik. Configuration Guide

2013 SP1. Konfiguration af koncernindblik. Configuration Guide 2013 SP1 Konfiguration af koncernindblik Configuration Guide Intellectual Property Rights This document is the property of ScanJour. The data contained herein, in whole or in part, may not be duplicated,

Læs mere

Lykken er så lunefuld Om måling af lykke og tilfredshed med livet, med fokus på sprogets betydning

Lykken er så lunefuld Om måling af lykke og tilfredshed med livet, med fokus på sprogets betydning Lykken er så lunefuld Om måling af lykke og tilfredshed med livet, med fokus på sprogets betydning Jørgen Goul Andersen (email: goul@ps.au.dk) & Henrik Lolle (email: lolle@dps.aau.dk) Måling af lykke eksploderer!

Læs mere

Vejledning til at tjekke om du har sat manuel IP på din computer.

Vejledning til at tjekke om du har sat manuel IP på din computer. Indhold Vejledning til at, komme på nettet. (DANSK)... 2 Gælder alle systemer.... 2 Vejledning til at tjekke om du har sat manuel IP på din computer.... 2 Windows 7... 2 Windows Vista... 2 Windows XP...

Læs mere

Projektledelse i praksis

Projektledelse i praksis Projektledelse i praksis - Hvordan skaber man (grundlaget) for gode beslutninger? Martin Malis Business Consulting, NNIT mtmi@nnit.com 20. maj, 2010 Agenda Project Governance Portfolio Management Project

Læs mere

Bookingmuligheder for professionelle brugere i Dansehallerne 2015-16

Bookingmuligheder for professionelle brugere i Dansehallerne 2015-16 Bookingmuligheder for professionelle brugere i Dansehallerne 2015-16 Modtager man økonomisk støtte til et danseprojekt, har en premieredato og er professionel bruger af Dansehallerne har man mulighed for

Læs mere

Assembly Guide Monteringsvejledning. 60/30 - wood end panels

Assembly Guide Monteringsvejledning. 60/30 - wood end panels Assembly Guide Monteringsvejledning 60/30 - wood end panels Wood end panels 1. When installing wood end panels, insert the top fittings into the upper crossbar slots and place the Z brackets over the foot

Læs mere

ODIN-webservice ændringer release 2010 v2.0

ODIN-webservice ændringer release 2010 v2.0 DOKUMENTATION OG VEJLEDNING ODIN-webservice ændringer release 2010 v2.0 Indholdsfortegnelse 1. Nye webservice metoder... 2 1.1 Anvendelse af køretøjer og personel fra fremmede beredskaber ifm. indberetning

Læs mere

Transformering af OIOXML til OIOUBL og OIOUBL til OIOXML

Transformering af OIOXML til OIOUBL og OIOUBL til OIOXML Microsoft Development Center Copenhagen, July 2010 OIOXML / OIOUBL Microsoft Dynamics C5 Transformering af OIOXML til OIOUBL og OIOUBL til OIOXML Indledning Indledning... 3 Anvendelse af værktøjet... 3

Læs mere

Data lagring. 2. iteration (implement backend)

Data lagring. 2. iteration (implement backend) Data lagring 2. iteration (implement backend) Emner Grundlæggende database begreber. Data definitionskommandoer ER-diagrammer og cardinalitet/relationer mellem tabeller Redundant data og Normalisering

Læs mere

Trolling Master Bornholm 2013

Trolling Master Bornholm 2013 Trolling Master Bornholm 2013 (English version further down) Tilmeldingen åbner om to uger Mandag den 3. december kl. 8.00 åbner tilmeldingen til Trolling Master Bornholm 2013. Vi har flere tilmeldinger

Læs mere

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen.

! Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Copenhagen Business Academy Multimediedesigner 3. semester - 1. projekt, september 2014 Gruppe 1 - MulA Kia Dahlen. Kamilla Klein, Pia Jensen og Maria Korshøj Andersen. Study: Multimedia Design Project:

Læs mere

Video Projector Controller. Brugermanual

Video Projector Controller. Brugermanual Jægergårdsgade 152/05A DK-8000 Aarhus C DENMARK WWW.WAHLBERG.DK l Video Projector Controller Brugermanual WWW.WAHLBERG.DK TELEPHONE +45 86 18 14 20 CELL PHONE +45 40 52 20 88 EMAIL: mads@wahlberg.dk Feb

Læs mere

EuroForm OCR-B Installation Guide

EuroForm OCR-B Installation Guide EuroForm OCR-B Installation Guide Dansk For HP LaserJet Printers Installation Guide NOTE The information contained in this document is subject to change without notice. EuroForm makes no warranty of any

Læs mere

Application form - au pair (please use block capial letters when filling in the form)

Application form - au pair (please use block capial letters when filling in the form) Application form - au pair (please use block capial letters when filling in the form) Au Pairs International Sixtusvej 15, DK-2300 Copenhagen S Tel: +45 3284 1002, Fax: +45 3284 3102 www.aupairsinternational.com,

Læs mere

PROC TRANSPOSE. SAS-tabellen - hensigtsmæssig lagring af data. Copyright 2011 SAS Institute Inc. All rights reserved.

PROC TRANSPOSE. SAS-tabellen - hensigtsmæssig lagring af data. Copyright 2011 SAS Institute Inc. All rights reserved. PROC TRANSPOSE SAS-tabellen - hensigtsmæssig lagring af data Copyright 2011 SAS Institute Inc. All rights reserved. Transponerede tabeller Brede eller smalle? Hvad: Brede tabeller har mange kolonner med

Læs mere

Søren Løbner (lobner) ddb Databaser 2007 10 10

Søren Løbner (lobner) ddb Databaser 2007 10 10 ddb Excercise Week 4 Fra relationships til relations Nu når vi har fået vores skemaer på plads, kan SQL udtrykkene til konstruktion af relationerne laves Det foregår ved at vi tager en 1 til 1 oversættelse

Læs mere

DDD Runde 2, 2015 Facitliste

DDD Runde 2, 2015 Facitliste DDD Runde 2, 2015 Facitliste Søren Dahlgaard og Mathias Bæk Tejs Knudsen Opgaver og løsninger til 2. runde af DDD 2015. 1 4. 19. februar, 2015 linetest DK v1.0 Line Test Sigurd er begyndt i gymnasiet og

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

DM13-1. Obligatoriske Opgave - Kredsløbs design DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb,

Læs mere

Trolling Master Bornholm 2013

Trolling Master Bornholm 2013 Trolling Master Bornholm 2013 (English version further down) Tilmeldingerne til 2013 I dag nåede vi op på 85 tilmeldte både. Det er stadig lidt lavere end samme tidspunkt sidste år. Tilmeldingen er åben

Læs mere

WT-1011RC Programmer User Guide

WT-1011RC Programmer User Guide WT-1011RC Programmer User Guide Firmware Version 1.9 Note: 1. Information in this manual is subject to change without notice and does not represent a commitment of manufacturer. 2. Manufacturer shall not

Læs mere

Komplekse tal og Kaos

Komplekse tal og Kaos Komplekse tal og Kaos Jon Sporring Datalogisk Institut ved Københavns Universitet Universitetsparken 1, 2100 København Ø August, 2006 1 Forord Denne opgave er tiltænkt gymnasiestuderende med matematik

Læs mere

Dansk vejledning til installation og opsætning af Safe Eyes

Dansk vejledning til installation og opsætning af Safe Eyes Dansk vejledning til installation og opsætning af Safe Eyes Her kan du få vejledning til, hvordan du skaffer Safe Eyes og bruger det. Det mest nødvendige er her beskrevet på dansk men dog ikke det hele.

Læs mere

Overfør fritvalgskonto til pension

Overfør fritvalgskonto til pension Microsoft Development Center Copenhagen, January 2009 Løn Microsoft Dynamics C52008 SP1 Overfør fritvalgskonto til pension Contents Ønsker man at overføre fritvalgskonto til Pension... 3 Brug af lønart

Læs mere

Projekt - Visual Basic for Applications N på stribe

Projekt - Visual Basic for Applications N på stribe Projekt - Visual Basic for Applications N på stribe Mikkel Kaas og Troels Henriksen - 03x 3. november 2005 1 Introduktion Spillet tager udgangspunkt i det gamle kendte 4 på stribe, dog med den ændring,

Læs mere

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007

Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007 Programmering i C Programmering af microcontroller i C (4 af 4) 12. april 2007 Mads Pedersen, OZ6HR mads@oz6hr.dk Plan i dag Afrunding af OZ3VB's program Fra "almindelig C" til "microcontroller C" Lighederne

Læs mere

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version Finn Nordbjerg 1/9 Indledning I det følgende introduceres et par abstrakte

Læs mere

Byg din informationsarkitektur ud fra en velafprøvet forståelsesramme The Open Group Architecture Framework (TOGAF)

Byg din informationsarkitektur ud fra en velafprøvet forståelsesramme The Open Group Architecture Framework (TOGAF) Byg din informationsarkitektur ud fra en velafprøvet forståelsesramme The Open Group Framework (TOGAF) Otto Madsen Director of Enterprise Agenda TOGAF og informationsarkitektur på 30 min 1. Introduktion

Læs mere

Advanced Word Template Brugermanual

Advanced Word Template Brugermanual Advanced Word Template Brugermanual Forord: Advanced Word Template er et værktøj, der anvendes sammen med Microsoft Word til at opbygge ensartet beskrivelser på en mere intelligent måde end Copy and Paste

Læs mere

ODS measured tagset til RTF er smart og kan tilpasses

ODS measured tagset til RTF er smart og kan tilpasses ODS measured tagset til RTF er smart og kan tilpasses 4. Oktober 2012 Marc Andersen, StatGroup ApS, Denmark Indhold Oversigt Hvorfor Hvad Validering Programkode til tagset: send mail til Tips Konklusion

Læs mere

Nyhedsmail, april 2014 (scroll down for English version)

Nyhedsmail, april 2014 (scroll down for English version) Nyhedsmail, april 2014 (scroll down for English version) Kære Omdeler Forår og påske står for døren, og helligdagene i forbindelse med påsken betyder ændringer i omdelingen. Derudover kan du blandt andet

Læs mere

TimeStamper Guide til fejlretning

TimeStamper Guide til fejlretning TimeStamper Guide til fejlretning for version 2.01 Copyright 2002-2013 www.timestamper.dk LICENSVEJLEDNING ver A09.doc ANSVARSFRASKRIVELSE: I ingen tilfælde skal udvikleren og/eller dets respektive leverandører

Læs mere

Masters Thesis - registration form Kandidatafhandling registreringsformular

Masters Thesis - registration form Kandidatafhandling registreringsformular Masters Thesis - registration form Kandidatafhandling registreringsformular Godkendelse af emne for hovedopgave af vejleder og undervisningskoordinator. Læs venligst retningslinjerne sidst i dette dokument

Læs mere

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, 300473-2919 klasse dm032-1a

Kursusarbejde 1 Grundlæggende Programmering. Arne Jørgensen, 300473-2919 klasse dm032-1a Kursusarbejde 1 Grundlæggende Programmering Arne Jørgensen, 300473-2919 klasse dm032-1a 3. oktober 2003 Kode //File Name: kaalhovede.cc //Author: Arne Jørgensen //Email Address: arne@arnested.dk, arnjor@niels.brock.dk

Læs mere

GIVE IT. SOME ENGlISH1. Hedwig

GIVE IT. SOME ENGlISH1. Hedwig Doth Ernst Jacobsen og Henriette BETH Brigham GIVE IT SOME ENGlISH1 Hedwig Give It Some English I 2014 Doth Ernst Jacobsen og Henriette Beth Brigham og Forlaget Hedwig Sat med Calibri og Futura Grafisk

Læs mere

Dell Cloud Client Computing Hvordan virtualisere vi de tunge grafisk applikationer?

Dell Cloud Client Computing Hvordan virtualisere vi de tunge grafisk applikationer? Dell Cloud Client Computing Hvordan virtualisere vi de tunge grafisk applikationer? Christian Eilskov Sales Engineer, christian_eilskov@dell.com +45 40 60 13 92 Dell Cloud Client Computing Dell lever produkter

Læs mere

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo Philip Bille Nærmeste naboer. Vedligehold en dynamisk mængde S af elementer. Hvert element har en nøgle key[] og satellitdata data[]. operationer. PREDECESSOR(k): returner element med største nøgle k.

Læs mere

Hurtigt i gang med LinMot DeviceNet til Allen Bradley Logix Plc

Hurtigt i gang med LinMot DeviceNet til Allen Bradley Logix Plc Hurtigt i gang med LinMot DeviceNet til Allen Bradley Logix Plc INDHOLD Indledning...2 EL-Diagram E1100:...3 Logik Forsyning til LinMot:...6 Set Node adresse...7 DeviceNet CAN forbindelse til PLC...10

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet Eksamen 005, F side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed:

Læs mere

Fra idé til virkelig med Azure Mobile Services

Fra idé til virkelig med Azure Mobile Services Fra idé til virkelig med Azure Mobile Services Niels Ladegaard Beck Holion nlb@holion.dk @nielslbeck Windows Developers in Denmark Azure App Service Mobile App Introduktion til Azure Mobile Services Platform

Læs mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Vejledning i bestilling af CNM dna test hos The Alfort School i Frankrig www.cnmlabrador.com

Vejledning i bestilling af CNM dna test hos The Alfort School i Frankrig www.cnmlabrador.com Vejledning i bestilling af CNM dna test hos The Alfort School i Frankrig www.cnmlabrador.com På internettet kan du på hjemmesiden læse stort set alt om sygdommen Centronuclear Myopathy (CNM) hos Labrador.

Læs mere

Backup Applikation. Microsoft Dynamics C5 Version 2008. Sikkerhedskopiering

Backup Applikation. Microsoft Dynamics C5 Version 2008. Sikkerhedskopiering Backup Applikation Microsoft Dynamics C5 Version 2008 Sikkerhedskopiering Indhold Sikkerhedskopiering... 3 Hvad bliver sikkerhedskopieret... 3 Microsoft Dynamics C5 Native database... 3 Microsoft SQL Server

Læs mere

Blomsten er rød (af Harry Chapin, oversat af Niels Hausgaard)

Blomsten er rød (af Harry Chapin, oversat af Niels Hausgaard) Blomsten er rød (af Harry Chapin, oversat af Niels Hausgaard) På den allerførste skoledag fik de farver og papir. Den lille dreng farved arket fuldt. Han ku bare ik la vær. Og lærerinden sagde: Hvad er

Læs mere

Velkommen. Backup & Snapshot v. Jørgen Weinreich / Arrow ECS Technical Specialist

Velkommen. Backup & Snapshot v. Jørgen Weinreich / Arrow ECS Technical Specialist Velkommen Backup & Snapshot v. Jørgen Weinreich / Arrow ECS Technical Specialist 1 Agenda Fra backup til restore produkt Politikstyret Backup Live Demo 2 IBM XIV Snapshots - Næsten uden begrænsninger Snapshot

Læs mere

For nogle statuskoder vil der komme en klar tekst besked, mens der for andre vil komme en fire cifret kode, som angivet i afsnit 2

For nogle statuskoder vil der komme en klar tekst besked, mens der for andre vil komme en fire cifret kode, som angivet i afsnit 2 1 Statuskoder i forbindelse med en transaktion I forbindelse med en transaktion, vil Sagem Solo terminalen vise en statuskode/statusbesked i ekspedientterminalens display. Endvidere vil der blive udskrevet

Læs mere

FDIH FRA SHOP TIL SERVICE.DK

FDIH FRA SHOP TIL SERVICE.DK FDIH FRA SHOP TIL SERVICE.DK EFFEKTIV ECOMMERCE ER I DAG LANGT MERE END ET OPTIMERET KØBSFLOW OG RELATEREDE TILBUD. I OPLÆGGET SÆTTER KLAUS BUNDVIG FOKUS PÅ TO TENDENSER, SOM SER UD TIL AT FÅ STOR BETYDNING

Læs mere

Kvantitative og kvalitative metoder. Søren R. Frimodt-Møller, 19. oktober 2012

Kvantitative og kvalitative metoder. Søren R. Frimodt-Møller, 19. oktober 2012 Kvantitative og kvalitative metoder Søren R. Frimodt-Møller, 19. oktober 2012 Program 1. Forskningsspørgsmål 2. Kvantitative vs. kvalitative metoder 3. Eksempler på konkrete forskningsmetoder 4. Sampling-begrebet

Læs mere

Implementering af evidensbaseret viden lederskab som bærende faktor

Implementering af evidensbaseret viden lederskab som bærende faktor Implementering af evidensbaseret viden lederskab som bærende faktor Bianca Albers Familie og Evidens Center Fokus for oplægget Evidens Ledelse Implementering Outcome Evidensbaseret vs. evidensinformeret

Læs mere

Nyhedsbrev 15 Februar 2008

Nyhedsbrev 15 Februar 2008 Nyhedsbrev 15 Februar 2008 FTU Boghandel Halmstadgade 6, 8200 Århus N Tlf: 86 10 03 38 / Mail:ftu@ats.dk / Inet: www.ftu.dk Hvem er FTU Boghandel? FTU Boghandel er en specialboghandel indenfor teknik,

Læs mere

Introduktion til C programmering

Introduktion til C programmering Introduktion til C programmering Rasmus Erik Voel Jensen Uge 17 voel@math.ku.dk Dagens forelæsning Formalia Indledende programmering, main, include, printf, variable, scanf, if-else, statements, eksempler

Læs mere

Microsoft Dynamics C5. Nyheder Kreditorbetalinger

Microsoft Dynamics C5. Nyheder Kreditorbetalinger Microsoft Dynamics C5 Nyheder Kreditorbetalinger INDHOLDSFORTEGNELSE Indledning... 3 Uddybning af ændringer... 4 Forbedring vedr. betalings-id er... 4 Ændringer i betalingsmåder (kreditorbetalinger)...

Læs mere

Vejledning til brugen af bybrandet

Vejledning til brugen af bybrandet Vejledning til brugen af bybrandet Indhold Hvorfor bruge bybrandet? s. 3-4 Inspiration/ big idea s. 5-10 Syv former for bybranding s. 11-18 Brug af logoet s. 19-21 Find desuden flere cases, designelementer

Læs mere

Web Admin 5.5. Brugsvejledning for Domain admin. Copyright 2003 Gullestrup.net

Web Admin 5.5. Brugsvejledning for Domain admin. Copyright 2003 Gullestrup.net Web Admin 5.5 Copyright 2003 Gullestrup.net Log ind på systemet Start med at gå ind på http://mailadmin.gullestrup.net i din browser. Indtast din Email Adresse samt Password, som du tidligere har modtaget

Læs mere

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

Øvelse 9. Klasser, objekter og sql-tabeller insert code here Øvelse 9. Klasser, objekter og sql-tabeller Denne opgave handler om hvordan man opbevarer data fra databasekald på en struktureret måde. Den skal samtidig give jer erfaringer med objekter, der kommer til

Læs mere

Dag 10 Flertrådet programmering

Dag 10 Flertrådet programmering Videregående programmering i Java Dag 10 Flertrådet programmering Fremlæggelse af programmering/status for projekter Dokumentation med javadoc Flertrådede designmønstre: Arbejdstråd, Producent Konsument,

Læs mere

Den røde tråd fra testdækning til releasemetrikker

Den røde tråd fra testdækning til releasemetrikker Den røde tråd fra testdækning til releasemetrikker The art of developing software cheaper, in good quality and at schedule Software-Pro Agenda Den røde tråd fra testdækning til releasemetrikker Mange har

Læs mere

Talsystemer I V X L C D M 1 5 10 50 100 500 1000. Hvad betyder halvanden??. Kan man også sige Halvtredie???

Talsystemer I V X L C D M 1 5 10 50 100 500 1000. Hvad betyder halvanden??. Kan man også sige Halvtredie??? Romertal. Hvordan var de struktureret?? Systematisk?? I V X L C D M 1 5 10 50 100 500 1000 Regler: Hvis et lille tal skrives foran et stort tal trækkes tallet fra: IV = 5-1 = 4 Hvis et lille tal skrives

Læs mere

Christian Jelbo mobile manager cj@eb.dk +45 2020 0575. Mobil

Christian Jelbo mobile manager cj@eb.dk +45 2020 0575. Mobil Christian Jelbo mobile manager cj@eb.dk +45 2020 0575 Mobil Godteposen Det mobile markedet og Ekstra Bladet Status på Ekstra Bladets mobile aktiviteter Strategi og markedsposition Hvem benytter sig af

Læs mere

The size of the project.

The size of the project. Apartment type B System integrator - COWI Prices from 3-6 million kr. per The size of the project. Suppl. package kr. 400-1,000,000 Why smart-house? The most user-friendly bus- Delivered by DUPLINE The

Læs mere

Webshop integration for DanDomain

Webshop integration for DanDomain Microsoft Development Center Copenhagen, December 2009 Factsheet F Microsoft Dynamics C5 2010 Webshop integration for DanDomain Indholdsfortegnelse Indledning... 3 Eksport af varer til webshoppen... 4

Læs mere