• Aucun résultat trouvé

Algo Design 2

N/A
N/A
Protected

Academic year: 2022

Partager "Algo Design 2"

Copied!
43
0
0

Texte intégral

(1)

1

Algo Design 2

Cours 2

Sort, Recursivity and Linked Lists

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(2)

2

Goal : mesure the inherent efficiency

– As a function of the data input size – Compute the number of elementary

operations

– Asymptotic measure

– Worst-case/Average-case – Time / Space complexity

Algorithm Complexity

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(3)

3

Sorting Problem

Algorithms Worst-case Average Insertion

Buble Sort Θ(n

2

) Θ(n

2

) Quicksort Θ(n

2

) Θ(n.log(n)) Merge Sort Θ(n.log(n)) Θ(n.log(n))

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(4)

4

Merge Sort

• Sort an array A between the indices p & r :

• if p<r then

q=(p+r)/2

mergesort(A,p,q)

mergesort(A,q+1,r) merge(A,p,q,r)

A

p q r

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(5)

5

Merge Sort

• Merge of two sorted arrays:

A

p q r

A

• Complexity » number of elements to merge

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(6)

6

3 4 7 16

1 12

Merge Sort

2 8 12 1 7 1615 5 3 4 9 14101311 6

2 8 5 15 9 141013 6 11

1 2 8 12 5 7 1516 3 4 9 14 6 101113 1 2 5 7 8 121516 3 4 6 9 10111314 1 2 3 4 5 6 7 8 9 10111213141516

2

4

2 2 2 2 2 2 2

8

4 4 4

16

8

2´2 3 2 2 ´2 2

2 3 ´2 2 4 ´1 4´2 4

C n = Θ(log(n) ´ n)

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(7)

7

Quicksort

• Recursive Sort based on partition

if p<r then

q=partition(A,p,r) quicksort(A,p,q-1) quicksort(A,q+1,r)

• Worst-case complexity: C n = Θ(n 2 )

• Average-case complexity: C n = Θ(n.log(n))

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(8)

8

Sort : can we do better ?

• If we do not make any additional assumption on the data

• Representation of the algorithm with a decision tree

Any sorting algorithm needs about n.log(n) comparisons

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(9)

9

Sort : can we do better ?

Decision tree :

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(10)

10

Sort : can we do better ?

• Number of « leaves » ³ number of permutations with n elements = n!

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(11)

11

Sort : can we do better ?

• Number of comparisons to sort = length of the branch

• Height Tree = maximum number of comparisons

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(12)

12

Sort : can we do better ?

• Height Tree h

Maximum number of leaves = 2 h

• 2 h ³ Number of leaves ³ n!

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(13)

13

Sort : can we do better?

• If we do not make any additional assumption on the data, any sorting algorithm needs at least about n.log(n) comparisons

• And if we do additional assumption, …?

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(14)

14

Hanoï Towers

?

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(15)

15

Hanoï Towers

Recursive move of n-1 sticks

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(16)

16

Hanoï Towers

Move largest one

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(17)

17

Hanoï Towers

Recursive move of n-1 sticks

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(18)

18

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(19)

19

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(20)

20

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(21)

21

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(22)

22

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(23)

23

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(24)

24

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(25)

25

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(26)

26

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(27)

27

• Recursive solution

void Hanoi(int n, int i, int j) { int intermediaire=6-(i+j);

if (n>0)

{ Hanoi(n - 1, i, intermediaire);

printf("Mouvement du piquet %d

vers le piquet %d\n",i,j);

Hanoi(n - 1, intermediaire, j);

} }

Hanoï Towers

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(28)

28

Hanoï : solution

Mouvement du piquet 1 vers le piquet 3 Mouvement du piquet 1 vers le piquet 2 Mouvement du piquet 3 vers le piquet 2 Mouvement du piquet 1 vers le piquet 3 Mouvement du piquet 2 vers le piquet 1 Mouvement du piquet 2 vers le piquet 3 Mouvement du piquet 1 vers le piquet 3

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(29)

29

Hanoï : complexity

• Number of moves :

– C 0 =0

– C n =1+2.C n-1

• C n = 2 n -1 = Θ(2 n )

The exponential complexity is inherent to the problem

• Space complexity : Θ(n)

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(30)

30

Data structures

• Array

• Lists

• Variants of lists

– stack – queue

– Circular list

– Double-linked list

• Advanced data structures: trees, graphs,...

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(31)

31

Data Structures

Static Array

– Simple, efficient, limited

int t[10];

t[5]=17;

t[10]=4;

int n=4;

int t[n];

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(32)

32

Data Structure

Dynamic Array

– less simple, as efficient, less limited

int *t;

int n;

printf("Valeur de n ? ");

scanf("%d",&n);

t=(int *)malloc(sizeof(int)*n);

t[0]=17;

free(t);

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(33)

33

List

• More complex to program

• Different efficiency than array

• We can do anything

• Theoretical definition :

list=Nil and Cons (x,list)

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(34)

34

Lists : manipulation

Cons (1, Cons (2, Cons (3,Nil))) noted [1,2,3]

Cons (1,[2,3,4]) = [1,2,3,4]

Head ([1,2,3,4]) = 1

Tail ([1,2,3,4]) = [2,3,4]

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(35)

35

C Implementation

struct cell {

int val;

struct cell *next;

};

typedef struct cell *List;

• Graphical Representation

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(36)

36

C Implementation

List cons(int v, List L) {List nouv;

nouv=(List) malloc(sizeof(struct cell));

nouv->val=v; nouv->next=L;

return nouv;}

int head(List L) {if (L==NULL)

{printf("head(NULL)\n"); exit(-1);}

return L->val;}

Liste tail(List L) {if (L==NULL)

{printf( "tail(NULL)\n"); exit(-1);}

return L->next;}

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(37)

37

Iterative vs fonctionnal

void print_List1(List L) // ( ITERATIVE ) { List P=L;

while (P!=NULL)

{printf("%d ",P->val);

P=P->next;}

printf("\n");

}

void print_List2(List L) // ( FONCTIONNAL ) { if (L==NULL) printf("\n");

else

{printf("%d ",head(L));

print_Liste2(tail(L));}

}

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(38)

38

Searching an element

int element1(int v, List L) { List P=L;

while (P!=NULL)

{if (P->val==v) return 1;

P=P->next;}

return 0;}

int element2(int v, List L) { if (L==NULL) return 0;

return ((v==head(L))||element2(v,tail(L)));

}

• Complexity : Θ(n)

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(39)

39

Insertion at kth rank

Liste add1(int v, int k, List L) {

if (k==0) return cons(v,L);

return

cons(head(L),add1(v,k-1,tail(L)));

}

• What is going on ?

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(40)

40

Insertion at kth rank

void add2(int v, int k, List *L) { int i;

List P,nouv;

if (k==0) *L=cons(v,*L);

else

{if (k>length(*L))

{printf("Add impossible\n"); exit(-1);}

P=*L;

for(i=0;i<k-1;i++) P=P->next;

nouv=(List) malloc(sizeof(int));

nouv->val=v;

nouv->next=P->next;

P->next=nouv;}

}

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(41)

41

Deletion of a list

void freelist(List L) {

if (L!=NULL) {

freelist(L->next);

free(L);

} }

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(42)

42

Inversion of a list

Liste renverse1(List L) { if (L==NULL)

return L;

else

return

concat(renverse1(tail(L)),cons(head(L),NULL));

}

Liste renverse2(List L, List Acc) { if (L==NULL)

return Acc;

else

return renverse2(tail(L),cons(head(L),Acc));

}

Algo Design

Pierre-Alain Fouque, Univ. Rennes

(43)

43

Variants

• Double-linked lists

• Circular Lists

• Stack (LIFO)

• Queue (FIFO)

Algo Design

Pierre-Alain Fouque, Univ. Rennes

Références

Documents relatifs

The inter- national activities undertaken by such bodies as the International Programme for Chemical Safety (jointly conceived by UNEP, ILO and WHO) , the World

Two months later sitting on the street at night she was begging for money with her boyfriend I gave them five dollars. but they didn’t recognize me or thank me for the money which

Because the objectives of decision making in the face of localized prostate cancer are to allow an informed decision to be made and to minimize the regret

The International Union of Pure and Applied Chemistry (IUPAC) is the world authority on chemical nomenclature, terminology (including the naming of new elements in

Lifecycle management for movies is a continuous process: teasers are progressive- ly introduced on the commercial distribution market while the movie is being shot,

We need to identify the common tools and the common sources of semantic material.. And it will be slow – it took crystallography 15 years to create their dictionaries and system

That means, that even if the data denition language and the data manipulation language of a database management system and a knowledge base manage- ment system would coincide,

That is what happens in quasi- belief, according to Sperber: the representation which is embedded in a validating meta- representation ('Lacan says that...' or 'The teacher