Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
Lecture Outline • Order Notation (for real this time) • Dynamic Programming w/ Iteration • Fibonacci numbers (revisited) • Text Segmentation (revisited) • ACM ICPC
Algorithmic Complexity • We would like to be able to describe how long a program takes to run
Algorithmic Complexity • We would like to be able to describe how long a program takes to run • We should express the runtime in terms of the input size
Algorithmic Complexity • Absolute time measurements are not helpful, as computers get faster all the time
Algorithmic Complexity • Absolute time measurements are not helpful, as computers get faster all the time • Also, runtime is clearly dependent on the input (and input size)
Order Notation • Basically, we just want to count the number of operations (without being too precise)
Examples • What’s the complexity of the following code? int c = a + b;
Examples • What’s the complexity of the following code? int c = a + b; • Answer: O(1)
Examples • What’s the complexity of the following code? int c = a + b; • Answer: O(1) • (it actually depends on how you count)
Example 2 for(int i = 0; i < n; ++i) { //do something }
Example 2 for(int i = 0; i < n; ++i) { //do something } • Answer: O(n)
Example 2 for(int i = 0; i < n; ++i) { //do something } • Answer: O(n) • O(c) operations for each i O(cn) == O(n) total operations
Example 2 for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) { //do something } }
Example 2 for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) { //do something } } • Answer: O(n2)
Example 2 for(int i = 0; i < n; ++i) { for(int j = 0; j < n; ++j) { //do something } } • Answer: O(n2) • O(n) operations for each i == n * n total operations == O(n2) total operations
Example 3 for(int i = 0; i < n; ++i) { for(int j = i; j < n; ++j) { //do something } }
Example 3 for(int i = 0; i < n; ++i) { for(int j = i; j < n; ++j) { //do something } } • The first iteration of the outer loop takes O(n)
Example 3 for(int i = 0; i < n; ++i) { for(int j = i; j < n; ++j) { //do something } } • The second iteration of the outer loop takes O(n-1)
Example 3 for(int i = 0; i < n; ++i) { for(int j = i; j < n; ++j) { //do something } } • The third iteration of the outer loop takes O(n-2)…
Example 3 for(int i = 0; i < n; ++i) { for(int j = i; j < n; ++j) { //do something } } • The last iteration of the outer loop takes O(1)
Example 3 • n + (n–1) + … + 1 = ? • Call this sum N
Example 3 • n + (n–1) + … + 1 = N • Call this sum N
Example 3 • n + (n–1) + … + 1 = N • Call this sum N N = n + (n-1) + … + 2 + 1
Example 3 • n + (n–1) + … + 1 = N • Call this sum N N = n + (n-1) + … + 2 + 1 N = 1 + 2 + … + (n-1) + n
Example 3 • n + (n–1) + … + 1 = N • Call this sum N N = n + (n-1) + … + 2 + 1 N = 1 + 2 + … + (n-1) + n • Now, add these two together: 2N = (n + 1) + ((n-1) + 2) + … + (1 + n)
Example 3 • n + (n–1) + … + 1 = N • Call this sum N N = n + (n-1) + … + 2 + 1 N = 1 + 2 + … + (n-1) + n • Now, add these two together: 2N = (n + 1) + ((n-1) + 2) + … + (1 + n) = n * (n + 1)
Example 3 • n + (n–1) + … + 1 = N • Call this sum N N = n + (n-1) + … + 2 + 1 N = 1 + 2 + … + (n-1) + n • Now, add these two together: 2N = (n + 1) + ((n-1) + 2) + … + (1 + n) = n * (n + 1) N = n * (n + 1) / 2
Example 3 • n + (n–1) + … + 1 = N • Call this sum N N = n + (n-1) + … + 2 + 1 N = 1 + 2 + … + (n-1) + n • Now, add these two together: 2N = (n + 1) + ((n-1) + 2) + … + (1 + n) = n * (n + 1) N = n * (n + 1) / 2 = O(n2)
Examples • This is also the number of ways 2 items can be chosen from a set of (n + 1) items, disregarding order and without replacement (also called “(n + 1) choose 2”, binomial coefficient)
Fibonacci Numbers • F0 = 0 • F1 = 1 • Fn = Fn-1 + Fn-2 for n > 1 • 0, 1, 1, 2, 3, 5, 8, 13, …