¿Cuál es el algoritmo más utilizado a nuestro alrededor?

  1. Enfoque codicioso
    1. Pizza: Mientras ordenamos pizza, verificamos cómo podríamos maximizar nuestro estómago lleno con el dinero que tenemos.
  2. Algoritmo de Djikstra / A * / B * / SPFA (más o menos)
    1. Viajando de un lugar a otro, encontramos la distancia más corta (y el tráfico), básicamente Google Maps lo hace por usted.
  3. Clasificación
    1. Ordenar libros de acuerdo a nuestras necesidades.
  4. Programación prioritaria
    1. ¿Programación de Round Robin ?: Dar prioridad a algunas tareas (trabajar, tomar un descanso, comer) y menos a otras (otras cosas)
    2. FIFO (Primero en entrar, primero en salir): Hacer cola en la fila para tomar café, comprar un boleto, etc.
  5. buscando
    1. Búsqueda lineal: a través de cosas todos los días.
    2. Búsqueda binaria: mientras revisa el diccionario.
  6. Hashing
    1. Cuando carga un archivo y quiere asegurarse de que ha llegado correcta y completamente a su destino, puede calcular un hash del archivo. Algo similar a SHA256 o similar. Dos archivos diferentes no pueden tener el mismo hash. Calcule el hash al comienzo de la carga y calcule el hash del archivo de destino. Si coinciden, bueno y bueno, vuelve a subir.

Increíble no es así?

EDITAR:

Gracias:

Tudor Versoiu y Li Sky por agregar A * B * y SPFA en la sección de viaje, lo que lo hace más preciso.

Nikhil Vidhani para el ejemplo del diccionario de búsqueda binaria.

Joe Zbiciak por concepto Hashing.

Veamos cuántos puedo nombrar en la parte superior de mi cabeza:

  • Programación: hay muchos algoritmos de programación que utilizamos
  • Round Robin es cuando intentas realizar múltiples tareas: haces un poco de todo por una determinada unidad de tiempo
  • FIFO o primero en entrar, primero en salir es lo que funciona en cualquier tipo de colas, peajes, cajeros, etc. Tú vas primero, primero te atienden.
  • SJF / SRTF o el trabajo más corto primero, también llamado el tiempo restante más corto primero, sería la forma óptima de programar su tarea o estudiar si lo estaba haciendo la noche anterior. Desea completar tantos trabajos como sea posible
  • Algoritmos codiciosos
    • El problema de la mochila es cuando tienes una bolsa con cierta capacidad y tienes que poner artículos con diferentes pesos y valores en esta bolsa. Tu objetivo es maximizar el valor de los artículos que colocas. Este es el problema de la mochila 0/1. Otra variante se llama el problema de la mochila fraccional, donde puedes tomar partes de diferentes artículos.
    • Árboles de expansión mínima: suponga que su ISP decide tender cables de fibra en su área. Hacer esto es costoso para ellos, por lo que deben asegurarse de que todos puedan conectarse utilizando la menor cantidad de cable posible para que puedan pagar menos. Este es el problema del árbol de expansión mínimo, resuelto por los algoritmos de Prim y Kruskal.
    • Búsqueda de ruta: Dijkstra, Bellman-Ford, A *, mejor primera búsqueda: estos algoritmos se utilizan para encontrar las rutas más cortas entre dos lugares. Las aplicaciones como Google Maps usan estos algoritmos. Sí, lo sé, Bellman-Ford no es un algoritmo codicioso (usa programación dinámica), pero se encuentra en la búsqueda de ruta, así que lo mencioné aquí.
  • Algoritmos espaciales como el algoritmo R * ayudan a responder preguntas como “Encuentra los restaurantes más cercanos a 2 km de mi ubicación”. Las aplicaciones de mapas utilizan estos algoritmos para responder a tales consultas.
  • Otros ya han mencionado algoritmos de búsqueda como la búsqueda lineal y binaria, por lo que no los mencionaré aquí.
  • Para el no programador, los algoritmos más utilizados caerían dentro de las clases de Búsqueda y Clasificación (están más o menos relacionados).

    La mayoría de las personas ya aplican algoritmos de búsqueda en su vida diaria sin siquiera darse cuenta, y los algoritmos de clasificación permiten una búsqueda eficiente:

    • Búsqueda de un documento de computadora dentro de una lista de documentos. La mayoría de las personas ordenaría por nombre de archivo o por fechas modificadas recientemente (Búsqueda y ordenación binarias)
    • Buscar una palabra en un diccionario (Búsqueda binaria)
    • Buscando un contacto dentro de la libreta de direcciones. Esto se hace desplazándose por la lista y mirando el primer carácter (Búsqueda binaria) o escribiendo en la barra de búsqueda (Búsqueda de subcadena, posiblemente por KMP [1] o Árboles de sufijo [2])
    • Búsqueda de Google (algoritmos de indexación y búsqueda clasificados, y los resultados se ordenan por relevancia)
    • Clasificación de una mano de cartas de póker (generalmente clasificación por inserción)
    • Buscando una tienda en un directorio de centros comerciales (Búsqueda binaria)

    Notas al pie

    [1] Algoritmo de Knuth – Morris – Pratt | Wikiwand

    [2] Árbol de sufijos | Wikiwand

    Retroceso:
    Estaba en una carretera yendo a algún lado y encontré un cruce en T, no sé la dirección exacta para avanzar, así que decidí tomar el giro a la derecha y me moví unos 1500 metros en línea recta y me di cuenta de que esa carretera no me llevaría a el destino. Regresé al cruce en T y gire a la izquierda.

    Programación dinámica:
    Ahora que me di cuenta de que en el cruce en T, un giro a la derecha no me llevó al destino correcto. así que lo memoricé y la próxima vez que quiera ir a un destino en particular, giraré directamente a la izquierda porque ya recordé que esa es la dirección correcta.

    ¿Más común en todas partes? Posiblemente un cambio entre la verificación de igualdad y el incremento en uno, posiblemente también la multiplicación para resolver las compensaciones. Todos esos siguen siendo estrictamente algoritmos de habla. Son solo algoritmos de detalles más profundos además de los cuales se construyen algoritmos más complejos. Pero si profundiza aún más, estoy seguro de que encontrará un algoritmo aún más omnipresente en el que se basan todos los demás.

    Todo en informática (y de hecho todo en cada parte de la vida) se basa en elementos más detallados. Cada uno de esos en todos los niveles son algoritmos. Ese es el principio detrás de la abstracción, y todo es una abstracción que utiliza algoritmos cada vez más detallados para generar algoritmos más complejos.

    1. Algoritmo de programación , esto se ejecuta constantemente en cualquier sistema operativo. El sistema operativo más utilizado es Linux y Linux utiliza el Programador completamente justo .
    2. La clasificación probablemente esté allí, pero la clasificación no es un algoritmo. Dado que el rendimiento del algoritmo de clasificación se basa en el conjunto de datos, sería difícil determinar qué algoritmo de clasificación se usa más. Mi conjetura sería una selección rápida o de inserción .
    3. Cadena coincidente (encontrar palabra). cada vez que usted presiona Ctrl-f y busca un documento o busca en Google, busca en Internet o Facebook, etc., el algoritmo que se ejecuta es probablemente una variación de Knuth-Morris-Pratt .

    La memoria virtual y los algoritmos utilizados por el supervisor de búsqueda son posiblemente el algoritmo más utilizado en el mundo. Cada sistema operativo, ya sea Android, iOS, Windows, Linux o MacOS, depende en gran medida de él. Cada programa razonablemente complicado habla con la memoria a través de él. La eficiencia de otros algoritmos depende de ello. La seguridad del proceso sería casi imposible sin ella.

    Oh, eso es facil. Algoritmos de optimización de colonias de hormigas, ya que eso es lo que usan las colonias de hormigas reales y hay algo así como 100 billones de hormigas en el mundo. Tendría que tener todos los transistores enviados en chips Pentium 4 (y, para el caso, la peor variante de esos) y cada uno de esos Pentium que ejecuten el mismo algoritmo para vencerlo.

    (No estoy contando algoritmos evolutivos, de los cuales la selección natural es una, porque esa es una clase mucho más amplia con un espacio de problema mucho mayor que ACO).

    Aunque a la mayoría de nosotros no se nos enseña formalmente un método algorítmico de búsqueda dividiendo , nuestra cognición conduce a ese método. Este parece ser el algoritmo más utilizado.

    A casi todos se nos enseña (en la escuela primaria) un método algorítmico para multiplicar dos números de varios dígitos . Este parece ser el segundo algoritmo más utilizado.

    La búsqueda lineal sería mi instinto de respuesta.

    Buscar clase de algoritmos, siempre terminamos buscando algo.

    Quizás no sea el más usado pero interesante de todos modos. Al ordenar una mano de cartas, la mayoría de las personas usará la clasificación por inserción o la clasificación por selección.

    Probablemente algoritmos numéricos, como la multiplicación eficiente de enteros, y algoritmos como ese. Se utilizan en todas las aplicaciones en el núcleo mismo 🙂

    Apagado / Encendido o 0/1.

    Es la base de toda la información y la tecnología.