¿Para qué se usan realmente los algoritmos?

Un algoritmo en principio es simplemente una serie de instrucciones que se siguen paso a paso para resolver algún problema o hacer algo útil. Tienen una entrada que pasa por una serie de cálculos y finalmente produce una salida. Incluso se podría decir que una receta de cocina es un algoritmo (de hecho, esta analogía a veces se menciona a los estudiantes de CS para introducirlos en el tema). Los algoritmos a menudo se representan visualmente mediante diagramas de flujo:

Los algoritmos son una forma formal de describir con mucha precisión cómo llevar a cabo ciertas tareas. Y las computadoras son muy buenas para llevar a cabo una serie de instrucciones definidas con precisión. Por lo tanto, los algoritmos pueden verse simplemente como la descripción formal de los programas de computadora. Entonces, ¿para qué se usan? Para cualquier cosa que desee que calcule una computadora. Desde conceptos muy matemáticos como “un algoritmo que le dice si cierto número es primo o no” hasta sistemas de inteligencia artificial como “un algoritmo que, según las páginas que le gustan en Facebook, determina qué anuncios serían los mejores para mostrarle” . Una vez que encuentre el algoritmo o lo haya leído y lo haya entendido, en teoría puede implementarlo en cualquier lenguaje de programación que elija.

La primera línea del artículo relevante de Wikipedia lo resume bastante bien:

En matemáticas e informática, un algoritmo es un procedimiento paso a paso para los cálculos. Los algoritmos se utilizan para el cálculo, el procesamiento de datos y el razonamiento automatizado.

¿Sabías que también hay algoritmos en el lenguaje?

Solo sabemos muy poco de la lógica del lenguaje. En realidad, durante siglos, el álgebra se limita a apoyar el razonamiento usando el verbo “es / son” en la forma del tiempo presente, como en:

> Dado: “Todo padre es un hombre”.
> Dado: “John es un padre”.

• Conclusión lógica:
<"John es un hombre".

Cuando visita el sitio web de IMDB, sugiere las películas más relevantes cada vez. Cuando buscas algo en Google, ves la información más relevante en la primera página. ¿Alguna vez te has preguntado cómo cada sitio web sabe exactamente qué mostrarte?
Algoritmos

Lea aquí cómo los algoritmos están cambiando la atención médica: –

5 algoritmos que están transformando la industria de la salud

Recuerda la película Moneyball; desde encontrar el mejor jugador hasta calificar jugadores hasta apostar en el partido, todo se rige por algoritmos hoy en día en los deportes. Elihu gana más que un abogado de Texas al apostar en el tenis usando algoritmos.

El sistema de Tennis Quant dobla el dinero sin conocer a los jugadores

Los juegos de computadora han evolucionado, el mercado financiero se está volviendo más técnico. todo lo que ves a tu alrededor está regido por algoritmos

¡Este Quora es un algoritmo! Siga leyendo más adelante—

Los algoritmos se están apoderando y cómo!

Un “algoritmo” es realmente solo una forma de resolver un problema. La palabra ni siquiera sugiere que la solución que describe es completa o efectiva o eficiente; es literalmente solo un método para lograr algo. Si escribe algún código para hacer algo, no importa que no tenga un nombre o que no se ajuste a la descripción de un algoritmo que ha aprendido; lo que escribió es su algoritmo.
Cuando va de compras al supermercado, usa un algoritmo para encontrar comida entre los pasillos, e ir de compras al supermercado es parte de un algoritmo para alimentarse. Cuando intentas resolver un problema de álgebra conectando valores aleatorios para las variables, ese proceso de “adivinar y verificar” es un algoritmo.

Por esa razón, preguntar por qué las personas usan algoritmos es como preguntar por qué las personas intentan lograr cosas, es porque tienen cosas que quieren hacer, por lo que toman medidas para hacerlas.

A los científicos informáticos y a los ingenieros de software les gusta pensar en algoritmos porque están interesados ​​en evaluar y crear colecciones de mejores prácticas, de modo que no tengan que comenzar desde cero en cada caso de una clase similar de problemas. Aprender sobre algoritmos le ahorra tiempo y esfuerzo al permitirle reutilizar una solución conocida donde de lo contrario tendría que encontrar la suya.

Las otras respuestas no capturan una molestia práctica que creo que es importante: el rendimiento.

Los algoritmos (y sus estructuras de datos de soporte) son todos para el rendimiento. Específicamente, aplica algoritmos para hacer que el programa funcione lo más rápido posible y use la menor cantidad de recursos posible (principalmente memoria y espacio de almacenamiento).

La mayoría de los problemas de programación rutinarios se pueden resolver sin conocimiento de algoritmos; Casi siempre es posible que un programador inteligente razonable encuentre algún tipo de solución para un problema ad hoc, si no tiene restricciones de rendimiento particulares
Puede pensar que la disponibilidad de computadoras rápidas en el mundo moderno hace que esto sea menos importante. Lo hace, para algunas aplicaciones simples, pero en la mayoría de los casos, los consumidores esperan aplicaciones que aprovechen al máximo los recursos disponibles. Además, un programa que usa más RAM, con frecuencia también será más lento, a menos que apliquemos algoritmos inteligentes; En términos de pensamiento, las computadoras rápidas realmente hacen que los programas tontos se ejecuten más lentamente.

Hay un montón de dominios de aplicación donde los algoritmos no importan mucho, porque no hay suficientes datos para que el rendimiento sea un problema, o las personas están dispuestas a invertir dinero en él. Las bases de datos relacionales son un gran ejemplo de esto. Desde un punto de vista, la premisa es que usted escribe consultas usando la base de datos sin preocuparse por su implementación algorítmica; en su lugar, te centras únicamente en el dominio del problema. Depende del tipo que lo escribió para hacer un buen trabajo con los algoritmos, y si eso falla, simplemente compra más máquinas para su clúster.

El primer paso para comprender por qué el estudio y el conocimiento de los algoritmos son tan importantes es definir exactamente lo que queremos decir con un algoritmo. Según el popular libro de texto de algoritmos Introducción a los algoritmos (Segunda edición de Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein), “un algoritmo es cualquier procedimiento computacional bien definido que toma algún valor o conjunto de valores, como entrada y produce algún valor, o conjunto de valores como salida “. En otras palabras, los algoritmos son como mapas de ruta para lograr una tarea determinada y bien definida. Entonces, un fragmento de código que calcula los términos de la secuencia de Fibonacci es una implementación de un algoritmo particular. Incluso una función simple para sumar dos números es un algoritmo en cierto sentido, aunque sea simple.

La clasificación proporciona un buen ejemplo de un algoritmo que los informáticos utilizan con mucha frecuencia. La forma más sencilla de ordenar un grupo de elementos es comenzar eliminando el elemento más pequeño del grupo y ponerlo primero. Luego, retire el siguiente más pequeño, póngalo al lado y así sucesivamente. Desafortunadamente, este algoritmo es O (N2), lo que significa que la cantidad de tiempo que lleva es proporcional al número de elementos al cuadrado. Si tuviera que ordenar mil millones de cosas, este algoritmo tomaría alrededor de 1018 operaciones. Para poner esto en perspectiva, una PC de escritorio puede hacer un poco más de 109 operaciones por segundo, y tomaría años terminar de clasificar mil millones de cosas de esta manera.

Los algoritmos para encontrar el camino más corto de un punto a otro se han investigado durante años. Las aplicaciones abundan, pero simplifiquemos las cosas al decir que queremos encontrar el camino más corto desde el punto A al punto B en una ciudad con solo unas pocas calles e intersecciones. Se han desarrollado bastantes algoritmos diferentes para resolver tales problemas, todos con diferentes beneficios y desventajas. Sin embargo, antes de profundizar en ellos, consideremos cuánto tiempo tardaría en ejecutarse un algoritmo ingenuo, uno que pruebe todas las opciones imaginables. Si el algoritmo considerara todas las rutas posibles de A a B (que no fueran en círculos), no terminaría en nuestras vidas, incluso si A y B estuvieran en una ciudad pequeña. El tiempo de ejecución de este algoritmo es exponencial en el tamaño de la entrada, lo que significa que es O (CN) para algunos C. Incluso para valores pequeños de C, CN se vuelve astronómico cuando N es incluso moderadamente grande.

A veces, sin embargo, incluso el algoritmo más avanzado, con la heurística más avanzada, en las computadoras más rápidas es demasiado lento. En este caso, se deben hacer sacrificios relacionados con la exactitud del resultado. En lugar de tratar de obtener la ruta más corta, un programador podría estar satisfecho de encontrar una ruta que sea como máximo un 10% más larga que la ruta más corta.

Los algoritmos son más como una interfaz de procedimientos. Se usan para la programación. Parte del trabajo de un programador es traducir un algoritmo a un código de un lenguaje de programación específico. Pero tiene la libertad de idear su propio algoritmo. Esta es la respuesta general.

No puedo encontrar una respuesta más específica porque es como responder la pregunta ” ¿Para qué se usan las matemáticas?

Tómelo así: si un ingeniero tiene un arquitecto, un programador tiene matemáticos (principalmente informáticos).

En términos más coloquiales, y el algoritmo, en informática, es una función o serie de funciones que resuelve un problema.

Estos ‘algoritmos’ tienen lo que se conoce como “complejidad de tiempo”. En términos simples, la complejidad del tiempo es una forma de describir de manera abstracta el tiempo de ejecución de cualquier algoritmo dado. Hay un tiempo de ejecución mínimo (llamado pequeña ‘O’), tiempo de ejecución promedio y peor tiempo de ejecución O (N) (también conocido como ‘O’ grande).

La medida es, esencialmente: “Dado un tamaño de entrada de ‘N’, ¿cuántos pasos discretos se requieren para completar el algoritmo?”

Hay libros fundamentales (como libros de cocina) sobre algoritmos. Donald Knuth, el arte de la programación de computadoras, es como el Señor de los Anillos de algoritmos (había 6 volúmenes en el último recuento). Luego está la Introducción a los Algoritmos; Un mísero 1200 páginas.

Su pregunta Me gusta deriva de toda la discusión sobre entrevistas como desarrollador de software y se pregunta cuáles son las implicaciones prácticas. Aquí está mi respuesta:

En el día a día, saber lo que tiene a su disposición (la clasificación, el hash son, con mucho, los más comunes) y qué tipos de datos funcionan bien para esas tareas, lo ayudará a asegurarse de que está haciendo una feria apuñalar a la eficiencia.

Ejemplo: no aplique un orden de fusión en una lista vinculada. ¿Por qué? Porque necesita acceso de tiempo constante al elemento en cualquier posición dada en la lista. Si usa una matriz, entonces es solo ‘matriz [x]’. En una lista vinculada, solo puede obtener list.get (x) con un bucle for que comienza desde la cabeza / cola. Eso significa que, potencialmente, tendrá que iterar toda la lista vinculada para encontrar lo que necesita para la clasificación. Entonces, en este caso, un tipo rápido de peor caso O (n ^ 2), u O (nlogn) promedio), la complejidad del tiempo con una matriz simplemente fue a O (n ^ 3) todo porque cambió el tipo de datos.

Pero, la ordenación rápida está en una clase de tipos de comparación. Por lo tanto, en Java, por ejemplo, Comparable.compareTo () debe devolver 1,0, -1 para indicar mayor, menor o igual que. Pero, si se trata solo de números (o cualquier cosa con una raíz), puede hacer una clasificación de cubetas. Tiene un tiempo de ejecución de O (n * m) donde m es el número de dígitos.

Entonces, supongamos que tiene 1 millón de elementos en una ArrayList que desea ordenar; todos los enteros Usando quicksort para hacer el trabajo (Collections.sort () en Java) con take, el escenario de caso promedio, 1000000 * Log2 (1000000) = ~ 20,000,000 pasos. El uso de la clasificación de cubo, en número entero, con una base de 10 radix, significa que tiene 1000000 * 11 (11 es el número máximo de dígitos en la base 10 de 2 ^ 32) = 11,000,000 pasos máx. 20m pasos vs 11m. Dado un hardware idéntico, el tipo de cubo eliminará el tipo de fusión.

Integer and String (una serie de caracteres que son en sí mismos números) se incluyen en este tipo especializado. Generalizar estos patrones es un poco complicado, pero he visto implementaciones, como Apache TrieMap, que lo hacen bien.

Para concluir, en términos más elevados, el algoritmo de clasificación de páginas es, entre otros, la salsa secreta detrás del éxito de búsqueda de Google y lo idearon por su cuenta y, dado que el algoritmo muy popular y exitoso ha fomentado una cultura de algoritmos / datos en Google y de ahí el enfoque en entrevistas.

Lamentablemente, en casi todas las empresas a las que se podría entrevistar (léase: sin gran nombre), nada de esto importará y será juzgado en gran medida por sus habilidades blandas. Aún así, los algoritmos y los patrones de diseño serán su pan de cada día. Y, independientemente de si a sus compañeros o superiores les importa o no, se distingue el trigo de la chaffe.

Los algoritmos se usan para resolver problemas.

Tienes un problema cada vez que estás en un estado y quieres llegar a otro.

Lo que te lleva de un estado a otro se llama función.

Un algoritmo es un conjunto finito de instrucciones que, cuando se siguen, calculan esta función.

La entrada es la información con la que comienza (si existe). Básicamente, puede ver esto como los parámetros de la función (y, por supuesto, puede tener funciones sin parámetros).

Cualquier algoritmo se usa para resolver una clase específica de problemas.

Específicamente dentro del contexto de la informática, algo como A * es tanto un algoritmo como un código escrito dentro de esta aplicación de quora para enviar un mensaje entre mi cuenta y la suya, por ejemplo. Lo único que difiere es que A * tiene un propósito más general que el otro. Básicamente se podría decir que la clase de problemas que resuelve es mayor.

Para resolver problemas utilizando la automatización.

Los algoritmos se usan para resolver un problema que tiene un patrón. En el mundo del día a día se pueden comparar con el mapa de ruta del punto A al punto B.

Como parte de la resolución de problemas, intentamos establecer un patrón y luego aplicar el algoritmo para resolver el problema con el patrón. En algún momento terminamos usando más de un conjunto de algoritmos para resolver un problema complejo.

More Interesting

Cómo declarar un conjunto de cadenas de tamaño desconocido para obtenerlo del usuario sin usar la función de asignación en C

¿Cuáles son ejemplos de problemas en los que entrenar un ANN es la solución óptima?

¿Se puede ordenar una lista enlazada circular?

¿Alguien ha probado algún algoritmo de aprendizaje automático en diseño o verificación de hardware?

¿Qué partes de c ++ se deben conocer para aprender algoritmos para ioi?

¿Cuáles son algunos ejemplos de software del mundo real de pilas, colas y deques?

¿Cuál es el algoritmo de búsqueda de profundidad primero?

¿Existe un libro o sitio web que describa los problemas y luego le solicite la estructura de datos / algoritmos más apropiados necesarios para resolver el problema?

¿Cuál es la diferencia entre los siguientes dos fragmentos de código?

Dado un componente fuertemente conectado, ¿puede determinar en tiempo lineal si la eliminación de un solo nodo convierte el SCC en un gráfico acíclico dirigido?

¿Cuál es la diferencia entre los algoritmos de programación de tareas y los algoritmos de equilibrio de carga (estáticos y dinámicos)?

¿Qué estructura de datos sería mejor para encontrar el número de estudiantes dentro de un rango de altura dado de manera escalable?

¿Qué tan complejos son los algoritmos que usan los sitios web de citas como eHarmony para unir a las personas?

¿Cuál es el mejor libro para ayudar a entender la programación práctica orientada a objetos?

¿Cómo pasan su tiempo exactamente los participantes en varios sitios de codificación de algoritmos?