¿Debo aprender a clasificar?

Creo que definitivamente al menos debería comprender cómo funcionan los diversos tipos, cuáles son sus complejidades de tiempo, por qué tan grande una entrada hace que un “ordenamiento rápido” (digamos Quicksort) supere a un “ordenamiento lento” (digamos ordenamiento por inserción), etc.

La clasificación también es una gran oportunidad para familiarizarse con varios conceptos centrales de los algoritmos:

  • Es fácil convencerse de que la ordenación por inserción se ejecuta en tiempo cuadrático en el peor de los casos. Sin embargo, en entradas lo suficientemente pequeñas, aún supera a los algoritmos de clasificación más elegantes.
  • Quicksort y merge sort son una excelente manera de introducir el paradigma de diseño de algoritmos de divide y vencerás. Sus análisis también son muy interesantes, ya que implican la resolución de ecuaciones de recurrencia, que son la maquinaria esencial para analizar otros algoritmos de divide y vencerás.
  • Puede hacer que Quicksort se ejecute en tiempo cuadrático si adapta la entrada. Sin embargo, si aleatoriza Quicksort para que elija el pivote al azar, entonces realiza como máximo O (n log n) comparaciones con alta probabilidad. Por lo tanto, es una excelente manera de introducir algoritmos aleatorios y sus análisis.

Hay un límite inferior general que dice que no existe un algoritmo de clasificación basado en comparación que se ejecute más rápido que n log n time. Piensa en lo bueno que es este resultado: no existe tal algoritmo. ¡Entonces también es una gran oportunidad para introducir límites más bajos!

Además, ¡hay * algoritmos * que se ejecutan en tiempo “pseudo-lineal” pero no se basan en la comparación y solo funcionan para enteros positivos!

Podría continuar, pero la respuesta corta es que estudiar varios algoritmos de clasificación puede presentarle muchos de los temas más centrales en algoritmos. Es mucho más que solo conocer cinco algoritmos de clasificación diferentes.

Esta pregunta se ha hecho previamente en Quora, pero no puedo encontrar el duplicado.

Los algoritmos de clasificación en los lenguajes de programación cubren un subconjunto de posibles situaciones que un ingeniero de software es probable que encuentre en el transcurso de una carrera. Si no sabe cuándo funcionan bien y cuándo no, es probable que los use incorrectamente. Aunque los algoritmos de clasificación son generalmente correctos, pueden tener características de rendimiento muy diferentes.

En general, los buenos ingenieros de software entienden los algoritmos que están utilizando. El estudio de algoritmos es una parte clave de la informática y la ingeniería de software, y al comprenderlos, un desarrollador puede desarrollarlos y modificarlos.

Además, los algoritmos de clasificación son bastante fáciles, y si un estudiante no los comprende, los algoritmos gráficos que aparecen más adelante pueden ser demasiado difíciles. Es entrenamiento para el futuro.

Sí. No se trata de aprender a ordenar. Se trata de aprender diferentes paradigmas como dividir y conquistar (Mergesort, Quicksort), cómo usar una estructura de datos para ordenar (Heapsort, transversal en línea y un árbol AVL).

Considere ordenar como una introducción al pensamiento algorítmico.

Los algoritmos y las estructuras de datos son conceptos básicos de la informática y la ingeniería. Si los aprende, su proceso de pensamiento mejora. Tu estilo de codificación mejora. Si lees un buen código (y entiendes) te conviertes en un mejor codificador. ¿Dónde encuentra un código mejor que esas pocas líneas de código preciso, elegantemente elaborado y revisado por pares por millones de personas? Y la clasificación es la base de muchas otras cosas. Entonces, lee y comprende.

En general, no es muy importante aprender un montón de tipos diferentes. Los ordenamientos a menudo se usan al enseñar algoritmos por la misma razón que el factorial se usa al enseñar la recursividad: es algo que sabes hacer o se explica fácilmente, y la solución es fácil de ver y ver cómo funciona.

Puede haber casos en los que tenga sentido repasar específicamente los tipos.

Si va a escribir un producto que va a realizar una clasificación seria (como una base de datos o un componente personalizado que tendrá datos grandes), sería bueno mirar y asegurarse de que está haciendo lo correcto cosa. Encontré un error en el que se usaba la clasificación rápida en el peor de los casos para datos potencialmente grandes (era para un componente de cuadrícula donde los datos ya podrían estar ordenados; si quisiera revertir la clasificación, ordenaría y luego ordenaría nuevamente). En este caso, la clasificación rápida es lenta.

Otro momento para repasar las clases, junto con otros algoritmos básicos, es antes de las entrevistas. La clasificación no es una pregunta que hago, pero creo que es muy razonable esperar que alguien pueda escribir algún tipo de clasificación sin ayuda, y escribir una clasificación rápida o una combinación después de que se describa / demuestre cómo funciona. Las preguntas de la entrevista son a menudo este tipo de cosas simples, porque es probable que solo tenga una hora en total, por lo que sus preguntas no pueden profundizar lo suficiente si su pregunta es muy complicada.

Sí, debe ser uno de los conceptos básicos que debe comprender y lo necesitará muchas veces si está buscando la ciencia de la informática.