SlideShare une entreprise Scribd logo
1  sur  238
Télécharger pour lire hors ligne
Data Structures & Algorithms

                  Dr. Pierre Vignéras
           http://www.vigneras.name/pierre




 This work is licensed under a Creative Commons Attribution-
                     Share Alike 2.0 France.
                               See
       http://creativecommons.org/licenses/by-sa/2.0/fr/
                           for details

                      Dr. Pierre Vignéras                      1
Class, Quiz & Exam Rules
        ●   No entry after the first 10 minutes 
        ●   No exit before the end of the class
        ●   Unannounced Quiz
            –   After (almost) each end of a chapter/concept
            –   At the beginning of a class
            –   Fixed timing (you may suffer if you arrive late) 
            –   Spread Out (do it quickly to save your time)
            –   Papers that are not strictly in front of you will be 
                considered as done
Rules




            –   Cheaters will get '­1' mark

                                  Dr. Pierre Vignéras               2
Outline

      I.      Introduction/Definitions
      II.     Arrays
      III.    Stacks & Queues
      I.      Linked List            Standard Data Structures
      I.      Trees
      II.     Priority Queues
      III.  Sorting
      IV.  Searching
                                       Standard Algorithms
      V.      Balanced Trees
      VI.     Hashing
Outline




      VII.        Graphs
      VIII.  Graphs Algorithms                Standard


                            Dr. Pierre Vignéras           3
Introduction/Definitions
Outline




                  Dr. Pierre Vignéras   4
Introduction/Definitions
I. Introduction/Definitions


                              ●   Data
                              ●   Algorithms
                              ●   Performance Analysis




                                                 Dr. Pierre Vignéras   5
Data
I. Introduction/Definitions


                              ●   VCR Example : interactions through buttons 
                                  on the control panel (PLAY, FFW, REW, REC); 
                                  –   we can't interact with the internal circuitery, the 
                                      internal repesentation is hidden from the end­
                                      user ==> Encapsulation
                                  –   Instructions Manual tells only what  the VCR is 
                                      supposed to do, not how it is implemented ==> 
                                      Abstraction




                                                       Dr. Pierre Vignéras               6
Data
I. Introduction/Definitions


                              ●   Data Encapsulation or Information Hiding
                                  –   is the concealing of the implementation details of a 
                                      data object from the outside world.
                              ●   Data Abstraction
                                  –   is the separation between the specification of a 
                                      data object and its implementation
                              ●   Data Type
                                  –   is a collection of objects and a set of operations 
                                      that act on those objects



                                                       Dr. Pierre Vignéras                7
Data
I. Introduction/Definitions


                              ●   Example: C++ fundamental data types
                                  –   objects type: char, int, float and double
                                  –   operations: +,/,­,*,<,>,=,==,...
                                  –   Modifiers
                                       ●   short, long: amount of storage (8, 16, 32, 64 bits)
                                       ●   signed, unsigned: interpretation of the most 
                                           significant bit of an integer




                                                            Dr. Pierre Vignéras                  8
Data
I. Introduction/Definitions


                              ●   Pointers: couple (a,t) where:
                                  –   a : is an integer ( a word) representing a memory 
                                      cell address
                                  –   t : is a type that gives the interpretation of the 
                                      memory cells that starts from address a
                                                                      &c                   &p   &pi
                                                   char c = 10;       10    ?   ?    ?

                                                  void* p = &c;       10    ?   ?    ?     &c


                                               int* pi = (int*) p;    10    ?   ?    ?     &c   &c



                                                       *pi = 10;      10   0    0   0      &c   &c




                                                                     Dr. Pierre Vignéras              9
Algorithms
I. Introduction/Definitions


                              ●   An algorithm is a finite set of instructions 
                                  that, if followed, accomplishes a particular 
                                  task. 
                                     (1)Input: Zero or more quantities are externally supplied
                                     (2)Output: At least one quantity is produced
                                     (3)Definiteness: Each instruction is clear and unambiguous
                                     (4)Finiteness: If we trace out the instructions of an algorithm, then, 
                                       for all cases, the algorithm terminates after a finite number of steps
                                     (5)Effectiveness: every instruction must be basic enough to be 
                                       carried out, in principle, by a person using only  pencil and paper. It 
                                       is not enough that each operation be definite as in (3): it also must 
                                       be feasible.




                                                           Dr. Pierre Vignéras                           10
Algorithms
I. Introduction/Definitions


                              ●   How to express algorithm? Many solutions
                                  –   Natural language: must be well defined and 
                                      unambiguous (what about portability?)
                                  –   Graphic representations: flowcharts (only for small 
                                      and simple algorithms)
                                  –   Programming languages: low level implementation 
                                      must be removed and replaced by natural language




                                                       Dr. Pierre Vignéras            11
Recursive Algorithms
I. Introduction/Definitions


                              ●   Limitation of recursion (only factorials, 
                                  ackermann, fibonacci, ...)?
                              ●   A tool for theorician?
                              ●   Theorem: ''Any program that can be written 
                                  using assignment, the if­else statement and the 
                                  while statement can also be written using 
                                  assignment, if­else and recursion.''
                              ●   Example: Fibonacci
                                  –   f(0)=f(1)=1
                                  –   f(n) = f(n­1) + f(n­2)


                                                         Dr. Pierre Vignéras   12
Performance Analysis
I. Introduction/Definitions


                              ●   How to judge a program?
                                  –   Does it do what we want it to do?
                                  –   Does it work correctly according to original 
                                      specifications of the task?
                                  –   Is there documentation that describes how to use it 
                                      and how it works?
                                  –   Are the functions created in such way that they 
                                      perform logical subfonctions?
                                  –   Is the code readable?



                                                       Dr. Pierre Vignéras               13
Performance Analysis
I. Introduction/Definitions


                              ●   From a performance point of view, we define 
                                  two criteria:
                                  –   Space complexity: the amount of memory needed 
                                      by a program to run to completion
                                  –   Time complexity: the amount of computer time 
                                      needed by a program to run to completion
                              ●   Two phases in performance evaluation
                                  –   performance analysis: a priori estimates;
                                  –   performance measurement: a posteriori testing.



                                                       Dr. Pierre Vignéras         14
Space Complexity
I. Introduction/Definitions


                              ●   The space needed by a program is seen to be 
                                  the sum of two components
                                  –   fixed part: independant of the characteristics (e.g. 
                                      number, size) of the inputs and outputs
                                       ●   instruction space (space of the code itself)
                                       ●   space for constants, ...
                                  –   variable part: dependant on the particular problem 
                                      instance being solved, hence on the inputs and 
                                      outputs characteristics
                                       ●   variables whose siez depends on inputs/outputs, 
                                       ●   recursion stacks (when it depends on inputs/outputs)

                                                            Dr. Pierre Vignéras              15
Space Complexity
I. Introduction/Definitions


                              ●   S(P)=c+SP
                                  –   c is constant, it represents the fixed part, it is not 
                                      very interesting!
                                  –   SP represents the variable part. Focus on it!
                              ●   Decide which characteristics to use to measure 
                                  space requirements
                                  –   Problem specific!




                                                         Dr. Pierre Vignéras               16
Space Complexity
                                                Sum example
I. Introduction/Definitions


                              int sum(int* a, int n) {
                                 int s = 0;
                                  for (int i = 0; i < n; i++) {
                                      s += a[i];
                                  }
                                  return s;
                              }
                                      ●   Instance Characteristic: n
                                      ●   How many space does it need?
                                      ●   What would be the space required is the array is passed 
                                          by copy?



                                                          Dr. Pierre Vignéras                   17
Time Complexity
I. Introduction/Definitions


                              ●   T(P) = c + TP
                                  –   C is a constant representing the compile time
                                       ●   Do not take it into account! 
                                  –   TP represents the runtime, focus on it!  
                              ●   Very hard to evaluate TP exactly!
                                  –   Suppose the compiler is well known
                                                     TP(n) = Ca.Add(n) + Cm.Mul(n)+...
                                  –   Time needed for addition, multiplication often 
                                      depends on the actual numbers


                                                            Dr. Pierre Vignéras          18
Time Complexity
I. Introduction/Definitions


                              ●   Try to guess the time complexity 
                                  experimentaly
                                  –   program is typed, compiled and run on a specific 
                                      machine. Execution time is physically clocked, 
                                  –   TP(n) is measured...
                                  –   But, the value measured is inaccurate (multiuser 
                                      systems, system load, number of running 
                                      programs, ...)
                              ●   Consider only steps


                                                        Dr. Pierre Vignéras          19
Steps
I. Introduction/Definitions


                              ●   A program step is loosely defined as a 
                                  syntactically or semantically meaningful 
                                  segment of a program that has an execution 
                                  time that is independent of the instance 
                                  characteristics
                              ●   Example:
                                  return (1+2+4)/(5+6+7)*a;
                                  is a single step if a is independent of the 
                                  instance characteristics.
                              ●   How to count steps?


                                                  Dr. Pierre Vignéras        20
Program Modification
I. Introduction/Definitions


                              ●   Introduce a new global variable in the original 
                                  program that count the number of steps.
                              ●   Example : Sum




                                                   Dr. Pierre Vignéras         21
Using a Step Table
I. Introduction/Definitions


                              ●   Create a table in which, for each line of code, 
                                  you write the number of steps per execution 
                                  and the frequency each statement is executed.
                              ●   Example : Sum




                                                   Dr. Pierre Vignéras         22
Limitations of Exact
                                       Evaluation Perfomance
I. Introduction/Definitions


                              ●   Majority of real cases are not so simple
                                  –   Time complexity may not depend only on the 
                                      number of inputs/outputs but also on the value of 
                                      one or many of them
                                       ●   Example: int search(int* a, int n, int x);
                                            –   Instance characteristic: n
                                            –   TP(n) depends on a, n and x !!
                              ●   Consider only three cases:
                                  –   Best­case: minimum number of steps required
                                  –   Worst­case: maximum number of steps possible
                                  –   Average step count: guess !

                                                                Dr. Pierre Vignéras     23
Rough Comparisons
I. Introduction/Definitions


                              ●   Exact step count inaccurate anyway
                                  (what is a step?)
                              ●   Having a rough estimate is usually
                                  sufficient for comparison (but inexact) !!
                                  –   A1 performs in c1.n²+c2.n
                                  –   A2 performs in c3.n
                                  –   Which performs best?




                                                     Dr. Pierre Vignéras   24
Asymptotic Notation (O)
I. Introduction/Definitions


                              ●   f(n)=O(g(n)) iff there exist c > 0 and n0 >
                                  0 such that f(n) ≤ c.g(n) for all n, n ≥ n0
                                            –   3n+2? 10n²+4n+2?
                                       ●   O(1): constant time
                                       ●   O(log(n)): logarithmic time
                                       ●   O(n): linear time
                                       ●   O(n.log(n)): almost linear time
                                       ●   O(n²): quadratic time
                                       ●
                                           O(n3): cubic time
                                       ●
                                           O(2n): exponential time
                                  –   g(n) is an upper bound, find the smallest one!
                                                           Dr. Pierre Vignéras   25
Asymptotic Notation (Ω)
I. Introduction/Definitions


                              ●   f(n)=Ω(n) iff there exist c > 0 and n0 > 0
                                  such that f(n) ≥ c.g(n) for all n, n ≥ n0 )
                                         –   3n+2? 10n²+4n+2?
                              ●   g(n) is a lower bound, find the largest
                                  one!
                              ●   Theorem: if f(n)=amnm+...+a1n+a0
                                  –   f(n) = O(nm)
                                  –   f(n) = Ω(nm) if am > 0



                                                        Dr. Pierre Vignéras   26
Asymptotic Notation (Θ)
I. Introduction/Definitions


                              ●   f(n)=Θ(n) iff there exist c1 > 0, c2 > 0,
                                  and n0 > 0 such that c1.g(n) ≤ f(n) ≤
                                  c2.g(n) for all n, n ≥ n0
                                         –   3n+2? 10n²+4n+2?
                              ●   g(n) is both an upper and lower bound of
                                  f(n)
                              ●   Theorem: if f(n)=amnm+...+a1n+a0
                                  –   f(n) = Θ(nm) if am > 0
                              ●   Example: sum

                                                        Dr. Pierre Vignéras   27
Practical Complexities
I. Introduction/Definitions


                              log(n)     n   n.log(n)       n²            n
                                                                          3
                                                                                    2n
                                0       1        0          1             1          2
                                1       2        2          4             8          4
                                2       4        8         16             64        16
                                3       8       24         64            512       256
                                4       16      64         256           4096     65536
                                5       32     160        1024          32768   4294967296




                                                  Dr. Pierre Vignéras                   28
Practical Complexities
I. Introduction/Definitions



                                           Graph Overview
                              1000

                              900

                              800

                              700                                 log(n)
                                                                  n
                              600                                 n.log(n)
                                                                  n²
                              500                                 n3
                                                                  2n
                              400

                              300

                              200

                              100

                                0

                                            Dr. Pierre Vignéras         29
Performance Measurement
I. Introduction/Definitions


                              ●   Depends on several factors
                                    ●   compiler used
                                    ●   architecture (processor, memory, disk,
                                        cache, ...)
                                    ●   operating system
                                    ●   load (number of users, number of running
                                        processus, etc.)
                              ●   Hard to reproduce
                                    ●   Averaging many experiments (10 and more)
                                    ●   Which values of n? Higher n
                                        ==> conformance to asymptotic analysis.


                                                    Dr. Pierre Vignéras          30
Performance Measurement
I. Introduction/Definitions


                              ●   Needs a function time()
                                  –   Accuracy?
                                       ●   To time a short event, it is necessary to
                                           repeat it several times and divide the total
                                           time for the event by the number of
                                           repetitions.
                              ●   What are we measuring?
                                  –   best case, worst case or average?
                                       ●   Suitable test data need to be generated
                                       ●   Not always easy. Use random data if
                                           possible. Use a good random number
                                           generator.

                                                        Dr. Pierre Vignéras          31
Arrays
Outline




          Dr. Pierre Vignéras   32
Arrays
             ●   Definition
                 –   A mapping <index, element>
             ●   Operations
                 –   Creation/Deletion
                 –   Getting a value
                 –   Setting a value
             ●   Random Access Order
II. Arrays




                      ●   get(i): 'x =a[i]'
                      ●   set(i): 'a[i]=x'
                 –   Warning: index bounds?

                                              Dr. Pierre Vignéras   33
Array Data Structure
                   Interface (C language)
             --------- C File: array.h -------
             typedef struct array* array;
             extern array array_new(int size);
             extern void array_delete(array a);
             extern void* array_get(array a, int i);
             extern void array_set(array a, int i, void* v);
II. Arrays




                                 Dr. Pierre Vignéras           34
Using Arrays
             ●   Ordered, linear list
                 –   Days of the week: (Sunday,... Saturday)
                 –   Values in a deck of cards (Ace, 2, ...,10, Jack, Queen, 
                     King)
                 –   Years France won the Cricket World Cup: '( )'
                      ●   an empty list is still a list!
             ●   Operations on list
II. Arrays




                 –   length, read from left (or right to left)
                 –   Get/Set the i th element (0≤ i <n)
                 –   Insert/Delete at the i th position (0≤ i <n) 

                                             Dr. Pierre Vignéras         35
Polynomial Representation
             ●   How to represent efficiently (space, time)
                 A(x)=3x²+2x+4, B(x)=x100+1
             ●   Operations:

                         A x=∑ a i . x    i


                         B  x=∑ b j x j
                         A xB  x =∑ a ib i x
                                                          i
II. Arrays




                         A x . B  x =∑  ai . x i . ∑ b j . x j 



                                         Dr. Pierre Vignéras              36
Polynomial Representation
                            #1
             struct poly {
                int degree;   // degree < MaxDegree !!
                float coef[MaxDegree + 1];
             };
             // MaxDegree: constant
             ●   Very simple, inefficient !
                  – Consider when degree << MaxDegree

                 –   Complexity in (unused) space ?!
II. Arrays




                                    Dr. Pierre Vignéras   37
Polynomial Representation
                             #2
             struct poly {
                int degree;    // degree < MaxDegree !!
                float* coef;
             };
             typedef struct poly* poly;
             poly poly_create(int d) {
                poly p = malloc(sizeof(*poly));
                p->degree = d;
                p->coef = malloc(d*sizeof(*p->coef));
                return p;
             }
                 Still inefficient (sparse polynom): B(x)=x100+1
II. Arrays




             ●




                                    Dr. Pierre Vignéras            38
Polynomial Representation
                            #3
             struct monom {
                int degree;
                float coef;
             };
             static struct monom GlobalArray[MaxTerms];
             static int free;
             struct poly {
                int start, end;
             };
             ●   A(x)=3x²+2x+4, B(x)=x100+1 representations
II. Arrays




                                   Dr. Pierre Vignéras        39
Polynomial Representations
             ●   Which representation is the best
                 –   Space complexity?
                 –   Time complexity?
                 –   May depend on polynomials used (sparse)
             ●   Global (static) variable representing maximum 
                 instances of a data structure is bad design
                 –   Dynamism is the key!! Provide it!
II. Arrays




                 –   Allocate an array of monoms for each polynomial
                      ●   Space complexity?
                      ●   Time complexity (addition for example)?

                                         Dr. Pierre Vignéras        40
Multidimensional Arrays
             ●   Memory is a single array of word cell
             ●   Any data has a word array internal 
                 representation 
             ●   Represents explicitly multidimensional array 
                 into a single array
                 –   Example: 2 dimensional array
                      ●   A[][]: dimension (n,p) (row, columns)
                          A[i][j] ­­> a[k], k = i*p+j
II. Arrays




                      ●




                                          Dr. Pierre Vignéras     41
Strings
             ●   Internal string representations
                 –   arrays of « char »
                 –   size of the string? 
                      ●   field of a structure (Java)
                      ●   s[0] (Pascal)
                      ●   Ends by a special character (C language: '0')
             ●   Operations
                     length(), replace(), 
II. Arrays




                 –

                 –   concat(), delete()
                 –   find()  

                                          Dr. Pierre Vignéras              42
String Pattern Matching
                          Simple Algorithm
             ●   Two strings 's' and 'p'
             ●   'p' is a pattern to be searched for in 's'
             ●   int find(char* s, char* p)
                 –   returns ­1 if 'p' is empty or if 'p' is not a substring 
                     of 's'
                 –   returns index 'i' such that 'p' matches the substring 
                     of 's' at position 'i' otherwise
                 Simple Algorithm
II. Arrays




             ●




                                        Dr. Pierre Vignéras                43
String Pattern Matching
                          Simple Algorithm
             ●   Improvement: while(i<= |s|­|p|) 
             ●   Space Complexity: O(1)
             ●   Time Complexity (comparisons): 
                 –   Best case: O(|p|)
                 –   Worst case: O((|s|­|p|).|p|)
                 –   Common case: 
                      ●   |s| >> |p|, Complexity ~ Ω (|s|) (Lower bound)
II. Arrays




                                           Dr. Pierre Vignéras             44
String Pattern Matching
                              Knuth, Morris, Pratt
             ●   Keeping memory
                      ●   S = 100101
                      ●   P = 100000
                 –   On a failure of length j, where shall we start our 
                     next comparison in S?
                 –   We know that j characters of S match P
                 –   None of the j­1 other characters of S can match the 
                     first character of P
II. Arrays




             ●   Start comparing the jth character after the 
                 current one in S

                                       Dr. Pierre Vignéras                 45
String Pattern Matching
                            Knuth, Morris, Pratt
             ●   Definition
                 –   Alphabet A of symbols (characters)
                 –   String 'x', where 'x[i]' is the 'i'th character of 'x'
                 –   (Proper) Prefix, (Proper) Suffix, Border
             ●   Example: x=abacab
                 –   Proper Prefix: (), a, ab, aba, abac, abaca
                 –   Proper Suffix: (), b, ab, cab, acab, bacab
II. Arrays




                 –   Border: ( ), ab ­­> |( )|=0, |ab|=2
             ●   ( ) is always a border of any non empty string, it 
                 has no border itself
                                        Dr. Pierre Vignéras                   46
String Pattern Matching
                              Knuth, Morris, Pratt
             ●   Example:
                 0 1 2 3         4   5 6 7 8 9
                 a b c a         b   c a b d
                 a b c a         b   d
                       a         b   c a b d
                 –   Pattern shifted by 3, resuming at 5
                 –   Shift distance determined by the widest border of 
                     the matching prefix of the pattern
II. Arrays




                      ●   matching prefix: abcab, w = 5,
                      ●   widest border: ab, w = 2
                      ●   Shift distance: d = 5­2 = 3 

                                          Dr. Pierre Vignéras        47
String Pattern Matching
                           Knuth, Morris, Pratt
             ●   Two phases
             ●   Preprocessing phase: 
                 –   compute the width of the widest border of each 
                     prefix of the pattern
             ●   Searching phase
                 –   compute the shift distance according to the prefix 
                     that has matched
II. Arrays




                                      Dr. Pierre Vignéras              48
String Pattern Matching
                          Knuth, Morris, Pratt
             ●   Preprocessing phase: compute b[], |b|=|p|+1
             ●   b[i] = width of the widest border of the prefix  
                 of length 'i' of the pattern (i=0,...,|p|).
             ●   b[0] = ­1 (the prefix '()' of length 'i=0' has no 
                 border)
                                                                         i
                             widest border




                                                  prefix of size i
II. Arrays




                            wb                      b[i] = |wb|      x




                                             Dr. Pierre Vignéras             49
String Pattern Matching
                        Knuth, Morris, Pratt
             ●   Computing b[]
                 0 1 2 3 4 5 6       0 1 2 3 4 5 6 7 8 9 10
                 a b a b a a         a b c a b c a c a b
                 - 0 0 1 2 3 1       - 0 0 0 1 2 3 4 0 1 2



                 0 1 2 3 4 5 6 7 8
                 a b a b b a a a
II. Arrays




                 - 0 0 1 2 0 1 1 1




                                 Dr. Pierre Vignéras          50
String Pattern Matching
                             Knuth, Morris, Pratt
             ●   Theorem:
                 –    if 'r', 's' are borders of 'x', |r|<|s|,
                 –   then 'r' is a border of 's'
                 –   if 's' is the widest border of 'x', the next widest 
                     border 'r' of x, is the widest border of 's'
II. Arrays




                                                                 r




                                                                            r
                 r




                                            r




                                                                     s
                                        s
                     s



                              x




                                          Dr. Pierre Vignéras               51
String Pattern Matching
                            Knuth, Morris, Pratt
             ●   Def: 'x': string, 'a': character. 
             ●   A border 'r' of 'x' can be extended by 'a' if 'ra' 
                 is a border of 'xa'
                                            j

                                                a                a
                                      r




                                                            r
                                                    x
II. Arrays




                 A border 'r', of width 'j' of 'x' can be extended by 'a' if 'x[j]=a'



                                          Dr. Pierre Vignéras                           52
String Pattern Matching
                               Knuth, Morris, Pratt
             ●   Suppose we already know b[0],...,b[i]
                 –   To compute b[i+1] we search a border of width j<i 
                     of the prefix 'p[0]...p[i­1]' that can be extended by 
                     character p[i]
                 –   This happens when p[b[j]]=p[i]
                 –   If this is the case, then b[i+1]=b[j]+1
                 –   The border list is in decreasing order
II. Arrays




                      ●   j = b[i], j = b[b[i]], ...

                                       b[j]                           i


                                                Dr. Pierre Vignéras       53
String Pattern Matching
                         Knuth, Morris, Pratt
             ●   Algorithm for the creation of the array 'b[]'
             void kmpPreProcess(char p[]) {
                int i = 0, j = -1;
                b[0] = -1; // Array allocated dynamically and returned
                while (i < |p|) {
                   while (j >= 0 && // j == -1 ==> STOP !!
                          p[i] != p[j]) { // mismatch
                      j = b[j]; // Find the widest border
                   }
                   i++;j++;
                   b[i]=j; // b[i+1] = b[j]+1
II. Arrays




                }
             }




                                   Dr. Pierre Vignéras              54
String Pattern Matching
                         Knuth, Morris, Pratt
             ●   Searching algorithm 
             void kmpSearch(char t[], char p[]) {
                int i = 0, j = 0;
                while (i < |t|) {
                   while (j >= 0 && // j == -1 ==> STOP !!
                          t[i] != p[j]) { // mismatch
                      j = b[j]; // Shift the pattern!!
                   }
                   i++;j++;
                   if (j == |p|) return i – j;
                }
II. Arrays




                return -1;
             }




                                   Dr. Pierre Vignéras       55
String Pattern Matching
                             Knuth, Morris, Pratt
                  Compare                                                i




                                          b[j]                           j

                                  Shift
                                                                  b[j]
                                                     Matching prefix size = 4,
             0 1 2 3   4   5   6 7 8 9
II. Arrays




                                                     widest border = 2,
             a b a b   b   a   b a a                 shift = 4-2 = 2,
             a b a b   a   c
                 a b   a   b   a c                   Matching prefix size = 2,
                       a   b   a b a c               widest border = 0,
                                                     shift = 2 - 0 = 2

                                            Dr. Pierre Vignéras                  56
KMP Algorithm Complexities
             ●   Space
                 –   The array b[] => O(|p|+1)
             ●   Time: how many characters comparisons 
                 –   PreProcessing: focus on the inner while loop
                      ●   decreases 'j' by at least '1' until 'j = ­1' (b[j]<j)
                      ●   'j' is increased exactly '|p|' times by the outer loop
                      ●   => 'j' cannot be decreased more than '|p|' times: O(|p|)
                     Search 
II. Arrays




                 –
                      ●   Same argument: O(|s|) 
                 –   Total: O(|s|+|p|)

                                           Dr. Pierre Vignéras                  57
Stacks & Queues
Outline




              Dr. Pierre Vignéras   58
Stacks and Queues
                       ●   Widely used data structures
                       ●   Ordered List of element
III. Stacks & Queues




                       ●   Easy to implement
                       ●   Easy to use




                                           Dr. Pierre Vignéras   59
Stacks
                                                                          Insert    Delete

                       ●   S=(a0,...,an­1)
                           –    a0 is the bottom of the stack             Top      a3
III. Stacks & Queues




                                                                                   a2
                           –   an­1is the top of the stack                         a1
                                                                        Bottom     a0
                           –   ai is on top of ai­1 (0<i<n)
                       ●   Insertions and deletions are made at the top
                       ●   Last In First Out (LIFO) list
                           –   Example: stack of plates




                                                  Dr. Pierre Vignéras                        60
Stack Interface
                       ●   Basic operations
                           –   add() also called push()
III. Stacks & Queues




                           –   delete() also called pop()
                           –   isEmpty()
                       ●   Optional Operation
                           –   isFull() (when the stack as a maximum capacity)
                       ●   Basic implementation using an array
                           –   How to prevent a stack to become full?




                                                Dr. Pierre Vignéras          61
Stack Use:
                                   evaluation of expression
                       ●   6+(((5+4)*(3*2))+1) = ?                   4
                                                                         +
                                                                     5
                           –   push(6),push(5),push(4)               6            2
III. Stacks & Queues




                                                                         9                *
                           –   push(pop()+pop())                         6        3
                                                                                  9           6
                           –   push(3),push(2)                                    6               *
                                                                                              9
                           –   push(pop()*pop())                                              6
                                                                                                  54
                           –   push(pop()*pop())                                                   6
                                                          1
                           –   push(1)                   54
                                                                 +
                                                                             55
                           –   push(pop()+pop())          6                           +
                                                                              6
                           –   push(pop()+pop())                                          61


                                                 Dr. Pierre Vignéras                                   62
Expression notation
                       ●   Infix 
                           –   operators are in­between their operands
III. Stacks & Queues




                                ●   (3+2)*5 = 25  ­­> Needs parenthesis
                       ●   Postfix (HP calculators)
                           –   operators are after their operands
                                ●   3 2 + 5 * = 25
                       ●   Prefix
                           –   operators are before their operands
                                ●   * + 3 2 5 = 25
                       ●   Order of operands is the same

                                                     Dr. Pierre Vignéras   63
Stack Use:
                          Conversion from infix to postfix
                       // Return the postfix notation of a fully bracketed
                       // infix expression
                       // ((2+3)*5) is ok, (2+3)*5 is not
III. Stacks & Queues




                       char* convert(char* s) {
                          char* t = new char[|s|]; // |t| < |s|
                          for (int i = j = 0; i < |s|; i++) { // i:s[], j:t[]
                             if (s[i] == ')') t[j++] = pop();
                             else if (s[i] == '+') push(s[i]);
                             else if (s[i] == '*') push(s[i]);
                             else if (isDigit(s[i])) t[j++] = s[i];
                          }
                          t[j] = '0';
                          return t;
                       }


                                           Dr. Pierre Vignéras           64
Evaluation of postfix expression
                       // Evaluate a postfix expression such as 23+5*
                       int compute(char* s) { // s is postfix
                          int r = 0;
III. Stacks & Queues




                          for (int i = 0; i < |s|; i++) {
                             if (s[i] == '+') push(pop() + pop());
                             else if (s[i] == '*') push(pop() * pop());
                             else if (isDigit(s[i])) push(valueOf(s[i]));
                          }
                          return pop();
                       }




                                            Dr. Pierre Vignéras             65
Queues

                       ●   Q=(a0,...,an­1)
                           –    a0 is the front of the queue
III. Stacks & Queues




                                                                        Deletion            Insertion
                           –   an­1is the rear of the queue
                                                                           a0    a1   a2   a3    a4
                           –   ai is behind ai­1 (0<i<n)
                                                                         Front                  Rear
                       ●   Insertions take place at the rear
                       ●   Deletions take place at the front
                       ●   First In First Out (FIFO) list
                           –   Example: queue of persons



                                                  Dr. Pierre Vignéras                                   66
Queue Interface
                       ●   Basic operations
                           –   add()
III. Stacks & Queues




                           –   delete()
                           –   isEmpty()
                       ●   Optional Operation
                           –   isFull() (when the queue as a maximum capacity)
                       ●   Basic implementation using an array
                           –   How to prevent a queue to become full?




                                               Dr. Pierre Vignéras          67
Linked List
Outline




            Dr. Pierre Vignéras   68
Characteristics
                    –     Insertion and deletion of elements in constant time 
                          O(1)
                           ●   Contrary to arrays (linear time O(n))
                    –     Accessing an element is in linear time O(n)
                           ●   Contrary to arrays  (constant time O(1))
IV. Linked List




                    –     Composed of nodes where a node is:
                           ●   an element (int, double, whatever)
                           ●   a link to the next element in the list
                  start                   node                                end


                           L                I                  S          T
                                                 Dr. Pierre Vignéras                69
Operations

                                                     Modification
                                                     (LIST --> LOST)
                  L   O    S                T

                           S                         Deletion
                                                     (LOST --> LOT)
IV. Linked List




                  L   O                     T

                           F
                                                     Insertion
                                                     (LOT --> LOFT)
                  L   O                     T




                               Dr. Pierre Vignéras                 70
Dynamic implementation
                  ●   Use a structure (or a class) to represent a node
                      // Always use pointers alias
                      typedef struct node* node; // 'node' == 'struct node*'
                      typedef struct list* list; // 'list' == 'struct list*'
                      struct node {
                         char v; // the value of this element
                                                                 v
                         node next; // the next node
                                                                next
IV. Linked List




                      };


                      struct list {      start    v1
                                                  ?              v1            v2     vn
                         node start;     end     next
                                                 next           next          next   next
                         node end;
                      };
                                                                        ?
                                                                       next


                                          Dr. Pierre Vignéras                              71
Dynamic Implementation
                  ●   Node creation
                      node newNode(char v) {
                         node n = malloc(sizeof(*n));
                         n->v = v;
                         n->next = NULL; // Must be set by the caller.
                         return n;
                      }
IV. Linked List




                       – Write the deleteNode() function.

                  ●   List creation
                      list newList() {
                         list l = malloc(sizeof(*l));
                         l->end = newNode(0, NULL); // Value has no meaning
                         l->end->next = end; // loop !!
                         l->start = newNode(0, end); // Value has no meaning
                         return l;
                      }
                                          Dr. Pierre Vignéras              72
Dynamic Implementation
                  ●   Insertion
                      void insertAfter(list l, char v, node n) {
                         node new = newNode(v, n->next);
                         n->next = new;
                      }
                  ●   Deletion
                      void DeleteNext(list l, node n) {
IV. Linked List




                         node t = n->next;
                         n->next = t->next;
                         deleteNode(t);
                      }
                  ●   Interface
                      –   Pass the list in argument even if unused 
                      –   Interface must be independent of implementations

                                              Dr. Pierre Vignéras            73
Static implementation
                  ●   Using arrays
                      –   one array contains data, 
                      –   others contain next links. (multiple links on data)
              struct node{
                 char v;
                 int next;                                           3 1 1 5 ? 6 2
IV. Linked List




              };                            next                     0   1 2      3     4 5   6
                                            data                             t    l ? i s
              struct list{
                                          free = 4
                 int *next;                              start = 0
                 char *data;                                                     node
                                                          end = 1
                 int free;
              };
              #define START 0                                        I   5               i    6
              #define END 1

                                           Dr. Pierre Vignéras                                    74
Static Implementation
                  list newList() {
                       int size = MAX + 2; // start & end
                       list l = malloc(sizeof(*l));
                       l->next = malloc(size * sizeof(int));
                       l->data = malloc(size * sizeof(char));
                       l->next[START] = END; l->next[END] = START;
                       l->free = 2;
                       return l;
IV. Linked List




                    }
                  void insertAfter(list l, char v, node n) {
                       l->data[free] = v;
                       l->next[free] = l->next[n->index];
                       l->next[n->index] = free++;
                    }
                  void deleteNext(list l, node n) {
                       l->next[n->index] = l->next[l->next[n->index]]; }


                                        Dr. Pierre Vignéras                75
Static Implementation
                  ●   How to handle free cells more efficiently?
                      –   'free' is only incremented until it reached the array 
                          size.
                      –   then, how to use cells that have been removed 
                          from the list in the middle of the array
IV. Linked List




                  ●   Use a 'free' list
                      –   Multiple list on the same data
                      –   This is how 'malloc()' and  'free()' actually works
                      –   This is also how the kernel works: memory is a (big) 
                          array


                                           Dr. Pierre Vignéras              76
Stack implementation using a
                          (linked) list
              // Independent of the actual implementation of the list!
              struct stack { list l; };

              stack newStack() {
                 stack s = malloc(sizeof(*s));
                 s->l = newList();
              }
              void push(stack s, char v) {
IV. Linked List




                 insertAfter(s->l, v, s->l->start);
              }
              char pop(stack s) {
                 assert(!isEmpty(s->l));
                 // Write these 2 functions
                 node top = getNextNode(s->l->start);
                 char v = getNodeValue(top);
                 deleteNext(s->l, s->l->start);
                 return v;
              }
                                     Dr. Pierre Vignéras             77
Double Linked List
                  ●   Problems of single linked list
                      –   moving only in one direction leads to problem on 
                          deletion or searching
                           ●   the preceding node must be known
                  ●   Use two links per node (space complexity?)
IV. Linked List




                      struct node {
                        char v;
                        node *next, *prev;
                      }

                                 ?        v1           v2              vn     ?
                                next     next         next            next   next
                                prev     prev         prev            prev   prev


                                                Dr. Pierre Vignéras                 78
Circular List
                  ●   Single Circular Linked List
                                   v1
                                   ?          v1           v2             vn
                                  next
                                  next      next          next        next
                  ●   Double Circular Linked List
IV. Linked List




                                           prev       ?     next



                                    v1          v2                  vn
                                   next        next                next
                                   prev        prev                prev

                                          Dr. Pierre Vignéras                  79
Trees
Outline




          Dr. Pierre Vignéras   80
Glossary
           ●   Tree
               –   A non­empty finite set of nodes and edges that 
                   follow some conditions
           ●   Node 
               –   Simple object that contains some data
           ●   Edge
               –    A link between two nodes
           ●   Path
V. Trees




               –   A list of distinct nodes in which 2 successives 
                   nodes are linked by an edge


                                    Dr. Pierre Vignéras               81
Glossary

             If more than one path (or                    T       Root
           no path at all), exist between
           the root and any other node,
                then it is not a tree
                   (but a graph)




               Node                 R                     E              E

               Edge
V. Trees




                                    E               A         X   M      P   E

           {R, T, E, M, L} is the path from R to L
                                                                   L

                                            Dr. Pierre Vignéras                  82
Glossary
           ● M is the father of L                            If N is the number of nodes,
           ● R is the child of T
                                                             (N-1) is the number of edges
           ● {A, X} and {M, P, E} are siblings
                                                                                                Level

           ● Degree(Node)                                      T           Root                  1
              ● number of children

           ● deg(T) = 3, deg(M) = 1




                                       R                       E                    E             2
V. Trees




               Leaf Node               E                 A         X        M       P       E     3

           ● Degree(Tree)
              ● maximum degree of its node

           ● degree = 3
                                                                             L       Depth: 4     4

                                                 Dr. Pierre Vignéras                             83
Representations
           ●   Depends on the needs
               –   If you just need to go from a child to its parent, use 
                   two arrays
                   a[k] = value of the node k (e.g. a character)
                   father[k] = index of father of node a[k]
                   a[father[k]]  = value of the father of node k


                           k     0 1 2 3 4 5 6 7 8 9 10
V. Trees




                          a[k] T R E E E X A M P L E
                       father[k] 0 0 0 0 1 2 2 3 3 7 3

                                     Dr. Pierre Vignéras              84
Representations
           ●   If you need to go down, from parents to 
               children
               –   use (dynamic) linked lists to keep track of children
               –   one brother list
               –   one children list           T


                                        R                     E           E
V. Trees




                                    E          A          X           M       P   E
                    Brother List
                    Children List                                 L

                                        Dr. Pierre Vignéras                       85
Representations

                    T                                                          T

                                                                           R
               R         E           E
                                                                   E               E
           E       A    X        M       P       E
                                                                       A                   E
                             L                                                 X           M

                                             Rotate                                    L       P
V. Trees




                   Any tree can be converted                                                       E
                     into a 2-degree tree.


                                             Dr. Pierre Vignéras                                   86
Binary Tree
           ●   2­degree tree are so important that they have a 
               special name: Binary Tree
           ●   A binary tree is a finite set of nodes that is 
               either empty or as a root and two disjoint 
               binary trees called left subtree and right 
               subtree.
           ●   Recursion in the definition
           ●   Algorithm on binary trees is often expressed 
V. Trees




               recursively



                                Dr. Pierre Vignéras        87
Binary Tree Characteristics
           ●   Maximum number of nodes at level 'i': 2(i­1)
           ●   Maximum number of nodes in a binary tree of 
                            k
               depth 'k': (2 ­1)
                – Proof by induction
           ●   A full binary tree of depth 'k' is a binary tree of 
               depth 'k' having (2k­1) node
           ●   A binary tree with  'n' nodes and depth 'k' is 
               complete iff its node correspond to the nodes 
V. Trees




               numbered from '1' to 'n' in the full binary tree 
               of depth 'k'.

                                  Dr. Pierre Vignéras           88
Full and Complete Binary
                             Trees
                                   1

                       2                    3
                                                                  Complete
               4             5          6         7


           8       9       10 11 12 13 14 15

                                 Full
V. Trees




           Height of a complete binary
           tree with 'n' nodes: ⌈lg(n+1)⌉                               Normal

                                            Dr. Pierre Vignéras                  89
Representations: array
           ●   If you now the number of nodes 'n', you may 
               use an array 't' of width '(n+1)'
               –   Parent(i) = t[ceil(i/2)], i != 1; If (i == 1), i is the root 
                   node and has no parent.
               –   LeftChild(i) = t[2.i] if (2*i <= n); If (2*i > n), i has no 
                   left child.
               –   RightChild(i) = t[2.i+1] if (2.i+1<= n); If (2.i+1>n), i 
                   has no right child.
V. Trees




           ●   Ideal for complete trees
           ●   Waste of space for miscellaneous trees (skewed 
               trees)
                                       Dr. Pierre Vignéras                   90
Representations: array
                        Examples
            k      0123456 7                               S

           a[k]    - S OM - E - T                      O           M
                                                               E           T

                                                           S
            k     0123456 7
                                                       O
           a[k]   - SO - T - - -
                                                   T


                                                               S
V. Trees




            k     0123456 7                            O               M
           a[k]   - S OMP E L -                    P       E           L


                             Dr. Pierre Vignéras                               91
Representations: Linked
           ●   Use pointers to represents left and right childs
               struct node{
                  char v;
                  node left, right;
               };
               struct tree{
                  node root;
               }
               Exercice: write the newNode() and newTree() function!
                                     left v1 right
V. Trees




                         left    v2l     right                                left     v2r   right


           left   v3ll   right         left   v3lr   right     left    v3rl    right     left   v3rr right

                                                 Dr. Pierre Vignéras                                  92
Binary Tree Traversal
           ●   Visit each node of a tree exactly once
               –   On visit, perform an operation on the data
           ●   Convention: always visit left before right
           ●    In order: LVR (recursive)
               –   move Left, Visit the node, move Right
           ●   Pre order: VLR (recursive)
               –   Visit the node, move Left, move Right
               Post order: LRV ­> Guess! (recursive)
V. Trees




           ●

           ●   Level order: visit by level (non­recursive)


                                   Dr. Pierre Vignéras          93
Binary Tree Traversal
                             Examples
           6+(((5+4)*(3*2))+1)                                    +
           – In Order: 
             6+5+5*3*2+1
                                                       6                      +
           –   Pre Order:
               + 6 + * + 5 4 * 3 2 1
                                                                          *           1
           –   Post Order:
               6 5 4 + 3 2 * * 1 + +                              +               *
           –   Level Order:
V. Trees




               + 6 + * 1 + * 5 4 3 2                          5       4       3           2




                                        Dr. Pierre Vignéras                                   94
Binary Tree Traversal
                       Implementations
           void inOrder(node root) { // implicit use of a stack
               if (root == NULL) return;
               inOrder(root->left);
               process(root->v); // Do something with the value
               inOrder(root->right);
           }
           void preOrder(node root) { // implicit use of a stack
               if (root == NULL) return;
               process(root->v); // Do something with the value
               preOrder(root->left);
               preOrder(root->right);
V. Trees




           }
           Exercice 1: write postOrder()!




                                        Dr. Pierre Vignéras        95
Binary Tree Traversal
                          Non-recursive
                         implementations
           void inOrder(node n) {
               stack s = newStack();   // needs a stack
               while (1) { // Infinite loop
                   while (n != NULL) { // Push n on the (top of the) stack
                       push(n);
                       n = n->left; // Move down on left child
                   }
                   if (isEmpty(s)) break; // Nothing else to do
                   n = pop(s); // pop the last inserted child
                   process(n); // Do something with the node
                   n = n->right; // Move right then
V. Trees




               }
           }
           Exercice 1 (easy): write preOrder() non-recursive version
           Exercice 2 (difficult): write postOrder()


                                       Dr. Pierre Vignéras                   96
Binary Tree Traversal
                       Implementations
           void levelOrder(node root) {
              node n = root;
               while (n!= NULL) {
                   process(n);
                   if (n->left != NULL) addQueue(n->left);
                   if (n->right != NULL) addQueue(n->right);
                   n=deleteQueue();
               }
           }
           // No need of a stack.
V. Trees




           // Needs a queue.




                                      Dr. Pierre Vignéras      97
Priority Queues
Outline




              Dr. Pierre Vignéras   98
Definition
                      ●   A max (resp. lin) priority queue is a queue that 
                          provides a deleteMax()  (resp. 
                          deleteMin())operation.
VI. Priority Queues




                          –   each element in the queue has:
                               ●   a value
                               ●   a priority that is called a key
                      ●   The deleteMax()  (resp. deleteMin())
                          operation  delete the element in the queue 
                          with the maximal priority (resp. minimal) 
                          instead of the first inserted one as with the 
                          delete() operation of ordinary queues (FIFO).
                                                     Dr. Pierre Vignéras   99
Priority Queues
                                Basic Implementations
                      ●   Using a non­ordered list
                          –   insertion() in constant time: O(1)
                          –   deleteMax() in linear time: O(n)
VI. Priority Queues




                      ●   Using an ordered­list
                          –   insertion() in linear time: O(n)
                          –   deleteMax() in constant time: O(1)




                                               Dr. Pierre Vignéras   100
{max, min}-Heap
                      ●   A max (min) tree is a tree in which the key 
                          value in each node is no smaller (larger) than 
                          the key values in its children (if any)
VI. Priority Queues




                      ●   A max heap is a complete binary tree that is 
                          also a max tree 
                      ●   A min heap is a  complete binary tree that is 
                          also a min tree
                      ●   The root of a max (min) heap is the largest 
                          (smallest) key in the tree
                      ●   Complete binary tree: use an array for storage


                                           Dr. Pierre Vignéras         101
Max-Heap Examples
                                  9                      5                                              6                                6

                          6               5        3             2                              9               5                    9           5
VI. Priority Queues




                      1       3       2        1                                            1       3       2                    1           2


                                          max-heaps                                 complete-binary tree                         binary-tree

                                                                                                                                     1
                                  9                              9                              1
                                                                                                                         2                   3
                          6       3       5              6               5              3               4           4        5           6           7

                      1               2                      1       2              5       7       9           8       9 10 11 12 13 14 15

                       max-tree                          max-tree
                      (not-binary)                     (not-complete)                                               min-heaps

                                                                         Dr. Pierre Vignéras                                                     102
Heap implementation
                  struct element {
                     char value;
                     int key;
                  }
                  struct heap {
VI. Priority Queues




                     element *a; // backed by an array
                     int n;      // size of the tree
                  };

                  heap newHeap() {
                     heap h = malloc(sizeof(*h));
                     h->n = 0; // Empty
                     h->a = malloc(MAX_SIZE*sizeof(*a));
                     return h;
                  }

                  // Exercice: write the freeHeap() function

                                         Dr. Pierre Vignéras   103
insert() Implementation
                              5                           5                           5                          7
                                      insert(7)                   max heap?                   max heap?
                          3       2               3           2               7           2              5             2
VI. Priority Queues




                      1                       1       7                  1        3                  1       3

                      void insert(heap h, element e) {
                         assert(!heap_full(h))); // Implement this function
                         n++; // increase the size of the heap
                         int i = n; // start from the last 'node' in the tree
                         while(1) { // infinite loop
                             if (i == 1) break; // We have reached the root
                             element father = h->a[i/2];
                             if (e.key <= father.key) break; // Position found at 'i'
                             h->a[i] = h->a[i/2]; // Move the value from parent to 'i'
                             i = i/2; // Next insertion point is the father
                         }
                         h->a[i] = e; // Insert the element at its right position
                      }
                                                      Dr. Pierre Vignéras                                            104
deleteMax() Implementation
                                  9                          2                        7                       7
                                          deleteMax()                 max heap?               max heap?
                          7           5                 7         5               2       5               6         5

                      6       2                                                                      2
VI. Priority Queues




                                                   6                          6
                      element deleteMax(heap h) {
                         assert(!heap_empty(h)));          // Implement this function
                         element m = h->a[1],              // the element to return
                                 lost = h->a[n];          // the lost element
                         n--;                             // decrease heap size
                         for (int i=1, j=2*i; j<=n;) {     // start from the root
                             if (j<n && h->a[j] < h->a[j+1]) j++; // j=max(l,r);
                             if (lost.key >= h->a[j].key) break; // Position found
                             h->a[i] = h->a[j];                    // Move child up
                             i = j; j = 2*j;                       // Go down
                         }
                         h->a[i] = lost; // Insert the element at its right position
                         return m;
                      }
                                                            Dr. Pierre Vignéras                                   105
Heap Implementation 
                                            Complexities
                      ●   Space
                          –   insert() & deleteMax(): O(1)
                      ●   Time
VI. Priority Queues




                          –   insert(): O(lg(n))
                               ●   moves up from a leaf toward the root
                                    –   maximum number of nodes visited = height(tree) = ⌈lg(n+1)⌉
                               ●   At each node, O(1) operation
                          –   deleteMax(): O(lg(n))
                               ●   moves down from the root toward a leaf
                               ●   same argument


                                                       Dr. Pierre Vignéras                      106
Sorting
Outline




          Dr. Pierre Vignéras   107
Introduction
               ●   20% of computer time is about sorting
               ●   Many different algorithms with different time ans 
                   space complexities
                    – None is the best
               ●   Simple algorithms are very efficient in common cases
               ●   Complex algorithm have better asymptotic time 
                   complexities
VII. Sorting




               ●   Some algorithm are well understood whereas others 
                   are not
                    – Still a research area




                                      Dr. Pierre Vignéras               108
Terminology
               ●   We consider a sequential list (linked list or array) of 
                   elements
                    – each element has a key

                   –   keys are used for sorting
               ●   Example: class list
                    – elements are “students” record containing many 
                      fields
VII. Sorting




                        ●name, id, average
                   –   Each field may be a key for a given sort



                                        Dr. Pierre Vignéras              109
Terminology
               ●   A sort is said 
                    – internal: if it takes place in the memory

                   –   external:  if only part of the list can be stored in 
                       memory
               ●   A sort is said stable if elements with equal keys in the 
                   input list is kept in the same order in the output list
                           – Most simple sorting algorithm are stables 
VII. Sorting




                             whereas most complex ones are not
                           – Example: list of students sorted by name
                              ●   you sort this list by the average mark
                              ●   students with same average mark are still in order


                                            Dr. Pierre Vignéras                 110
Selection Sort
               ●   Find the final position 'k' of element at 
                   position 'i'
               ●   swap element 'i' and 'k'

               void sort_selection(int * t, int N) { // From 1 to N !!
                  int min;
                  for (int i = 1; i < N; i++) {
                     min = i;
VII. Sorting




                     for (int j = i+1; j <= N; j++) {
                        if (t[j] < t[min]) min = j;
                     }
                     swap(t, i, min);
                  }
               }


                                      Dr. Pierre Vignéras                111
Selection Sort Analysis
               ●   Space complexity
                   –   O(1)
               ●   Time complexity
                   –   comparisons: (N­1)+(N­2)+1= N(N­1)/2 = O(N²)
                   –   movements:  N = O(N)
               ●   Performance of this algorithm does not 
VII. Sorting




                   depend on the datas
                   –   Worst case, best case and average case are roughly 
                       the same!
                        ●   number of assignments may vary (min = j)


                                           Dr. Pierre Vignéras         112
Insertion Sort
               ●   For the given element at position 'i', move 
                   each greater elements on its left to its right
               ●   Insert element 'i' at the free position

               void sort_insertion(int * t, int N) { // From 1 to N !!
                  for (int i = 2; i <= N; i++) {
                     int j = i, v = t[i];
                     while (j > 1 && t[j-1] > v) {
VII. Sorting




                        t[j] = t[j-1];
                        j--;
                     }
                     t[j] = v;
                  }
               }


                                      Dr. Pierre Vignéras                113
Insertion Sort Analysis
               ●   Space complexity
                   –   O(1)
               ●   Time complexity 
                   –   comparisons: 
                        ●   Improvement: the test (j>1) is almost always true
                        ●   t[0]=MIN_KEY, remove the test
VII. Sorting




                        ●   worst case :       N −1
                                                               N 2 N −1
                                         ∑ i1=23... N =                =O  N² 
                        ●   average case is ~ N²/4 = O(N²)2
                                               i=1




                   –   movements:  
                              –   worst case : O(N²) 
                              –   average case ~ N²/2 = O(N²)
               ●
                                                      Dr. Pierre Vignéras                114
Shell Sort
               ●   Reorder the list to obtain an ordered  sublist 
                   when considering every 'h'­th elements (for a 
                   given h)
               ●   Series of decreasing values of 'h'
               void sort_shell(int * t, int N) { // From 1 to N !!
                  for (int h = N / 9; h > 0; h = h / 3) {
                     for (int i = h; i <= N; i++) {
VII. Sorting




                        int j = i, v = t[i];
                        while (j > h && t[j-h] > v) {
                           t[j] = t[j-h];
                           j = j-h;
                        }
                        t[j] = v;
                     }
                  }}
                                      Dr. Pierre Vignéras            115
Shell Sort Analysis
               ●   Space complexity
                   –   O(1)
               ●   Time complexity 
                   –   comparisons & movements: 
                        ●   Depends on the series used
                             –   Some are better than others
                   –   Still unknown in the general case
VII. Sorting




               ●   Very efficient algorithm for some well known 
                   series
                   –   1, 4, 13, 40, 121, ...: h=3*h+1 : O(    ) comparisons
                                                                      N 3 /2



                                                Dr. Pierre Vignéras            116
Merging arrays
               ●   Given 2 ordered lists s and t, merge them in a 
                   list u so that u is ordered


               void merge(int * s, int N, int *t, int P) {
                  int * u = malloc((n+p) * sizeof(*u));
                  int i = N, j = P;
                  s[0] = t[0] = INT_MIN;
VII. Sorting




                  for (int k = N+P; k > 0; k--) {
                     u[k] = (s[i] > t[j]) ? s[i--] : t[j--];
                     }
                  }
               }



                                      Dr. Pierre Vignéras       117
Merge Sort (array)
           int s[MAX]; // Bad design!
           void sort_merge(int *t, int l, int r) {
             int i, j, k, m;
             if (r <= l) return;
              // divide and conquer
             m = (l+r)/2;
             sort_merge(t, l, m);
             sort_merge(t, m+1, r);
              // create s = t[l]...t[m]t[r]...t[m+1]
VII. Sorting




             for (i = m; i >= l; i--) s[i]=t[i];
             for (j = m; j < r; j++) s[r+m-j] = t[j+1];
              // merge the two sublists
             for (k = i = l, j = r; k <= r; k++) {
               t[k] = (s[i] < s[j]) ? s[i++]:s[j--];
             }
           }
                                Dr. Pierre Vignéras       118
Merging lists
               ●   Given 2 ordered lists s and t, merge them in a 
                   list u so that u is ordered
               list merge(list s, list t) {
                  list u = newList(); node up = start(u)->next;
                  node sp = start(s)->next, tp = start(t)->next;
                  end(s)->key = end(t)->key = INT_MAX;
                  do {
                     if (key(sp) <= key(tp)) {
VII. Sorting




                        up->next = sp; up = sp; sp=sp->next;
                     }else{
                        up->next = tp; up = tp; tp=tp->next;
                     }
                  } while(up != end(s) && up != end(t));
                  start(u) = end(u)->next; free(end(u));
                  return u;
               }
                                      Dr. Pierre Vignéras          119
Merge Sort (list)
           node end; // Any list must end with this node.
           node sort_merge(node u) {
              node s, t; // 's': start of first list
              if (u->next = end) return u;
              s = u; t = u->next->next; // 't': search the end
              // Shift 't' 2 times more than 'u'
              while(t != end) {
                 u = u->next; t=t->next->next;
              }
VII. Sorting




              // Makes 't' the start of the second list
              t = u->next; // 'u': end of the first list
              // Makes 's' the start of the first list
              u->next = end; // 's' must end with 'end'
              // Exercice: write this merge() function
              return merge(sort_merge(s), sort_merge(t));

           }                    Dr. Pierre Vignéras              120
Merge Sort Analysis
               ●   Space complexity
                   –   Arrays: O(n), List: O(1)
               ●   Time complexity 
                   –   comparisons: O(n.log(n))
                   –   Both in the worst and in the average case.
               ●   This algorithm is stable
VII. Sorting




               ●   Very efficient algorithm 
                   –   Requires some space!




                                         Dr. Pierre Vignéras        121
Heap Sort
               ●   Insert all elements of the list in a (max­)heap
               ●   Delete each element one after the other and 
                   insert it a the next free position.

               void sort_heap(int * t, int N) {
                  heap h = newMaxHeap();
                  for (int i = 1; i <= N; i++) heap_insert(h, t[i]);
                  for (int i = N; i >= 1; i--) t[i] = heap_deleteMax(h);
VII. Sorting




               }




                                      Dr. Pierre Vignéras             122
Heap Sort Analysis
               ●   Space complexity
                   –   Using a heap: O(n)
                   –   Using an heap backed by the given array: O(1) 
               ●   Time complexity 
                   –   comparisons: O(2n.log(n))
               ●   Efficient algorithm 
VII. Sorting




                   –   Less efficient than merge sort
                   –   Does not need additional space




                                        Dr. Pierre Vignéras             123
Quick Sort
               ●   Find an element called 'pivot' and partition the 
                   list so that:
                   –   any elements at the left of the pivot are lesser
                   –   any elements at the right of the pivot are greater
               ●   Sort the two sublists at the left and the right of 
                   the pivot
VII. Sorting




               void sort_quick(int * t, int l, int r) {
                  if (l > r) return;
                  int i = partition(t, l, r);
                  sort_quick(t, l, i-1);
                  sort_quick(t, i+1, r);
               }
                                         Dr. Pierre Vignéras                124
Quick Sort
               int partition(int * t, int l, int r) {
                  int i = l-1, j=r, v=t[r];
                  for(;;) {
                     while (t[++i] < v);
                     while (t[--j] > v); // check j>0 --> median
                     if (i >= j) break;
                     swap(t, i, j);
                  }                            SORTINGCHARACTERS
                  swap(t, i, r);               ROREINGCHARACSTST
                  return i;                    AACCINGRHORRE STT
VII. Sorting




               }                               AAC ENGRHORRI
                                                       HGINORRR
                                                       GH NORRR
                                                  AACCEGHINORRRSSTT



                                    Dr. Pierre Vignéras               125
Quick Sort Analysis
               ●   Space complexity (a stack is used)
                   –   worst case: O(n), average case is O(log(n))
               ●   Time complexity 
                   –   Worst case is O(n²)
                   –   Average case is O(n.log(n)) // Best one!!
                   –   Improve performance by choosing a better pivot
VII. Sorting




                        ●   random
                        ●   median of (left, middle, right)
                             –   sort them to prevent the condition (j>0)
               ●   Unstable !!

                                                 Dr. Pierre Vignéras        126
How fast can we sort?
               ●   Time complexity  of simple algorithms
                   –   O(n²) but very efficient for small 'n'
               ●   Complex algorithm
                   –   O(n.log(n))
                        ●   space requirement in O(n) (merge sort)
                        ●   worst case in O(n²), unstable (quick sort)
                            Good compromise:  (heap sort) – O(2n.log(n))
VII. Sorting




                        ●


               ●   It can be shown that (n.log(n)) comparisons 
                   is an average minimum
               ●   But...

                                           Dr. Pierre Vignéras             127
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms
Data Structures and Algorithms

Contenu connexe

Tendances

FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT03062679929
 
Data Structure and Algorithms.pptx
Data Structure and Algorithms.pptxData Structure and Algorithms.pptx
Data Structure and Algorithms.pptxSyed Zaid Irshad
 
Unit 2 Principles of Programming Languages
Unit 2 Principles of Programming LanguagesUnit 2 Principles of Programming Languages
Unit 2 Principles of Programming LanguagesVasavi College of Engg
 
Introduction to data structures and Algorithm
Introduction to data structures and AlgorithmIntroduction to data structures and Algorithm
Introduction to data structures and AlgorithmDhaval Kaneria
 
Graph in data structure
Graph in data structureGraph in data structure
Graph in data structureAbrish06
 
Unit 1 introduction to data structure
Unit 1   introduction to data structureUnit 1   introduction to data structure
Unit 1 introduction to data structurekalyanineve
 
Lecture 1 data structures and algorithms
Lecture 1 data structures and algorithmsLecture 1 data structures and algorithms
Lecture 1 data structures and algorithmsAakash deep Singhal
 
Query processing and optimization (updated)
Query processing and optimization (updated)Query processing and optimization (updated)
Query processing and optimization (updated)Ravinder Kamboj
 
Log based and Recovery with concurrent transaction
Log based and Recovery with concurrent transactionLog based and Recovery with concurrent transaction
Log based and Recovery with concurrent transactionnikunjandy
 
Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)Jargalsaikhan Alyeksandr
 
Reading and Writing Files
Reading and Writing FilesReading and Writing Files
Reading and Writing Filesprimeteacher32
 
Database Programming
Database ProgrammingDatabase Programming
Database ProgrammingHenry Osborne
 
Fundamentals of OOP (Object Oriented Programming)
Fundamentals of OOP (Object Oriented Programming)Fundamentals of OOP (Object Oriented Programming)
Fundamentals of OOP (Object Oriented Programming)MD Sulaiman
 
Sorting Techniques
Sorting TechniquesSorting Techniques
Sorting TechniquesRafay Farooq
 
Data structure lecture 1
Data structure lecture 1Data structure lecture 1
Data structure lecture 1Kumar
 

Tendances (20)

FUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPTFUNCTIONS IN c++ PPT
FUNCTIONS IN c++ PPT
 
Oops ppt
Oops pptOops ppt
Oops ppt
 
Data Structure and Algorithms.pptx
Data Structure and Algorithms.pptxData Structure and Algorithms.pptx
Data Structure and Algorithms.pptx
 
Unit 2 Principles of Programming Languages
Unit 2 Principles of Programming LanguagesUnit 2 Principles of Programming Languages
Unit 2 Principles of Programming Languages
 
Introduction to data structures and Algorithm
Introduction to data structures and AlgorithmIntroduction to data structures and Algorithm
Introduction to data structures and Algorithm
 
Graph in data structure
Graph in data structureGraph in data structure
Graph in data structure
 
Unit 1 introduction to data structure
Unit 1   introduction to data structureUnit 1   introduction to data structure
Unit 1 introduction to data structure
 
Lecture 1 data structures and algorithms
Lecture 1 data structures and algorithmsLecture 1 data structures and algorithms
Lecture 1 data structures and algorithms
 
Data structure
Data structureData structure
Data structure
 
Query processing and optimization (updated)
Query processing and optimization (updated)Query processing and optimization (updated)
Query processing and optimization (updated)
 
Create table
Create tableCreate table
Create table
 
Log based and Recovery with concurrent transaction
Log based and Recovery with concurrent transactionLog based and Recovery with concurrent transaction
Log based and Recovery with concurrent transaction
 
Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)
 
Reading and Writing Files
Reading and Writing FilesReading and Writing Files
Reading and Writing Files
 
Database Programming
Database ProgrammingDatabase Programming
Database Programming
 
Big o notation
Big o notationBig o notation
Big o notation
 
Fundamentals of OOP (Object Oriented Programming)
Fundamentals of OOP (Object Oriented Programming)Fundamentals of OOP (Object Oriented Programming)
Fundamentals of OOP (Object Oriented Programming)
 
Sorting Techniques
Sorting TechniquesSorting Techniques
Sorting Techniques
 
Sets in python
Sets in pythonSets in python
Sets in python
 
Data structure lecture 1
Data structure lecture 1Data structure lecture 1
Data structure lecture 1
 

En vedette

DATA STRUCTURES
DATA STRUCTURESDATA STRUCTURES
DATA STRUCTURESbca2010
 
Data structure and its types
Data structure and its typesData structure and its types
Data structure and its typesNavtar Sidhu Brar
 
Data structures (introduction)
 Data structures (introduction) Data structures (introduction)
Data structures (introduction)Arvind Devaraj
 
Fundamentals of data structures
Fundamentals of data structuresFundamentals of data structures
Fundamentals of data structuresNiraj Agarwal
 
Introduction of data structure
Introduction of data structureIntroduction of data structure
Introduction of data structureeShikshak
 
Introduction to Algorithms
Introduction to AlgorithmsIntroduction to Algorithms
Introduction to AlgorithmsVenkatesh Iyer
 
Data structure and its types
Data structure and its typesData structure and its types
Data structure and its typesNavtar Sidhu Brar
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data StructureZidny Nafan
 
Trees (data structure)
Trees (data structure)Trees (data structure)
Trees (data structure)Trupti Agrawal
 
Queue data structure
Queue data structureQueue data structure
Queue data structureanooppjoseph
 
មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++Ngeam Soly
 
Data structures / C++ Program examples
Data structures / C++ Program examplesData structures / C++ Program examples
Data structures / C++ Program examplesKevin III
 
TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....
TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....
TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....Shail Nakum
 
Data Structures- Part3 arrays and searching algorithms
Data Structures- Part3 arrays and searching algorithmsData Structures- Part3 arrays and searching algorithms
Data Structures- Part3 arrays and searching algorithmsAbdullah Al-hazmy
 
DESIGN AND ANALYSIS OF ALGORITHMS
DESIGN AND ANALYSIS OF ALGORITHMSDESIGN AND ANALYSIS OF ALGORITHMS
DESIGN AND ANALYSIS OF ALGORITHMSGayathri Gaayu
 
STACKS IN DATASTRUCTURE
STACKS IN DATASTRUCTURESTACKS IN DATASTRUCTURE
STACKS IN DATASTRUCTUREArchie Jamwal
 

En vedette (20)

DATA STRUCTURES
DATA STRUCTURESDATA STRUCTURES
DATA STRUCTURES
 
Data structure and its types
Data structure and its typesData structure and its types
Data structure and its types
 
Data structures (introduction)
 Data structures (introduction) Data structures (introduction)
Data structures (introduction)
 
Data Structure
Data StructureData Structure
Data Structure
 
Fundamentals of data structures
Fundamentals of data structuresFundamentals of data structures
Fundamentals of data structures
 
Introduction of data structure
Introduction of data structureIntroduction of data structure
Introduction of data structure
 
Introduction to Algorithms
Introduction to AlgorithmsIntroduction to Algorithms
Introduction to Algorithms
 
Data structure and its types
Data structure and its typesData structure and its types
Data structure and its types
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Trees (data structure)
Trees (data structure)Trees (data structure)
Trees (data structure)
 
Queue data structure
Queue data structureQueue data structure
Queue data structure
 
មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++មេរៀនៈ Data Structure and Algorithm in C/C++
មេរៀនៈ Data Structure and Algorithm in C/C++
 
Linked list
Linked listLinked list
Linked list
 
Data structures / C++ Program examples
Data structures / C++ Program examplesData structures / C++ Program examples
Data structures / C++ Program examples
 
TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....
TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....
TYPES DATA STRUCTURES( LINEAR AND NON LINEAR)....
 
Tree in data structure
Tree in data structureTree in data structure
Tree in data structure
 
Flowchart
FlowchartFlowchart
Flowchart
 
Data Structures- Part3 arrays and searching algorithms
Data Structures- Part3 arrays and searching algorithmsData Structures- Part3 arrays and searching algorithms
Data Structures- Part3 arrays and searching algorithms
 
DESIGN AND ANALYSIS OF ALGORITHMS
DESIGN AND ANALYSIS OF ALGORITHMSDESIGN AND ANALYSIS OF ALGORITHMS
DESIGN AND ANALYSIS OF ALGORITHMS
 
STACKS IN DATASTRUCTURE
STACKS IN DATASTRUCTURESTACKS IN DATASTRUCTURE
STACKS IN DATASTRUCTURE
 

Similaire à Data Structures and Algorithms

Data structures using C
Data structures using CData structures using C
Data structures using CPdr Patnaik
 
Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02Salman Qamar
 
Colored petri nets theory and applications
Colored petri nets theory and applicationsColored petri nets theory and applications
Colored petri nets theory and applicationsAbu Hussein
 
MachinaFiesta: A Vision into Machine Learning 🚀
MachinaFiesta: A Vision into Machine Learning 🚀MachinaFiesta: A Vision into Machine Learning 🚀
MachinaFiesta: A Vision into Machine Learning 🚀GDSCNiT
 
Adsa lab manual
Adsa lab manualAdsa lab manual
Adsa lab manualRaja Ch
 
Matlab for a computational PhD
Matlab for a computational PhDMatlab for a computational PhD
Matlab for a computational PhDAlbanLevy
 
V2.0 open power ai virtual university deep learning and ai introduction
V2.0 open power ai virtual university   deep learning and ai introductionV2.0 open power ai virtual university   deep learning and ai introduction
V2.0 open power ai virtual university deep learning and ai introductionGanesan Narayanasamy
 
Class5_DataloggerProgrammingArduino.pptx
Class5_DataloggerProgrammingArduino.pptxClass5_DataloggerProgrammingArduino.pptx
Class5_DataloggerProgrammingArduino.pptxHebaEng
 
TeelTech - Advancing Mobile Device Forensics (online version)
TeelTech - Advancing Mobile Device Forensics (online version)TeelTech - Advancing Mobile Device Forensics (online version)
TeelTech - Advancing Mobile Device Forensics (online version)Mike Felch
 
MIT6_0001F16_Lec1.pdf
MIT6_0001F16_Lec1.pdfMIT6_0001F16_Lec1.pdf
MIT6_0001F16_Lec1.pdfssuser125b6b
 
Decision tree lecture 3
Decision tree lecture 3Decision tree lecture 3
Decision tree lecture 3Laila Fatehy
 
Creating Profiling Tools to Analyze and Optimize FiPy Presentation
Creating Profiling Tools to Analyze and Optimize FiPy PresentationCreating Profiling Tools to Analyze and Optimize FiPy Presentation
Creating Profiling Tools to Analyze and Optimize FiPy Presentationdmurali2
 
How to not fail at security data analytics (by CxOSidekick)
How to not fail at security data analytics (by CxOSidekick)How to not fail at security data analytics (by CxOSidekick)
How to not fail at security data analytics (by CxOSidekick)Dinis Cruz
 
Building Interpretable & Secure AI Systems using PyTorch
Building Interpretable & Secure AI Systems using PyTorchBuilding Interpretable & Secure AI Systems using PyTorch
Building Interpretable & Secure AI Systems using PyTorchgeetachauhan
 
Using SWIG to Control, Prototype, and Debug C Programs with Python
Using SWIG to Control, Prototype, and Debug C Programs with PythonUsing SWIG to Control, Prototype, and Debug C Programs with Python
Using SWIG to Control, Prototype, and Debug C Programs with PythonDavid Beazley (Dabeaz LLC)
 
00_pytorch_and_deep_learning_fundamentals.pdf
00_pytorch_and_deep_learning_fundamentals.pdf00_pytorch_and_deep_learning_fundamentals.pdf
00_pytorch_and_deep_learning_fundamentals.pdfeanyang7
 
Everybody be cool, this is a roppery!
Everybody be cool, this is a roppery!Everybody be cool, this is a roppery!
Everybody be cool, this is a roppery!zynamics GmbH
 

Similaire à Data Structures and Algorithms (20)

Parallel Processing
Parallel ProcessingParallel Processing
Parallel Processing
 
Data structures using C
Data structures using CData structures using C
Data structures using C
 
Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02Ds12 140715025807-phpapp02
Ds12 140715025807-phpapp02
 
Colored petri nets theory and applications
Colored petri nets theory and applicationsColored petri nets theory and applications
Colored petri nets theory and applications
 
MachinaFiesta: A Vision into Machine Learning 🚀
MachinaFiesta: A Vision into Machine Learning 🚀MachinaFiesta: A Vision into Machine Learning 🚀
MachinaFiesta: A Vision into Machine Learning 🚀
 
Data wrangling week 10
Data wrangling week 10Data wrangling week 10
Data wrangling week 10
 
Adsa lab manual
Adsa lab manualAdsa lab manual
Adsa lab manual
 
Matlab for a computational PhD
Matlab for a computational PhDMatlab for a computational PhD
Matlab for a computational PhD
 
V2.0 open power ai virtual university deep learning and ai introduction
V2.0 open power ai virtual university   deep learning and ai introductionV2.0 open power ai virtual university   deep learning and ai introduction
V2.0 open power ai virtual university deep learning and ai introduction
 
Class5_DataloggerProgrammingArduino.pptx
Class5_DataloggerProgrammingArduino.pptxClass5_DataloggerProgrammingArduino.pptx
Class5_DataloggerProgrammingArduino.pptx
 
TeelTech - Advancing Mobile Device Forensics (online version)
TeelTech - Advancing Mobile Device Forensics (online version)TeelTech - Advancing Mobile Device Forensics (online version)
TeelTech - Advancing Mobile Device Forensics (online version)
 
MIT6_0001F16_Lec1.pdf
MIT6_0001F16_Lec1.pdfMIT6_0001F16_Lec1.pdf
MIT6_0001F16_Lec1.pdf
 
Decision tree lecture 3
Decision tree lecture 3Decision tree lecture 3
Decision tree lecture 3
 
Creating Profiling Tools to Analyze and Optimize FiPy Presentation
Creating Profiling Tools to Analyze and Optimize FiPy PresentationCreating Profiling Tools to Analyze and Optimize FiPy Presentation
Creating Profiling Tools to Analyze and Optimize FiPy Presentation
 
How to not fail at security data analytics (by CxOSidekick)
How to not fail at security data analytics (by CxOSidekick)How to not fail at security data analytics (by CxOSidekick)
How to not fail at security data analytics (by CxOSidekick)
 
Building Interpretable & Secure AI Systems using PyTorch
Building Interpretable & Secure AI Systems using PyTorchBuilding Interpretable & Secure AI Systems using PyTorch
Building Interpretable & Secure AI Systems using PyTorch
 
Using SWIG to Control, Prototype, and Debug C Programs with Python
Using SWIG to Control, Prototype, and Debug C Programs with PythonUsing SWIG to Control, Prototype, and Debug C Programs with Python
Using SWIG to Control, Prototype, and Debug C Programs with Python
 
00_pytorch_and_deep_learning_fundamentals.pdf
00_pytorch_and_deep_learning_fundamentals.pdf00_pytorch_and_deep_learning_fundamentals.pdf
00_pytorch_and_deep_learning_fundamentals.pdf
 
Everybody be cool, this is a roppery!
Everybody be cool, this is a roppery!Everybody be cool, this is a roppery!
Everybody be cool, this is a roppery!
 
Decision tree
Decision treeDecision tree
Decision tree
 

Dernier

ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxiammrhaywood
 
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxMusic 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxleah joy valeriano
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYKayeClaireEstoconing
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Mark Reed
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxAshokKarra1
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parentsnavabharathschool99
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptxmary850239
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfPatidar M
 
4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptxmary850239
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfErwinPantujan2
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designMIPLM
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...Postal Advocate Inc.
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management systemChristalin Nelson
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Celine George
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)lakshayb543
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationRosabel UA
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management SystemChristalin Nelson
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...JojoEDelaCruz
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...JhezDiaz1
 

Dernier (20)

ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptxECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
ECONOMIC CONTEXT - PAPER 1 Q3: NEWSPAPERS.pptx
 
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptxMusic 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
Music 9 - 4th quarter - Vocal Music of the Romantic Period.pptx
 
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITYISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
ISYU TUNGKOL SA SEKSWLADIDA (ISSUE ABOUT SEXUALITY
 
Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)Influencing policy (training slides from Fast Track Impact)
Influencing policy (training slides from Fast Track Impact)
 
Karra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptxKarra SKD Conference Presentation Revised.pptx
Karra SKD Conference Presentation Revised.pptx
 
Choosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for ParentsChoosing the Right CBSE School A Comprehensive Guide for Parents
Choosing the Right CBSE School A Comprehensive Guide for Parents
 
4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx4.18.24 Movement Legacies, Reflection, and Review.pptx
4.18.24 Movement Legacies, Reflection, and Review.pptx
 
Active Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdfActive Learning Strategies (in short ALS).pdf
Active Learning Strategies (in short ALS).pdf
 
4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx4.16.24 Poverty and Precarity--Desmond.pptx
4.16.24 Poverty and Precarity--Desmond.pptx
 
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdfVirtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
Virtual-Orientation-on-the-Administration-of-NATG12-NATG6-and-ELLNA.pdf
 
Keynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-designKeynote by Prof. Wurzer at Nordex about IP-design
Keynote by Prof. Wurzer at Nordex about IP-design
 
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
USPS® Forced Meter Migration - How to Know if Your Postage Meter Will Soon be...
 
Concurrency Control in Database Management system
Concurrency Control in Database Management systemConcurrency Control in Database Management system
Concurrency Control in Database Management system
 
Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17Difference Between Search & Browse Methods in Odoo 17
Difference Between Search & Browse Methods in Odoo 17
 
Raw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptxRaw materials used in Herbal Cosmetics.pptx
Raw materials used in Herbal Cosmetics.pptx
 
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
Visit to a blind student's school🧑‍🦯🧑‍🦯(community medicine)
 
Activity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translationActivity 2-unit 2-update 2024. English translation
Activity 2-unit 2-update 2024. English translation
 
Transaction Management in Database Management System
Transaction Management in Database Management SystemTransaction Management in Database Management System
Transaction Management in Database Management System
 
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
ENG 5 Q4 WEEk 1 DAY 1 Restate sentences heard in one’s own words. Use appropr...
 
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
ENGLISH 7_Q4_LESSON 2_ Employing a Variety of Strategies for Effective Interp...
 

Data Structures and Algorithms

  • 1. Data Structures & Algorithms Dr. Pierre Vignéras http://www.vigneras.name/pierre This work is licensed under a Creative Commons Attribution- Share Alike 2.0 France. See http://creativecommons.org/licenses/by-sa/2.0/fr/ for details Dr. Pierre Vignéras 1
  • 2. Class, Quiz & Exam Rules ● No entry after the first 10 minutes  ● No exit before the end of the class ● Unannounced Quiz – After (almost) each end of a chapter/concept – At the beginning of a class – Fixed timing (you may suffer if you arrive late)  – Spread Out (do it quickly to save your time) – Papers that are not strictly in front of you will be  considered as done Rules – Cheaters will get '­1' mark Dr. Pierre Vignéras 2
  • 3. Outline I.  Introduction/Definitions II.  Arrays III.  Stacks & Queues I.  Linked List Standard Data Structures I.  Trees II.  Priority Queues III.  Sorting IV.  Searching Standard Algorithms V.  Balanced Trees VI.  Hashing Outline VII.   Graphs VIII.  Graphs Algorithms Standard Dr. Pierre Vignéras 3
  • 4. Introduction/Definitions Outline Dr. Pierre Vignéras 4
  • 5. Introduction/Definitions I. Introduction/Definitions ● Data ● Algorithms ● Performance Analysis Dr. Pierre Vignéras 5
  • 6. Data I. Introduction/Definitions ● VCR Example : interactions through buttons  on the control panel (PLAY, FFW, REW, REC);  – we can't interact with the internal circuitery, the  internal repesentation is hidden from the end­ user ==> Encapsulation – Instructions Manual tells only what  the VCR is  supposed to do, not how it is implemented ==>  Abstraction Dr. Pierre Vignéras 6
  • 7. Data I. Introduction/Definitions ● Data Encapsulation or Information Hiding – is the concealing of the implementation details of a  data object from the outside world. ● Data Abstraction – is the separation between the specification of a  data object and its implementation ● Data Type – is a collection of objects and a set of operations  that act on those objects Dr. Pierre Vignéras 7
  • 8. Data I. Introduction/Definitions ● Example: C++ fundamental data types – objects type: char, int, float and double – operations: +,/,­,*,<,>,=,==,... – Modifiers ● short, long: amount of storage (8, 16, 32, 64 bits) ● signed, unsigned: interpretation of the most  significant bit of an integer Dr. Pierre Vignéras 8
  • 9. Data I. Introduction/Definitions ● Pointers: couple (a,t) where: – a : is an integer ( a word) representing a memory  cell address – t : is a type that gives the interpretation of the  memory cells that starts from address a &c &p &pi char c = 10; 10 ? ? ? void* p = &c; 10 ? ? ? &c int* pi = (int*) p; 10 ? ? ? &c &c *pi = 10; 10 0 0 0 &c &c Dr. Pierre Vignéras 9
  • 10. Algorithms I. Introduction/Definitions ● An algorithm is a finite set of instructions  that, if followed, accomplishes a particular  task.  (1)Input: Zero or more quantities are externally supplied (2)Output: At least one quantity is produced (3)Definiteness: Each instruction is clear and unambiguous (4)Finiteness: If we trace out the instructions of an algorithm, then,  for all cases, the algorithm terminates after a finite number of steps (5)Effectiveness: every instruction must be basic enough to be  carried out, in principle, by a person using only  pencil and paper. It  is not enough that each operation be definite as in (3): it also must  be feasible. Dr. Pierre Vignéras 10
  • 11. Algorithms I. Introduction/Definitions ● How to express algorithm? Many solutions – Natural language: must be well defined and  unambiguous (what about portability?) – Graphic representations: flowcharts (only for small  and simple algorithms) – Programming languages: low level implementation  must be removed and replaced by natural language Dr. Pierre Vignéras 11
  • 12. Recursive Algorithms I. Introduction/Definitions ● Limitation of recursion (only factorials,  ackermann, fibonacci, ...)? ● A tool for theorician? ● Theorem: ''Any program that can be written  using assignment, the if­else statement and the  while statement can also be written using  assignment, if­else and recursion.'' ● Example: Fibonacci – f(0)=f(1)=1 – f(n) = f(n­1) + f(n­2) Dr. Pierre Vignéras 12
  • 13. Performance Analysis I. Introduction/Definitions ● How to judge a program? – Does it do what we want it to do? – Does it work correctly according to original  specifications of the task? – Is there documentation that describes how to use it  and how it works? – Are the functions created in such way that they  perform logical subfonctions? – Is the code readable? Dr. Pierre Vignéras 13
  • 14. Performance Analysis I. Introduction/Definitions ● From a performance point of view, we define  two criteria: – Space complexity: the amount of memory needed  by a program to run to completion – Time complexity: the amount of computer time  needed by a program to run to completion ● Two phases in performance evaluation – performance analysis: a priori estimates; – performance measurement: a posteriori testing. Dr. Pierre Vignéras 14
  • 15. Space Complexity I. Introduction/Definitions ● The space needed by a program is seen to be  the sum of two components – fixed part: independant of the characteristics (e.g.  number, size) of the inputs and outputs ● instruction space (space of the code itself) ● space for constants, ... – variable part: dependant on the particular problem  instance being solved, hence on the inputs and  outputs characteristics ● variables whose siez depends on inputs/outputs,  ● recursion stacks (when it depends on inputs/outputs) Dr. Pierre Vignéras 15
  • 16. Space Complexity I. Introduction/Definitions ● S(P)=c+SP – c is constant, it represents the fixed part, it is not  very interesting! – SP represents the variable part. Focus on it! ● Decide which characteristics to use to measure  space requirements – Problem specific! Dr. Pierre Vignéras 16
  • 17. Space Complexity Sum example I. Introduction/Definitions int sum(int* a, int n) { int s = 0; for (int i = 0; i < n; i++) { s += a[i]; } return s; } ● Instance Characteristic: n ● How many space does it need? ● What would be the space required is the array is passed  by copy? Dr. Pierre Vignéras 17
  • 18. Time Complexity I. Introduction/Definitions ● T(P) = c + TP – C is a constant representing the compile time ● Do not take it into account!  – TP represents the runtime, focus on it!   ● Very hard to evaluate TP exactly! – Suppose the compiler is well known TP(n) = Ca.Add(n) + Cm.Mul(n)+... – Time needed for addition, multiplication often  depends on the actual numbers Dr. Pierre Vignéras 18
  • 19. Time Complexity I. Introduction/Definitions ● Try to guess the time complexity  experimentaly – program is typed, compiled and run on a specific  machine. Execution time is physically clocked,  – TP(n) is measured... – But, the value measured is inaccurate (multiuser  systems, system load, number of running  programs, ...) ● Consider only steps Dr. Pierre Vignéras 19
  • 20. Steps I. Introduction/Definitions ● A program step is loosely defined as a  syntactically or semantically meaningful  segment of a program that has an execution  time that is independent of the instance  characteristics ● Example: return (1+2+4)/(5+6+7)*a; is a single step if a is independent of the  instance characteristics. ● How to count steps? Dr. Pierre Vignéras 20
  • 21. Program Modification I. Introduction/Definitions ● Introduce a new global variable in the original  program that count the number of steps. ● Example : Sum Dr. Pierre Vignéras 21
  • 22. Using a Step Table I. Introduction/Definitions ● Create a table in which, for each line of code,  you write the number of steps per execution  and the frequency each statement is executed. ● Example : Sum Dr. Pierre Vignéras 22
  • 23. Limitations of Exact Evaluation Perfomance I. Introduction/Definitions ● Majority of real cases are not so simple – Time complexity may not depend only on the  number of inputs/outputs but also on the value of  one or many of them ● Example: int search(int* a, int n, int x); – Instance characteristic: n – TP(n) depends on a, n and x !! ● Consider only three cases: – Best­case: minimum number of steps required – Worst­case: maximum number of steps possible – Average step count: guess ! Dr. Pierre Vignéras 23
  • 24. Rough Comparisons I. Introduction/Definitions ● Exact step count inaccurate anyway (what is a step?) ● Having a rough estimate is usually sufficient for comparison (but inexact) !! – A1 performs in c1.n²+c2.n – A2 performs in c3.n – Which performs best? Dr. Pierre Vignéras 24
  • 25. Asymptotic Notation (O) I. Introduction/Definitions ● f(n)=O(g(n)) iff there exist c > 0 and n0 > 0 such that f(n) ≤ c.g(n) for all n, n ≥ n0 – 3n+2? 10n²+4n+2? ● O(1): constant time ● O(log(n)): logarithmic time ● O(n): linear time ● O(n.log(n)): almost linear time ● O(n²): quadratic time ● O(n3): cubic time ● O(2n): exponential time – g(n) is an upper bound, find the smallest one! Dr. Pierre Vignéras 25
  • 26. Asymptotic Notation (Ω) I. Introduction/Definitions ● f(n)=Ω(n) iff there exist c > 0 and n0 > 0 such that f(n) ≥ c.g(n) for all n, n ≥ n0 ) – 3n+2? 10n²+4n+2? ● g(n) is a lower bound, find the largest one! ● Theorem: if f(n)=amnm+...+a1n+a0 – f(n) = O(nm) – f(n) = Ω(nm) if am > 0 Dr. Pierre Vignéras 26
  • 27. Asymptotic Notation (Θ) I. Introduction/Definitions ● f(n)=Θ(n) iff there exist c1 > 0, c2 > 0, and n0 > 0 such that c1.g(n) ≤ f(n) ≤ c2.g(n) for all n, n ≥ n0 – 3n+2? 10n²+4n+2? ● g(n) is both an upper and lower bound of f(n) ● Theorem: if f(n)=amnm+...+a1n+a0 – f(n) = Θ(nm) if am > 0 ● Example: sum Dr. Pierre Vignéras 27
  • 28. Practical Complexities I. Introduction/Definitions log(n) n n.log(n) n² n 3 2n 0 1 0 1 1 2 1 2 2 4 8 4 2 4 8 16 64 16 3 8 24 64 512 256 4 16 64 256 4096 65536 5 32 160 1024 32768 4294967296 Dr. Pierre Vignéras 28
  • 29. Practical Complexities I. Introduction/Definitions Graph Overview 1000 900 800 700 log(n) n 600 n.log(n) n² 500 n3 2n 400 300 200 100 0 Dr. Pierre Vignéras 29
  • 30. Performance Measurement I. Introduction/Definitions ● Depends on several factors ● compiler used ● architecture (processor, memory, disk, cache, ...) ● operating system ● load (number of users, number of running processus, etc.) ● Hard to reproduce ● Averaging many experiments (10 and more) ● Which values of n? Higher n ==> conformance to asymptotic analysis. Dr. Pierre Vignéras 30
  • 31. Performance Measurement I. Introduction/Definitions ● Needs a function time() – Accuracy? ● To time a short event, it is necessary to repeat it several times and divide the total time for the event by the number of repetitions. ● What are we measuring? – best case, worst case or average? ● Suitable test data need to be generated ● Not always easy. Use random data if possible. Use a good random number generator. Dr. Pierre Vignéras 31
  • 32. Arrays Outline Dr. Pierre Vignéras 32
  • 33. Arrays ● Definition – A mapping <index, element> ● Operations – Creation/Deletion – Getting a value – Setting a value ● Random Access Order II. Arrays ● get(i): 'x =a[i]' ● set(i): 'a[i]=x' – Warning: index bounds? Dr. Pierre Vignéras 33
  • 34. Array Data Structure Interface (C language) --------- C File: array.h ------- typedef struct array* array; extern array array_new(int size); extern void array_delete(array a); extern void* array_get(array a, int i); extern void array_set(array a, int i, void* v); II. Arrays Dr. Pierre Vignéras 34
  • 35. Using Arrays ● Ordered, linear list – Days of the week: (Sunday,... Saturday) – Values in a deck of cards (Ace, 2, ...,10, Jack, Queen,  King) – Years France won the Cricket World Cup: '( )' ● an empty list is still a list! ● Operations on list II. Arrays – length, read from left (or right to left) – Get/Set the i th element (0≤ i <n) – Insert/Delete at the i th position (0≤ i <n)  Dr. Pierre Vignéras 35
  • 36. Polynomial Representation ● How to represent efficiently (space, time) A(x)=3x²+2x+4, B(x)=x100+1 ● Operations: A x=∑ a i . x i B  x=∑ b j x j A xB  x =∑ a ib i x i II. Arrays A x . B  x =∑  ai . x i . ∑ b j . x j  Dr. Pierre Vignéras 36
  • 37. Polynomial Representation #1 struct poly { int degree; // degree < MaxDegree !! float coef[MaxDegree + 1]; }; // MaxDegree: constant ● Very simple, inefficient ! – Consider when degree << MaxDegree – Complexity in (unused) space ?! II. Arrays Dr. Pierre Vignéras 37
  • 38. Polynomial Representation #2 struct poly { int degree; // degree < MaxDegree !! float* coef; }; typedef struct poly* poly; poly poly_create(int d) { poly p = malloc(sizeof(*poly)); p->degree = d; p->coef = malloc(d*sizeof(*p->coef)); return p; } Still inefficient (sparse polynom): B(x)=x100+1 II. Arrays ● Dr. Pierre Vignéras 38
  • 39. Polynomial Representation #3 struct monom { int degree; float coef; }; static struct monom GlobalArray[MaxTerms]; static int free; struct poly { int start, end; }; ● A(x)=3x²+2x+4, B(x)=x100+1 representations II. Arrays Dr. Pierre Vignéras 39
  • 40. Polynomial Representations ● Which representation is the best – Space complexity? – Time complexity? – May depend on polynomials used (sparse) ● Global (static) variable representing maximum  instances of a data structure is bad design – Dynamism is the key!! Provide it! II. Arrays – Allocate an array of monoms for each polynomial ● Space complexity? ● Time complexity (addition for example)? Dr. Pierre Vignéras 40
  • 41. Multidimensional Arrays ● Memory is a single array of word cell ● Any data has a word array internal  representation  ● Represents explicitly multidimensional array  into a single array – Example: 2 dimensional array ● A[][]: dimension (n,p) (row, columns) A[i][j] ­­> a[k], k = i*p+j II. Arrays ● Dr. Pierre Vignéras 41
  • 42. Strings ● Internal string representations – arrays of « char » – size of the string?  ● field of a structure (Java) ● s[0] (Pascal) ● Ends by a special character (C language: '0') ● Operations length(), replace(),  II. Arrays – – concat(), delete() – find()   Dr. Pierre Vignéras 42
  • 43. String Pattern Matching Simple Algorithm ● Two strings 's' and 'p' ● 'p' is a pattern to be searched for in 's' ● int find(char* s, char* p) – returns ­1 if 'p' is empty or if 'p' is not a substring  of 's' – returns index 'i' such that 'p' matches the substring  of 's' at position 'i' otherwise Simple Algorithm II. Arrays ● Dr. Pierre Vignéras 43
  • 44. String Pattern Matching Simple Algorithm ● Improvement: while(i<= |s|­|p|)  ● Space Complexity: O(1) ● Time Complexity (comparisons):  – Best case: O(|p|) – Worst case: O((|s|­|p|).|p|) – Common case:  ● |s| >> |p|, Complexity ~ Ω (|s|) (Lower bound) II. Arrays Dr. Pierre Vignéras 44
  • 45. String Pattern Matching Knuth, Morris, Pratt ● Keeping memory ● S = 100101 ● P = 100000 – On a failure of length j, where shall we start our  next comparison in S? – We know that j characters of S match P – None of the j­1 other characters of S can match the  first character of P II. Arrays ● Start comparing the jth character after the  current one in S Dr. Pierre Vignéras 45
  • 46. String Pattern Matching Knuth, Morris, Pratt ● Definition – Alphabet A of symbols (characters) – String 'x', where 'x[i]' is the 'i'th character of 'x' – (Proper) Prefix, (Proper) Suffix, Border ● Example: x=abacab – Proper Prefix: (), a, ab, aba, abac, abaca – Proper Suffix: (), b, ab, cab, acab, bacab II. Arrays – Border: ( ), ab ­­> |( )|=0, |ab|=2 ● ( ) is always a border of any non empty string, it  has no border itself Dr. Pierre Vignéras 46
  • 47. String Pattern Matching Knuth, Morris, Pratt ● Example: 0 1 2 3 4 5 6 7 8 9 a b c a b c a b d a b c a b d a b c a b d – Pattern shifted by 3, resuming at 5 – Shift distance determined by the widest border of  the matching prefix of the pattern II. Arrays ● matching prefix: abcab, w = 5, ● widest border: ab, w = 2 ● Shift distance: d = 5­2 = 3  Dr. Pierre Vignéras 47
  • 48. String Pattern Matching Knuth, Morris, Pratt ● Two phases ● Preprocessing phase:  – compute the width of the widest border of each  prefix of the pattern ● Searching phase – compute the shift distance according to the prefix  that has matched II. Arrays Dr. Pierre Vignéras 48
  • 49. String Pattern Matching Knuth, Morris, Pratt ● Preprocessing phase: compute b[], |b|=|p|+1 ● b[i] = width of the widest border of the prefix   of length 'i' of the pattern (i=0,...,|p|). ● b[0] = ­1 (the prefix '()' of length 'i=0' has no  border) i widest border prefix of size i II. Arrays wb b[i] = |wb| x Dr. Pierre Vignéras 49
  • 50. String Pattern Matching Knuth, Morris, Pratt ● Computing b[] 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7 8 9 10 a b a b a a a b c a b c a c a b - 0 0 1 2 3 1 - 0 0 0 1 2 3 4 0 1 2 0 1 2 3 4 5 6 7 8 a b a b b a a a II. Arrays - 0 0 1 2 0 1 1 1 Dr. Pierre Vignéras 50
  • 51. String Pattern Matching Knuth, Morris, Pratt ● Theorem: –  if 'r', 's' are borders of 'x', |r|<|s|, – then 'r' is a border of 's' – if 's' is the widest border of 'x', the next widest  border 'r' of x, is the widest border of 's' II. Arrays r r r r s s s x Dr. Pierre Vignéras 51
  • 52. String Pattern Matching Knuth, Morris, Pratt ● Def: 'x': string, 'a': character.  ● A border 'r' of 'x' can be extended by 'a' if 'ra'  is a border of 'xa' j a a r r x II. Arrays A border 'r', of width 'j' of 'x' can be extended by 'a' if 'x[j]=a' Dr. Pierre Vignéras 52
  • 53. String Pattern Matching Knuth, Morris, Pratt ● Suppose we already know b[0],...,b[i] – To compute b[i+1] we search a border of width j<i  of the prefix 'p[0]...p[i­1]' that can be extended by  character p[i] – This happens when p[b[j]]=p[i] – If this is the case, then b[i+1]=b[j]+1 – The border list is in decreasing order II. Arrays ● j = b[i], j = b[b[i]], ... b[j] i Dr. Pierre Vignéras 53
  • 54. String Pattern Matching Knuth, Morris, Pratt ● Algorithm for the creation of the array 'b[]' void kmpPreProcess(char p[]) { int i = 0, j = -1; b[0] = -1; // Array allocated dynamically and returned while (i < |p|) { while (j >= 0 && // j == -1 ==> STOP !! p[i] != p[j]) { // mismatch j = b[j]; // Find the widest border } i++;j++; b[i]=j; // b[i+1] = b[j]+1 II. Arrays } } Dr. Pierre Vignéras 54
  • 55. String Pattern Matching Knuth, Morris, Pratt ● Searching algorithm  void kmpSearch(char t[], char p[]) { int i = 0, j = 0; while (i < |t|) { while (j >= 0 && // j == -1 ==> STOP !! t[i] != p[j]) { // mismatch j = b[j]; // Shift the pattern!! } i++;j++; if (j == |p|) return i – j; } II. Arrays return -1; } Dr. Pierre Vignéras 55
  • 56. String Pattern Matching Knuth, Morris, Pratt Compare i b[j] j Shift b[j] Matching prefix size = 4, 0 1 2 3 4 5 6 7 8 9 II. Arrays widest border = 2, a b a b b a b a a shift = 4-2 = 2, a b a b a c a b a b a c Matching prefix size = 2, a b a b a c widest border = 0, shift = 2 - 0 = 2 Dr. Pierre Vignéras 56
  • 57. KMP Algorithm Complexities ● Space – The array b[] => O(|p|+1) ● Time: how many characters comparisons  – PreProcessing: focus on the inner while loop ● decreases 'j' by at least '1' until 'j = ­1' (b[j]<j) ● 'j' is increased exactly '|p|' times by the outer loop ● => 'j' cannot be decreased more than '|p|' times: O(|p|) Search  II. Arrays – ● Same argument: O(|s|)  – Total: O(|s|+|p|) Dr. Pierre Vignéras 57
  • 58. Stacks & Queues Outline Dr. Pierre Vignéras 58
  • 59. Stacks and Queues ● Widely used data structures ● Ordered List of element III. Stacks & Queues ● Easy to implement ● Easy to use Dr. Pierre Vignéras 59
  • 60. Stacks Insert Delete ● S=(a0,...,an­1) –  a0 is the bottom of the stack Top a3 III. Stacks & Queues a2 – an­1is the top of the stack a1 Bottom a0 – ai is on top of ai­1 (0<i<n) ● Insertions and deletions are made at the top ● Last In First Out (LIFO) list – Example: stack of plates Dr. Pierre Vignéras 60
  • 61. Stack Interface ● Basic operations – add() also called push() III. Stacks & Queues – delete() also called pop() – isEmpty() ● Optional Operation – isFull() (when the stack as a maximum capacity) ● Basic implementation using an array – How to prevent a stack to become full? Dr. Pierre Vignéras 61
  • 62. Stack Use: evaluation of expression ● 6+(((5+4)*(3*2))+1) = ? 4 + 5 – push(6),push(5),push(4)  6 2 III. Stacks & Queues 9 * – push(pop()+pop()) 6 3 9 6 – push(3),push(2) 6 * 9 – push(pop()*pop()) 6 54 – push(pop()*pop()) 6 1 – push(1) 54 + 55 – push(pop()+pop()) 6 + 6 – push(pop()+pop()) 61 Dr. Pierre Vignéras 62
  • 63. Expression notation ● Infix  – operators are in­between their operands III. Stacks & Queues ● (3+2)*5 = 25  ­­> Needs parenthesis ● Postfix (HP calculators) – operators are after their operands ● 3 2 + 5 * = 25 ● Prefix – operators are before their operands ● * + 3 2 5 = 25 ● Order of operands is the same Dr. Pierre Vignéras 63
  • 64. Stack Use: Conversion from infix to postfix // Return the postfix notation of a fully bracketed // infix expression // ((2+3)*5) is ok, (2+3)*5 is not III. Stacks & Queues char* convert(char* s) { char* t = new char[|s|]; // |t| < |s| for (int i = j = 0; i < |s|; i++) { // i:s[], j:t[] if (s[i] == ')') t[j++] = pop(); else if (s[i] == '+') push(s[i]); else if (s[i] == '*') push(s[i]); else if (isDigit(s[i])) t[j++] = s[i]; } t[j] = '0'; return t; } Dr. Pierre Vignéras 64
  • 65. Evaluation of postfix expression // Evaluate a postfix expression such as 23+5* int compute(char* s) { // s is postfix int r = 0; III. Stacks & Queues for (int i = 0; i < |s|; i++) { if (s[i] == '+') push(pop() + pop()); else if (s[i] == '*') push(pop() * pop()); else if (isDigit(s[i])) push(valueOf(s[i])); } return pop(); } Dr. Pierre Vignéras 65
  • 66. Queues ● Q=(a0,...,an­1) –  a0 is the front of the queue III. Stacks & Queues Deletion Insertion – an­1is the rear of the queue a0 a1 a2 a3 a4 – ai is behind ai­1 (0<i<n) Front Rear ● Insertions take place at the rear ● Deletions take place at the front ● First In First Out (FIFO) list – Example: queue of persons Dr. Pierre Vignéras 66
  • 67. Queue Interface ● Basic operations – add() III. Stacks & Queues – delete() – isEmpty() ● Optional Operation – isFull() (when the queue as a maximum capacity) ● Basic implementation using an array – How to prevent a queue to become full? Dr. Pierre Vignéras 67
  • 68. Linked List Outline Dr. Pierre Vignéras 68
  • 69. Characteristics – Insertion and deletion of elements in constant time  O(1) ● Contrary to arrays (linear time O(n)) – Accessing an element is in linear time O(n) ● Contrary to arrays  (constant time O(1)) IV. Linked List – Composed of nodes where a node is: ● an element (int, double, whatever) ● a link to the next element in the list start node end L I S T Dr. Pierre Vignéras 69
  • 70. Operations Modification (LIST --> LOST) L O S T S Deletion (LOST --> LOT) IV. Linked List L O T F Insertion (LOT --> LOFT) L O T Dr. Pierre Vignéras 70
  • 71. Dynamic implementation ● Use a structure (or a class) to represent a node // Always use pointers alias typedef struct node* node; // 'node' == 'struct node*' typedef struct list* list; // 'list' == 'struct list*' struct node { char v; // the value of this element v node next; // the next node next IV. Linked List }; struct list { start v1 ? v1 v2 vn node start; end next next next next next node end; }; ? next Dr. Pierre Vignéras 71
  • 72. Dynamic Implementation ● Node creation node newNode(char v) { node n = malloc(sizeof(*n)); n->v = v; n->next = NULL; // Must be set by the caller. return n; } IV. Linked List – Write the deleteNode() function. ● List creation list newList() { list l = malloc(sizeof(*l)); l->end = newNode(0, NULL); // Value has no meaning l->end->next = end; // loop !! l->start = newNode(0, end); // Value has no meaning return l; } Dr. Pierre Vignéras 72
  • 73. Dynamic Implementation ● Insertion void insertAfter(list l, char v, node n) { node new = newNode(v, n->next); n->next = new; } ● Deletion void DeleteNext(list l, node n) { IV. Linked List node t = n->next; n->next = t->next; deleteNode(t); } ● Interface – Pass the list in argument even if unused  – Interface must be independent of implementations Dr. Pierre Vignéras 73
  • 74. Static implementation ● Using arrays – one array contains data,  – others contain next links. (multiple links on data) struct node{ char v; int next; 3 1 1 5 ? 6 2 IV. Linked List }; next 0 1 2 3 4 5 6 data t l ? i s struct list{ free = 4 int *next; start = 0 char *data; node end = 1 int free; }; #define START 0 I 5 i 6 #define END 1 Dr. Pierre Vignéras 74
  • 75. Static Implementation list newList() { int size = MAX + 2; // start & end list l = malloc(sizeof(*l)); l->next = malloc(size * sizeof(int)); l->data = malloc(size * sizeof(char)); l->next[START] = END; l->next[END] = START; l->free = 2; return l; IV. Linked List } void insertAfter(list l, char v, node n) { l->data[free] = v; l->next[free] = l->next[n->index]; l->next[n->index] = free++; } void deleteNext(list l, node n) { l->next[n->index] = l->next[l->next[n->index]]; } Dr. Pierre Vignéras 75
  • 76. Static Implementation ● How to handle free cells more efficiently? – 'free' is only incremented until it reached the array  size. – then, how to use cells that have been removed  from the list in the middle of the array IV. Linked List ● Use a 'free' list – Multiple list on the same data – This is how 'malloc()' and  'free()' actually works – This is also how the kernel works: memory is a (big)  array Dr. Pierre Vignéras 76
  • 77. Stack implementation using a (linked) list // Independent of the actual implementation of the list! struct stack { list l; }; stack newStack() { stack s = malloc(sizeof(*s)); s->l = newList(); } void push(stack s, char v) { IV. Linked List insertAfter(s->l, v, s->l->start); } char pop(stack s) { assert(!isEmpty(s->l)); // Write these 2 functions node top = getNextNode(s->l->start); char v = getNodeValue(top); deleteNext(s->l, s->l->start); return v; } Dr. Pierre Vignéras 77
  • 78. Double Linked List ● Problems of single linked list – moving only in one direction leads to problem on  deletion or searching ● the preceding node must be known ● Use two links per node (space complexity?) IV. Linked List struct node { char v; node *next, *prev; } ? v1 v2 vn ? next next next next next prev prev prev prev prev Dr. Pierre Vignéras 78
  • 79. Circular List ● Single Circular Linked List v1 ? v1 v2 vn next next next next next ● Double Circular Linked List IV. Linked List prev ? next v1 v2 vn next next next prev prev prev Dr. Pierre Vignéras 79
  • 80. Trees Outline Dr. Pierre Vignéras 80
  • 81. Glossary ● Tree – A non­empty finite set of nodes and edges that  follow some conditions ● Node  – Simple object that contains some data ● Edge –  A link between two nodes ● Path V. Trees – A list of distinct nodes in which 2 successives  nodes are linked by an edge Dr. Pierre Vignéras 81
  • 82. Glossary If more than one path (or T Root no path at all), exist between the root and any other node, then it is not a tree (but a graph) Node R E E Edge V. Trees E A X M P E {R, T, E, M, L} is the path from R to L L Dr. Pierre Vignéras 82
  • 83. Glossary ● M is the father of L If N is the number of nodes, ● R is the child of T (N-1) is the number of edges ● {A, X} and {M, P, E} are siblings Level ● Degree(Node) T Root 1 ● number of children ● deg(T) = 3, deg(M) = 1 R E E 2 V. Trees Leaf Node E A X M P E 3 ● Degree(Tree) ● maximum degree of its node ● degree = 3 L Depth: 4 4 Dr. Pierre Vignéras 83
  • 84. Representations ● Depends on the needs – If you just need to go from a child to its parent, use  two arrays a[k] = value of the node k (e.g. a character) father[k] = index of father of node a[k] a[father[k]]  = value of the father of node k k 0 1 2 3 4 5 6 7 8 9 10 V. Trees a[k] T R E E E X A M P L E father[k] 0 0 0 0 1 2 2 3 3 7 3 Dr. Pierre Vignéras 84
  • 85. Representations ● If you need to go down, from parents to  children – use (dynamic) linked lists to keep track of children – one brother list – one children list T R E E V. Trees E A X M P E Brother List Children List L Dr. Pierre Vignéras 85
  • 86. Representations T T R R E E E E E A X M P E A E L X M Rotate L P V. Trees Any tree can be converted E into a 2-degree tree. Dr. Pierre Vignéras 86
  • 87. Binary Tree ● 2­degree tree are so important that they have a  special name: Binary Tree ● A binary tree is a finite set of nodes that is  either empty or as a root and two disjoint  binary trees called left subtree and right  subtree. ● Recursion in the definition ● Algorithm on binary trees is often expressed  V. Trees recursively Dr. Pierre Vignéras 87
  • 88. Binary Tree Characteristics ● Maximum number of nodes at level 'i': 2(i­1) ● Maximum number of nodes in a binary tree of  k depth 'k': (2 ­1) – Proof by induction ● A full binary tree of depth 'k' is a binary tree of  depth 'k' having (2k­1) node ● A binary tree with  'n' nodes and depth 'k' is  complete iff its node correspond to the nodes  V. Trees numbered from '1' to 'n' in the full binary tree  of depth 'k'. Dr. Pierre Vignéras 88
  • 89. Full and Complete Binary Trees 1 2 3 Complete 4 5 6 7 8 9 10 11 12 13 14 15 Full V. Trees Height of a complete binary tree with 'n' nodes: ⌈lg(n+1)⌉ Normal Dr. Pierre Vignéras 89
  • 90. Representations: array ● If you now the number of nodes 'n', you may  use an array 't' of width '(n+1)' – Parent(i) = t[ceil(i/2)], i != 1; If (i == 1), i is the root  node and has no parent. – LeftChild(i) = t[2.i] if (2*i <= n); If (2*i > n), i has no  left child. – RightChild(i) = t[2.i+1] if (2.i+1<= n); If (2.i+1>n), i  has no right child. V. Trees ● Ideal for complete trees ● Waste of space for miscellaneous trees (skewed  trees) Dr. Pierre Vignéras 90
  • 91. Representations: array Examples k 0123456 7 S a[k] - S OM - E - T O M E T S k 0123456 7 O a[k] - SO - T - - - T S V. Trees k 0123456 7 O M a[k] - S OMP E L - P E L Dr. Pierre Vignéras 91
  • 92. Representations: Linked ● Use pointers to represents left and right childs struct node{ char v; node left, right; }; struct tree{ node root; } Exercice: write the newNode() and newTree() function! left v1 right V. Trees left v2l right left v2r right left v3ll right left v3lr right left v3rl right left v3rr right Dr. Pierre Vignéras 92
  • 93. Binary Tree Traversal ● Visit each node of a tree exactly once – On visit, perform an operation on the data ● Convention: always visit left before right ●  In order: LVR (recursive) – move Left, Visit the node, move Right ● Pre order: VLR (recursive) – Visit the node, move Left, move Right Post order: LRV ­> Guess! (recursive) V. Trees ● ● Level order: visit by level (non­recursive) Dr. Pierre Vignéras 93
  • 94. Binary Tree Traversal Examples 6+(((5+4)*(3*2))+1) + – In Order:  6+5+5*3*2+1 6 + – Pre Order: + 6 + * + 5 4 * 3 2 1 * 1 – Post Order: 6 5 4 + 3 2 * * 1 + +  + * – Level Order: V. Trees + 6 + * 1 + * 5 4 3 2 5 4 3 2 Dr. Pierre Vignéras 94
  • 95. Binary Tree Traversal Implementations void inOrder(node root) { // implicit use of a stack if (root == NULL) return; inOrder(root->left); process(root->v); // Do something with the value inOrder(root->right); } void preOrder(node root) { // implicit use of a stack if (root == NULL) return; process(root->v); // Do something with the value preOrder(root->left); preOrder(root->right); V. Trees } Exercice 1: write postOrder()! Dr. Pierre Vignéras 95
  • 96. Binary Tree Traversal Non-recursive implementations void inOrder(node n) { stack s = newStack(); // needs a stack while (1) { // Infinite loop while (n != NULL) { // Push n on the (top of the) stack push(n); n = n->left; // Move down on left child } if (isEmpty(s)) break; // Nothing else to do n = pop(s); // pop the last inserted child process(n); // Do something with the node n = n->right; // Move right then V. Trees } } Exercice 1 (easy): write preOrder() non-recursive version Exercice 2 (difficult): write postOrder() Dr. Pierre Vignéras 96
  • 97. Binary Tree Traversal Implementations void levelOrder(node root) { node n = root; while (n!= NULL) { process(n); if (n->left != NULL) addQueue(n->left); if (n->right != NULL) addQueue(n->right); n=deleteQueue(); } } // No need of a stack. V. Trees // Needs a queue. Dr. Pierre Vignéras 97
  • 98. Priority Queues Outline Dr. Pierre Vignéras 98
  • 99. Definition ● A max (resp. lin) priority queue is a queue that  provides a deleteMax()  (resp.  deleteMin())operation. VI. Priority Queues – each element in the queue has: ● a value ● a priority that is called a key ● The deleteMax()  (resp. deleteMin()) operation  delete the element in the queue  with the maximal priority (resp. minimal)  instead of the first inserted one as with the  delete() operation of ordinary queues (FIFO). Dr. Pierre Vignéras 99
  • 100. Priority Queues Basic Implementations ● Using a non­ordered list – insertion() in constant time: O(1) – deleteMax() in linear time: O(n) VI. Priority Queues ● Using an ordered­list – insertion() in linear time: O(n) – deleteMax() in constant time: O(1) Dr. Pierre Vignéras 100
  • 101. {max, min}-Heap ● A max (min) tree is a tree in which the key  value in each node is no smaller (larger) than  the key values in its children (if any) VI. Priority Queues ● A max heap is a complete binary tree that is  also a max tree  ● A min heap is a  complete binary tree that is  also a min tree ● The root of a max (min) heap is the largest  (smallest) key in the tree ● Complete binary tree: use an array for storage Dr. Pierre Vignéras 101
  • 102. Max-Heap Examples 9 5 6 6 6 5 3 2 9 5 9 5 VI. Priority Queues 1 3 2 1 1 3 2 1 2 max-heaps complete-binary tree binary-tree 1 9 9 1 2 3 6 3 5 6 5 3 4 4 5 6 7 1 2 1 2 5 7 9 8 9 10 11 12 13 14 15 max-tree max-tree (not-binary) (not-complete) min-heaps Dr. Pierre Vignéras 102
  • 103. Heap implementation struct element { char value; int key; } struct heap { VI. Priority Queues element *a; // backed by an array int n; // size of the tree }; heap newHeap() { heap h = malloc(sizeof(*h)); h->n = 0; // Empty h->a = malloc(MAX_SIZE*sizeof(*a)); return h; } // Exercice: write the freeHeap() function Dr. Pierre Vignéras 103
  • 104. insert() Implementation 5 5 5 7 insert(7) max heap? max heap? 3 2 3 2 7 2 5 2 VI. Priority Queues 1 1 7 1 3 1 3 void insert(heap h, element e) { assert(!heap_full(h))); // Implement this function n++; // increase the size of the heap int i = n; // start from the last 'node' in the tree while(1) { // infinite loop if (i == 1) break; // We have reached the root element father = h->a[i/2]; if (e.key <= father.key) break; // Position found at 'i' h->a[i] = h->a[i/2]; // Move the value from parent to 'i' i = i/2; // Next insertion point is the father } h->a[i] = e; // Insert the element at its right position } Dr. Pierre Vignéras 104
  • 105. deleteMax() Implementation 9 2 7 7 deleteMax() max heap? max heap? 7 5 7 5 2 5 6 5 6 2 2 VI. Priority Queues 6 6 element deleteMax(heap h) { assert(!heap_empty(h))); // Implement this function element m = h->a[1], // the element to return lost = h->a[n]; // the lost element n--; // decrease heap size for (int i=1, j=2*i; j<=n;) { // start from the root if (j<n && h->a[j] < h->a[j+1]) j++; // j=max(l,r); if (lost.key >= h->a[j].key) break; // Position found h->a[i] = h->a[j]; // Move child up i = j; j = 2*j; // Go down } h->a[i] = lost; // Insert the element at its right position return m; } Dr. Pierre Vignéras 105
  • 106. Heap Implementation  Complexities ● Space – insert() & deleteMax(): O(1) ● Time VI. Priority Queues – insert(): O(lg(n)) ● moves up from a leaf toward the root – maximum number of nodes visited = height(tree) = ⌈lg(n+1)⌉ ● At each node, O(1) operation – deleteMax(): O(lg(n)) ● moves down from the root toward a leaf ● same argument Dr. Pierre Vignéras 106
  • 107. Sorting Outline Dr. Pierre Vignéras 107
  • 108. Introduction ● 20% of computer time is about sorting ● Many different algorithms with different time ans  space complexities – None is the best ● Simple algorithms are very efficient in common cases ● Complex algorithm have better asymptotic time  complexities VII. Sorting ● Some algorithm are well understood whereas others  are not – Still a research area Dr. Pierre Vignéras 108
  • 109. Terminology ● We consider a sequential list (linked list or array) of  elements – each element has a key – keys are used for sorting ● Example: class list – elements are “students” record containing many  fields VII. Sorting ●name, id, average – Each field may be a key for a given sort Dr. Pierre Vignéras 109
  • 110. Terminology ● A sort is said  – internal: if it takes place in the memory – external:  if only part of the list can be stored in  memory ● A sort is said stable if elements with equal keys in the  input list is kept in the same order in the output list – Most simple sorting algorithm are stables  VII. Sorting whereas most complex ones are not – Example: list of students sorted by name ● you sort this list by the average mark ● students with same average mark are still in order Dr. Pierre Vignéras 110
  • 111. Selection Sort ● Find the final position 'k' of element at  position 'i' ● swap element 'i' and 'k' void sort_selection(int * t, int N) { // From 1 to N !! int min; for (int i = 1; i < N; i++) { min = i; VII. Sorting for (int j = i+1; j <= N; j++) { if (t[j] < t[min]) min = j; } swap(t, i, min); } } Dr. Pierre Vignéras 111
  • 112. Selection Sort Analysis ● Space complexity – O(1) ● Time complexity – comparisons: (N­1)+(N­2)+1= N(N­1)/2 = O(N²) – movements:  N = O(N) ● Performance of this algorithm does not  VII. Sorting depend on the datas – Worst case, best case and average case are roughly  the same! ● number of assignments may vary (min = j) Dr. Pierre Vignéras 112
  • 113. Insertion Sort ● For the given element at position 'i', move  each greater elements on its left to its right ● Insert element 'i' at the free position void sort_insertion(int * t, int N) { // From 1 to N !! for (int i = 2; i <= N; i++) { int j = i, v = t[i]; while (j > 1 && t[j-1] > v) { VII. Sorting t[j] = t[j-1]; j--; } t[j] = v; } } Dr. Pierre Vignéras 113
  • 114. Insertion Sort Analysis ● Space complexity – O(1) ● Time complexity  – comparisons:  ● Improvement: the test (j>1) is almost always true ● t[0]=MIN_KEY, remove the test VII. Sorting ● worst case : N −1  N 2 N −1 ∑ i1=23... N = =O  N²  ● average case is ~ N²/4 = O(N²)2 i=1 – movements:   – worst case : O(N²)  – average case ~ N²/2 = O(N²) ● Dr. Pierre Vignéras 114
  • 115. Shell Sort ● Reorder the list to obtain an ordered  sublist  when considering every 'h'­th elements (for a  given h) ● Series of decreasing values of 'h' void sort_shell(int * t, int N) { // From 1 to N !! for (int h = N / 9; h > 0; h = h / 3) { for (int i = h; i <= N; i++) { VII. Sorting int j = i, v = t[i]; while (j > h && t[j-h] > v) { t[j] = t[j-h]; j = j-h; } t[j] = v; } }} Dr. Pierre Vignéras 115
  • 116. Shell Sort Analysis ● Space complexity – O(1) ● Time complexity  – comparisons & movements:  ● Depends on the series used – Some are better than others – Still unknown in the general case VII. Sorting ● Very efficient algorithm for some well known  series – 1, 4, 13, 40, 121, ...: h=3*h+1 : O(    ) comparisons N 3 /2 Dr. Pierre Vignéras 116
  • 117. Merging arrays ● Given 2 ordered lists s and t, merge them in a  list u so that u is ordered void merge(int * s, int N, int *t, int P) { int * u = malloc((n+p) * sizeof(*u)); int i = N, j = P; s[0] = t[0] = INT_MIN; VII. Sorting for (int k = N+P; k > 0; k--) { u[k] = (s[i] > t[j]) ? s[i--] : t[j--]; } } } Dr. Pierre Vignéras 117
  • 118. Merge Sort (array) int s[MAX]; // Bad design! void sort_merge(int *t, int l, int r) { int i, j, k, m; if (r <= l) return; // divide and conquer m = (l+r)/2; sort_merge(t, l, m); sort_merge(t, m+1, r); // create s = t[l]...t[m]t[r]...t[m+1] VII. Sorting for (i = m; i >= l; i--) s[i]=t[i]; for (j = m; j < r; j++) s[r+m-j] = t[j+1]; // merge the two sublists for (k = i = l, j = r; k <= r; k++) { t[k] = (s[i] < s[j]) ? s[i++]:s[j--]; } } Dr. Pierre Vignéras 118
  • 119. Merging lists ● Given 2 ordered lists s and t, merge them in a  list u so that u is ordered list merge(list s, list t) { list u = newList(); node up = start(u)->next; node sp = start(s)->next, tp = start(t)->next; end(s)->key = end(t)->key = INT_MAX; do { if (key(sp) <= key(tp)) { VII. Sorting up->next = sp; up = sp; sp=sp->next; }else{ up->next = tp; up = tp; tp=tp->next; } } while(up != end(s) && up != end(t)); start(u) = end(u)->next; free(end(u)); return u; } Dr. Pierre Vignéras 119
  • 120. Merge Sort (list) node end; // Any list must end with this node. node sort_merge(node u) { node s, t; // 's': start of first list if (u->next = end) return u; s = u; t = u->next->next; // 't': search the end // Shift 't' 2 times more than 'u' while(t != end) { u = u->next; t=t->next->next; } VII. Sorting // Makes 't' the start of the second list t = u->next; // 'u': end of the first list // Makes 's' the start of the first list u->next = end; // 's' must end with 'end' // Exercice: write this merge() function return merge(sort_merge(s), sort_merge(t)); } Dr. Pierre Vignéras 120
  • 121. Merge Sort Analysis ● Space complexity – Arrays: O(n), List: O(1) ● Time complexity  – comparisons: O(n.log(n)) – Both in the worst and in the average case. ● This algorithm is stable VII. Sorting ● Very efficient algorithm  – Requires some space! Dr. Pierre Vignéras 121
  • 122. Heap Sort ● Insert all elements of the list in a (max­)heap ● Delete each element one after the other and  insert it a the next free position. void sort_heap(int * t, int N) { heap h = newMaxHeap(); for (int i = 1; i <= N; i++) heap_insert(h, t[i]); for (int i = N; i >= 1; i--) t[i] = heap_deleteMax(h); VII. Sorting } Dr. Pierre Vignéras 122
  • 123. Heap Sort Analysis ● Space complexity – Using a heap: O(n) – Using an heap backed by the given array: O(1)  ● Time complexity  – comparisons: O(2n.log(n)) ● Efficient algorithm  VII. Sorting – Less efficient than merge sort – Does not need additional space Dr. Pierre Vignéras 123
  • 124. Quick Sort ● Find an element called 'pivot' and partition the  list so that: – any elements at the left of the pivot are lesser – any elements at the right of the pivot are greater ● Sort the two sublists at the left and the right of  the pivot VII. Sorting void sort_quick(int * t, int l, int r) { if (l > r) return; int i = partition(t, l, r); sort_quick(t, l, i-1); sort_quick(t, i+1, r); } Dr. Pierre Vignéras 124
  • 125. Quick Sort int partition(int * t, int l, int r) { int i = l-1, j=r, v=t[r]; for(;;) { while (t[++i] < v); while (t[--j] > v); // check j>0 --> median if (i >= j) break; swap(t, i, j); } SORTINGCHARACTERS swap(t, i, r); ROREINGCHARACSTST return i; AACCINGRHORRE STT VII. Sorting } AAC ENGRHORRI HGINORRR GH NORRR AACCEGHINORRRSSTT Dr. Pierre Vignéras 125
  • 126. Quick Sort Analysis ● Space complexity (a stack is used) – worst case: O(n), average case is O(log(n)) ● Time complexity  – Worst case is O(n²) – Average case is O(n.log(n)) // Best one!! – Improve performance by choosing a better pivot VII. Sorting ● random ● median of (left, middle, right) – sort them to prevent the condition (j>0) ● Unstable !! Dr. Pierre Vignéras 126
  • 127. How fast can we sort? ● Time complexity  of simple algorithms – O(n²) but very efficient for small 'n' ● Complex algorithm – O(n.log(n)) ● space requirement in O(n) (merge sort) ● worst case in O(n²), unstable (quick sort) Good compromise:  (heap sort) – O(2n.log(n)) VII. Sorting ● ● It can be shown that (n.log(n)) comparisons  is an average minimum ● But... Dr. Pierre Vignéras 127