¿Cuáles son las posibilidades de que en el futuro las computadoras sean tan rápidas que el estudio de las estructuras de datos se vuelva obsoleto?

Está haciendo esta pregunta ya que espera que no “necesite” estructuras de datos. Eso es exactamente lo que está mal hacer. Y como Basile ya ha señalado, el aumento en la velocidad de las nuevas computadoras se está reduciendo. Estamos llegando a un límite físico. Por lo tanto, es muy probable que las computadoras nunca lleguen a una situación en la que el algoritmo de fuerza bruta y la estructura de datos menos óptima sean tan rápidas como cualquier otra.

Pero es peor que eso. Los aumentos de velocidad del pasado simplemente han demostrado que las computadoras no hacen las mismas cosas más rápido, simplemente se acostumbran a hacer más cosas adicionales sobre lo que solían hacer. Por lo tanto, las posibilidades de que los programas del futuro no necesiten estructuras de datos decentes son aún menores. Por el contrario, parece que las estructuras de datos van a ser MÁS importantes, no menos.

Como ejemplo, toda la industria de “big data” se debe al hecho de que las antiguas estructuras de datos utilizadas anteriormente simplemente no han podido hacer frente al gran volumen visto en estos días. Esto significa que cosas como simplemente guardarlo en un archivo plano en el disco (es decir, similar a su idea de “solo usar una matriz”), simplemente no lo cortaremos. Se ha estado alejando de eso desde el comienzo de la recopilación de datos para fines de cómputo. Es decir, durante varias décadas (incluso a través de los aumentos de velocidad “reales” donde la computadora del año siguiente solía ser dos veces más rápida que la del año anterior. E incluso entonces las estructuras de datos siguieron importando MÁS, no menos.

Entonces, incluso si alguien se da cuenta de cómo sortear los límites físicos contra los que los fabricantes de computadoras se enfrentan ahora, las estructuras de datos serían aún más importantes. Por el momento todo lo que se puede hacer es aumentar el paralelismo. Y eso obliga a que las estructuras de datos se diseñen para que funcione más rápido con múltiples procesos que se ejecutan en los mismos datos. Es decir, el estudio y la invención de nuevas estructuras de datos son aún más importantes que antes.

No hay posibilidad de que eso suceda.

Primero, las computadoras ya no son cada vez más rápidas. La ley de Moore ya está muerta. Como ejemplo, mi CPU de escritorio de 4 años (i3770K) es solo un 20% más lenta que la CPU de un escritorio equivalente nuevo; Simplemente no vale la pena cambiar todavía.

Segundo, incluso si tiene una computadora hipotéticamente mil veces más rápida que la actual, la complejidad del tiempo de los algoritmos sigue siendo importante. Si aún no lo has leído, lee Introducción a los algoritmos. Supongamos que su escritorio actual es capaz de ordenar diez millones de números (usando quicksort, entonces O (n log n) en un tiempo razonable. Entonces su computadora hipotética podría ordenar solo mil millones de números al mismo tiempo. No es un gran trato.

Cualquier mejora en la tecnología informática podría consumirse dándole más datos para procesar.

Bastante cero.

Por supuesto, podríamos discutir sobre la probabilidad de que las computadoras sigan acelerándose exponencialmente (no muy) y sobre cuáles son los límites finales para la velocidad de cómputo, pero eso no es muy relevante.

El punto más importante es que la investigación de algoritmos y estructuras de datos se ocupa de la complejidad asintótica. En términos sencillos, eso significa que nos importa lo que sucede cuando los insumos son muy grandes. Y eso significa que cuando decimos que un algoritmo es mejor que otro, descuidamos los factores constantes. Si el algoritmo A es 10 veces más rápido que el algoritmo B, eso no ocurre en todos los registros. Por supuesto, esto es muy importante en la práctica, pero es una consideración de segundo orden.

Lo que esto significa en la práctica es que, dado un problema, la diferencia entre lo que consideramos un “buen algoritmo” y un “mal algoritmo” es enorme. Por ejemplo, para algunos problemas, los mejores algoritmos conocidos tendrán una complejidad asintótica O (n), mientras que un algoritmo ingenuo tendrá una complejidad asintótica O (n ^ 2). Eso significa que para una entrada de tamaño 1000, el mejor algoritmo será 1000 veces más rápido que uno ingenuo, pero para una entrada de tamaño 1000000, el mejor algoritmo será 1000000 de tiempo más rápido.

Entonces, incluso con computadoras extremadamente rápidas, siempre que las entradas sean grandes, la diferencia entre las estructuras de datos buenas y malas será enorme. Y nuestros aportes definitivamente no están disminuyendo, solo piense en todo el bombo que “Big Data” ha recibido en los últimos años.

Bueno, las estructuras de datos no van a ninguna parte. No necesariamente porque organizan nuestros datos de manera más inteligente, sino porque nos ayuda a usar los datos de manera más práctica.

Claro que puedes deshacerte de todo en una matriz y pasarlo iterativamente, pero eso sería un grave abuso de un poder maravilloso.

Por cierto, en términos de computadoras modernas, no creo que lleguemos a un punto en el que pronto se convierta en una realidad factible. Llegas al punto en el circuito donde simplemente no puedes hacer más pequeño, o aumentas la frecuencia o permites que las cosas se calienten más. Estamos muy limitados por el mundo físico. Las principales mejoras en el hardware provienen de las mejoras en los algoritmos, y esas mejoras sin duda están utilizando estructuras de datos.

Nulo. Sin comprender la estructura de los datos, no sabe cómo decirle a su computadora que la procese. Algunas estructuras siempre serán mejores que otras para algunos tipos de procesamiento, y siempre será importante no tomar las decisiones en el peor de los casos.

Y, por cierto, nos estamos acercando a los límites sobre la velocidad con la que un procesador individual puede ejecutarse (quizás 10 veces, pero no 1000 veces posibles). Como resultado, estamos lanzando más y más procesadores a los problemas, y descubrir cómo dividir los datos para que puedan ser manipulados efectivamente por muchos de ellos es un problema de estructura de datos.

La IA podría ser entrenada para adivinar o sugerir estructuras de datos o algoritmos apropiados para un determinado conjunto de datos de muestra o especificación de problemas. Creo que los humanos todavía deben aprender la ciencia detrás de la computación por las mismas razones por las que no podemos abandonar la aritmética.