Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Complejidad Computacional - A required skill

Complejidad Computacional - A required skill

3fafd51aa8dad766208e11eaaa1d534c?s=128

Pablo Ángel Trinidad

December 05, 2019
Tweet

Transcript

  1. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Complejidad Computacional Y por qué no

    debes ignorarla Pablo Trinidad - pablotrinidad@ciencias.unam.mx @_pablotrinidad_ https://pablotrinidad.me
  2. Pablo Trinidad - pablotrinidad@ciencias.unam.mx 1. Analytical skills 2. Coding skills

    3. Technical knowledge 4. Experience 5. Cultural fit
  3. Pablo Trinidad - pablotrinidad@ciencias.unam.mx 1. Ciencias de la Computación como

    kit de supervivencia. 2. ¿Qué significa que un algoritmo sea “eficiente”? 3. ¿Cómo medir la eficiencia? 4. Clasificación de problemas y por qué es difícil resolverlos.
  4. Pablo Trinidad - pablotrinidad@ciencias.unam.mx –Héroe anónimo en Quora.com “CC es

    el estudio de la manipulación de datos. En otras palabras, estudia cómo podemos tomar datos en una forma y convertirlos a otra más útil. Es la disciplina de computar.”
  5. Pablo Trinidad - pablotrinidad@ciencias.unam.mx “Map of Computer Science” por Domain

    of Science en YouTube [1] [1] - https://www.youtube.com/watch?v=SzJ46YA_RaA
  6. Pablo Trinidad - pablotrinidad@ciencias.unam.mx [1] - https://www.youtube.com/watch?v=SzJ46YA_RaA Complejidad Computacional Algoritmos

    Estructuras de Datos
  7. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  8. Pablo Trinidad - pablotrinidad@ciencias.unam.mx ¿Qué tan eficientes son mis algoritmos?

  9. Pablo Trinidad - pablotrinidad@ciencias.unam.mx ¿Qué tan eficientes son mis algoritmos?

    serán
  10. Pablo Trinidad - pablotrinidad@ciencias.unam.mx ¿Qué significa que un algoritmo sea

    eficiente?
  11. Pablo Trinidad - pablotrinidad@ciencias.unam.mx • Predecir el futuro desempeño para

    cuando haya más datos • Minimizar recursos • It’s not a Google-type problem • ¿Seremos capaces de resolver el problema con los recursos disponibles? ⏳ • Entender cómo pequeñas decisiones de diseño afectan a la cantidad de recursos utilizados ¿Por qué es importante?
  12. Pablo Trinidad - pablotrinidad@ciencias.unam.mx –Yo merengues “Existen problemas que no

    podemos callar a billetezos, no importa que tanto aumentemos los recursos, siempre existirán aquellos que aún con todo el tiempo y recursos del universo jamás podrán ser resueltos.”
  13. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Buscamos procedimientos eficientes para resolver problemas

    de gran tamaño.
  14. Pablo Trinidad - pablotrinidad@ciencias.unam.mx ¿Cómo medir la eficiencia?

  15. Pablo Trinidad - pablotrinidad@ciencias.unam.mx time.time() len(A) Bubble Sort Quick Sort

    1 ~0.000002s ~0.000001s 10 ~0.000011s ~0.000009s 100 ~0.000522s ~0.000142s 1000 ~0.066337s ~0.001356s 10000 ~7.093136s ~0.019367s 15000 ~16.227733s ~0.031391s 30000 ~65.753830s ~0.072687s
  16. Pablo Trinidad - pablotrinidad@ciencias.unam.mx time.time() len(A) Bubble Sort Quick Sort

    1 ~0.000002s ~0.000001s 10 ~0.000011s ~0.000009s 100 ~0.000522s ~0.000142s 1000 ~0.066337s ~0.001356s 10000 ~7.093136s ~0.019367s 15000 ~16.227733s ~0.031391s 30000 ~65.753830s ~0.072687s
  17. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Problemas: • Varía según la implementación

    • Depende de la computadora • Sólo conocemos lo que medimos
  18. Pablo Trinidad - pablotrinidad@ciencias.unam.mx ¿Cómo medir la eficiencia? v.2.0

  19. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Haciendo cuentas • Asumimos un modelo

    hipotético de computadora • Contamos el número de operaciones primitivas que el algoritmo ejecuta • Damos una expresión que nos de el número de operaciones primitivas en función del tamaño de la entrada
  20. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n)

  21. Pablo Trinidad - pablotrinidad@ciencias.unam.mx “Dada una lista con N números,

    regresa una lista nueva de longitud N tal que en cada posición esté el resultado de sumar todos los elementos de la lista original, excepto el elemento en esa posición en la lista original.”
  22. Pablo Trinidad - pablotrinidad@ciencias.unam.mx A = [13, 5, 95, 1,

    5, 41, 48] Entrada: B = [195, 203, 113, 207, 203, 167, 160] Salida: “Dada una lista con N números, regresa una lista nueva de longitud N tal que en cada posición esté el resultado de sumar todos los elementos de la lista original, excepto el elemento en esa posición en la lista original.”
  23. Pablo Trinidad - pablotrinidad@ciencias.unam.mx A = [13, 5, 95, 1,

    5, 41, 48] Entrada: B = [195, 203, 113, 207, 203, 167, 160] Salida: Ya que: sum(A) = 208 y: B[0] = 208 − 13 = 195 B[1] = 208 − 5 = 203 B[2] = 208 − 95 = 113 B[3] = 208 − 1 = 207 B[4] = 208 − 5 = 203 B[5] = 208 − 41 = 167 B[6] = 208 − 48 = 160 “Dada una lista con N números, regresa una lista nueva de longitud N tal que en cada posición esté el resultado de sumar todos los elementos de la lista original, excepto el elemento en esa posición en la lista original.”
  24. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Dado un arreglo A de longitud

    n : A = {a1 , a2 , a3 , . . . , an } Regresa un arreglo B de tamaño n que cumpla: B[i] = n−1 ∑ j=0 A[j] − A[i] Para toda i ∈ [0,n − 1]
  25. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  26. Pablo Trinidad - pablotrinidad@ciencias.unam.mx 1 1 n n n n

    n × n n × n n × n n 1
  27. Pablo Trinidad - pablotrinidad@ciencias.unam.mx 1 1 n n n n

    n2 n2 n2 n 1 Veces que se ejecuta Costo de operación c2 c3 c4 c5 c7 c8 c9 c10 c11 c12 c13
  28. Pablo Trinidad - pablotrinidad@ciencias.unam.mx 1 1 n n n n

    n2 n2 n2 n 1 Veces que se ejecuta Costo de operación c2 c3 c4 c5 c7 c8 c9 c10 c11 c12 c13 Costo total de ejecución c2 c3 c4 n c5 n c7 n c8 n c9 n2 c10 n2 c11 n2 c12 n c13
  29. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n) = c2 + c3 +

    nc4 + nc5 + nc7 + nc8 + n2c9 + n2c10 + n2c11 + nc12 + c13
  30. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n) = n2(c9 + c10 +

    c11 ) + n(c4 + c5 + c7 + c8 + c11 + c12 ) + (c2 + c3 + c13 ) T(n) = c2 + c3 + nc4 + nc5 + nc7 + nc8 + n2c9 + n2c10 + n2c11 + nc12 + c13
  31. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n) = n2(c9 + c10 +

    c11 ) + n(c4 + c5 + c7 + c8 + c11 + c12 ) + (c2 + c3 + c13 ) T(n) = an2 + bn + c T(n) = c2 + c3 + nc4 + nc5 + nc7 + nc8 + n2c9 + n2c10 + n2c11 + nc12 + c13
  32. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n) = an2 + bn +

    c
  33. Pablo Trinidad - pablotrinidad@ciencias.unam.mx n2 Veces que se ejecuta Costo

    de la operación n Costo total de ejecución n3
  34. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n) = an3 + bn2 +

    cn + d
  35. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  36. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Veces que se ejecuta 1 1

    1 n n 1
  37. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Veces que se ejecuta 1 1

    1 n n 1 Costo de la operación c2 c3 n c4 n c5 c6 c7
  38. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Veces que se ejecuta 1 1

    1 n n 1 Costo de la operación c2 c3 n c4 n c5 c6 c7 T(n) = c2 + c3 n + c4 n + c5 n + c6 n + c7
  39. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Veces que se ejecuta 1 1

    1 n n 1 Costo de la operación c2 c3 n c4 n c5 c6 c7 T(n) = c2 + c3 n + c4 n + c5 n + c6 n + c7 T(n) = n(c3 + c4 + c5 + c6 ) + (c2 + c7 )
  40. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Veces que se ejecuta 1 1

    1 n n 1 Costo de la operación c2 c3 n c4 n c5 c6 c7 T(n) = c2 + c3 n + c4 n + c5 n + c6 n + c7 T(n) = n(c3 + c4 + c5 + c6 ) + (c2 + c7 ) T(n) = an + b
  41. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n) = an + b

  42. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T2 (n) = an + b

    T1 (n) = an2 + bn + c
  43. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  44. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  45. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Problemas: • Varía según la implementación

    ✅ • Depende de la computadora • Sólo conocemos lo que medimos
  46. Pablo Trinidad - pablotrinidad@ciencias.unam.mx ¿Cómo medir la eficiencia? v.3.0

  47. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Dada una lista A con n

    elementos A = {a1 , a2 , a3 , . . . , an } Tal que: a1 ≤ a2 ≤ a3 ≤ . . . ≤ an y un elemento e, determinar si e ∈ A
  48. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Dada una lista A con n

    elementos A = {a1 , a2 , a3 , . . . , an } Tal que: a1 ≤ a2 ≤ a3 ≤ . . . ≤ an y un elemento e, determinar si e ∈ A A = [1, 2, 5, 20, 32, 32, 49] Entrada: e = 4 Algoritmo Salida No A = [1, 2, 5, 20, 32, 32, 49] Entrada: e = 32 Algoritmo Salida Si
  49. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  50. Pablo Trinidad - pablotrinidad@ciencias.unam.mx T(n) = an + b

  51. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Casos • El mejor: El elemento

    está al principio de la lista. • El promedio: El elemento se encuentra cerca de la mitad. • El peor: El elemento no está en la lista.
  52. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Tasa de crecimiento 13n2 + 1.2n

    + 9 Función de costo Orden de crecimiento n2 1 100 n3 + 1010n2 + 1 n3 30n − 49 n 2n + n10 + n34 + n2 + 1 2n
  53. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Casos El mejor (omega) Ω Θ

    O El rango (theta) El peor (omicrón)
  54. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Casos Cota inferior Ω Θ O

    Cota inferior y superior Cota superior (Big-O)
  55. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Búsqueda lineal O(n) Ω(1)

  56. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Diferencia en arreglo v.1.0 O(n2) Ω(n2)

    Θ(n2)
  57. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Diferencia en arreglo v.2.0 O(n) Ω(n)

    Θ(n)
  58. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Binary search

  59. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Búsqueda binaria O(log n) Ω(1)

  60. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  61. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Source: https://www.slideshare.net/sumitbardhan/algorithm-analysis

  62. Pablo Trinidad - pablotrinidad@ciencias.unam.mx

  63. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Dada una función g(n), O(g(n)) es

    el conjunto de funciones tal que: O(g(n)) = {f(n)|∃c, n0 ∈ ℝ+, O ≤ f(n) ≤ cg(n)∀n ≥ n0 }
  64. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Dada una función g(n), O(g(n)) es

    el conjunto de funciones tal que: O(g(n)) = {f(n)|∃c, n0 ∈ ℝ+, O ≤ f(n) ≤ cg(n)∀n ≥ n0 } O(g(n)) = {f(n)| existen constantes positivas c, n0 tal que: Es decir: 0 ≤ f(n) ≤ cg(n) para toda n ≥ n0 }
  65. Pablo Trinidad - pablotrinidad@ciencias.unam.mx –Alan Turing “Tsss… pos ‘ora sí

    que te puedo dar un número que multiplique a la función y después de cierto punto la neta ya no importa carnal”
  66. Pablo Trinidad - pablotrinidad@ciencias.unam.mx –Alan Turing “Tsss… pos ‘ora sí

    que te puedo dar un número que multiplique a la función y después de cierto punto la neta ya no importa carnal”
  67. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Lo anterior implica • Si una

    función tiene complejidad , ciertamente también tendrá complejidad , como también , etc. O(n) O(n2) O(n3) O(n) ⊂ O(n2) ⊂ O(n3) ⊂ O(2n) . . .
  68. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Abuso de notación f(n) ∈ O(g(n))

    ⟹ f(n) = O(g(n))
  69. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Las constantes importan (a veces)

  70. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Complejidad computacional ≠ Complejidad algorítmica

  71. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Los problemas • Son clasificados basados

    en la mejor solución existente • Interesantes tiene complejidades exponenciales o factoriales. • Muchos de los problemas del día a día son una variante de un conjunto pequeño de problemas conocidos
  72. Pablo Trinidad - pablotrinidad@ciencias.unam.mx P & NP https://www.youtube.com/watch?v=YX40hbAHx3s

  73. Pablo Trinidad - pablotrinidad@ciencias.unam.mx • Boolean satisfiability problem (SAT). •

    Knapsack problem. • Traveling salesman problem (TSP). • Subset sum problem. • Hamiltonian path problem. • Vehicle routing problem (VRP) https://en.wikipedia.org/wiki/List_of_NP-complete_problems
  74. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Must have tools! • Lógica proposicional

    • Probabilidad • Nociones de combinatoria
  75. Pablo Trinidad - pablotrinidad@ciencias.unam.mx [1] - https://www.youtube.com/watch?v=SzJ46YA_RaA Complejidad Computacional Algoritmos

    Estructuras de Datos Must have tools (CS)!
  76. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Concrete mathematics: A Foundation for Computer

    Science Ronald L. Graham, Donald Knuth, Oren Patashnik Addison-Wesley Professional; 2nd edition
  77. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Introduction to Algorithms Thomas H. Cormen,

    Charles E. Leiserson, Ronald L. Rivvest, Clifford Stein The MIT Press, 3rd edition
  78. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Computer Science Distilled: Learn the art

    of solving computational problems Wladston Ferreira Filho Code Energy, 1st Edition
  79. Pablo Trinidad - pablotrinidad@ciencias.unam.mx How to solve it: Modern Heuristics

    Zbigniew Michalewicz, David B. Fogel Springer, 2nd edition
  80. Pablo Trinidad - pablotrinidad@ciencias.unam.mx https://pablotrinidad.me

  81. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Jueces en línea! HackRank UVa URI

    Kattis OmegaUp Codeforces CodeChef LeetCode InterviewBit
  82. Pablo Trinidad - pablotrinidad@ciencias.unam.mx Complejidad Computacional ¿Cómo medir la eficiencia

    de un algoritmo? Pablo Trinidad - pablotrinidad@ciencias.unam.mx @_pablotrinidad_ https://pablotrinidad.me