¿Las estructuras de datos y los algoritmos son universales en todos los idiomas?

Los principios generales de todas estas estructuras son las mismas sin importar el lenguaje que use. Incluso los algoritmos son similares (si no exactamente iguales) cuando se los mira desde un nivel alto.

En su ejemplo de un árbol binario en Java vs Python, en realidad ha elegido dos idiomas que son tan similares en este aspecto como para hacer que esa implementación sea una traducción directa de un idioma a otro. Sí, Python también tendría una clase de nodo con campos dentro para recibir nodos secundarios izquierdo / derecho, exactamente como lo haría en Java, incluso agregaría los mismos métodos a esa clase, lo usaría exactamente mismo detalle de manera. La única diferencia real sería que no “especifique” los tipos de esos campos, pero eso es solo debido a la tipificación dinámica de Python, la intención de cada campo sería contener un tipo de nodo o nada.

Pero lo anterior se debe a que ambos lenguajes están orientados a objetos de manera similar. ¿Qué pasa si prefieres compararlos con hacer un árbol binario en C? Todavía haría algo similar, crearía un tipo de estructura que tiene dos punteros para contener los elementos secundarios izquierdo y derecho de cada nodo. Sin embargo, las funciones que implemente para operar en esto no formarían parte de la estructura en sí, serían funciones separadas no vinculadas a ese tipo.

Como otro ejemplo que muestra cómo los lenguajes extremadamente diferentes incluso harían un algoritmo de la misma manera, solo el detalle de la ejecución es diferente: supongamos que desea duplicar una lista de números. En Java, ejecutaría una indexación de bucle for de un extremo de la lista al otro, duplicando cada vez el valor en ese índice, si no desea cambiar el original, habría creado una nueva lista para contener el da como resultado los mismos índices. ¿Qué pasa si haces esto usando un paradigma funcional en lugar de la forma imperativa de Java? Incluso en Python, lo más probable es que use algo como la generación de listas para recorrer el original mientras modifica el resultado. Por lo general, en los lenguajes FP, mapearía una función en cada elemento de la lista, esa función (en este caso) sería “duplicar este valor”. No importa cuál use, el algoritmo real sigue siendo el mismo en el sentido de que aún está cruzando la lista y realizando un cálculo en cada elemento. Es solo el detalle exacto que difiere.

Si y no. En su mayor parte, las ideas son las mismas, pero a veces los bits importantes no se traducirán a otros idiomas. Si tiene un algoritmo TCL que depende de manipular la pila de la persona que llama, eso no funcionará en otros idiomas.

La mayoría de los algoritmos no se traducen bien a Haskell, ya que Haskell no le permite escribir y reescribir valores variables, los algoritmos generalmente se reescriben para ser más puramente matemáticos. (O están escritos en un estilo profundamente poco idiomático que anula el propósito de usar ese idioma en primer lugar).

Lisp y Scheme admiten un tipo de recursión muy eficiente, por lo que ciertas funciones recursivas no utilizarán memoria adicional cuando se repitan. Si se transfieren a otros idiomas, los algoritmos que dependen de una recursión infinita tendrían que convertirse para utilizar un bucle. (Este es un pequeño cambio, pero a veces los programadores inexpertos tienen problemas con él).

La mayoría de las veces, llevar un algoritmo entre idiomas no es un problema.

Principalmente, sí: Java, Python, C ++ y muchos otros lenguajes son bastante similares, ya que tienen estructuras de control similares (para bucles, sentencias if, recursión) y alguna forma de manipular punteros (que a menudo se denominan “referencias”). Por lo tanto, sería fácil traducirlos entre idiomas.

En idiomas que carecen de mutación, como Haskell (Haskell idiomático , de todos modos), las cosas son más difíciles. No siempre es fácil tomar una estructura de datos cuya implementación habitual se basa en estructuras mutantes con punteros y expresarla en un estilo funcional puro, sin mutación. Hay un libro bien conocido llamado Estructuras de datos puramente funcionales que discute estrategias para esto. En algunos casos, la versión puramente funcional de una estructura de datos no puede igualar la complejidad asintótica de la versión imperativa.

Sí lo son.

Es importante el concepto y la aplicación, no el lenguaje en el que están programados. Es la misma razón por la cual Thomas Cormen y compañía escribieron los algoritmos en CLRS (la biblia de algoritmos y estructuras de datos) en pseudocódigo.

More Interesting

¿Dónde puedo obtener la mejor implementación de Java del algoritmo de ruta más corta de Dijkstra?

¿Es la codificación competitiva todo sobre estructuras de datos y algoritmos?

¿Quién sabe qué hay detrás de la API de Google Nearby Search? ¿Qué algoritmo usan? ¿Cómo encuentra Google una estación de servicio cercana?

¿Qué algoritmos se pueden usar para encontrar rutas más seguras en una red de modo que sea casi imposible de rastrear y ningún pirata informático pueda utilizarlo completamente?

Cómo hacer que los algoritmos sean eficientes

¿Alguien podría explicar la respuesta a este problema de mecánica?

¿Cuál es la clave para diferenciar y comparar dos algoritmos de aprendizaje automático?

¿Cómo entiende Quora la relevancia entre los feeds?

Cómo revertir una lista vinculada usando la recursividad de cola y dos punteros

¿Cuáles son algunas habilidades de programación, algoritmos o marcos que se ven muy bien pero que son muy simples?

¿Cómo se realiza la agrupación en el sondeo lineal en hashing con direccionamiento abierto?

¿Es posible usar los poderes de una matriz de adyacencia para calcular las rutas más cortas que BFS calcularía?

¿Cómo podemos encontrar el número de subcadenas palindrómicas en una cadena en tiempo lineal?

¿Cómo funcionan los algoritmos y la estructura de datos cuando procesamos cualquier solicitud en un sitio web?

¿Cómo funciona la recursividad en el árbol de búsqueda binaria en orden? ¿Cómo se pueden explicar las llamadas recursivas, sin resumirlas como llamadas de pila?