Red de conocimiento informático - Material del sitio web - Aplicaciones de algoritmos ubicuas en la era del big data

Aplicaciones de algoritmos ubicuas en la era del big data

Aplicaciones de algoritmos ubicuas en la era del big data

¿Puedes hablar sobre la aplicación de algoritmos en el trabajo? ¿Cuál es tu proceso personal de aprendizaje de algoritmos? algoritmos. Además, ¿crees que las universidades deberían dedicar más tiempo a aprender tecnología aplicada o conocimientos teóricos?

Hoy hablaré sobre mi propio proceso de aprendizaje de algoritmos y la aplicación de algoritmos en el trabajo práctico.

En el pasado, pensábamos que el big data siempre era mejor que los buenos algoritmos. En otras palabras, siempre que la cantidad de datos sea lo suficientemente grande, incluso si el algoritmo no es tan bueno, producirá buenos resultados.

Hace un tiempo, la aplicación "Geek Time" lanzó una noticia geek: "Los algoritmos son más importantes que los datos, y AlphaGo Zero supera por completo a la versión anterior. El contenido de la noticia es que es de Google". El equipo de inteligencia artificial DeepMind lanzó una nueva versión de AlphaGo. Un programa informático llamado AlphaGo Zero. El software puede aprender rápidamente a ir desde un estado en blanco sin necesidad de intervención humana y superar a la generación anterior de AlphaGo con un récord de 100 a 0.

El mayor avance de AlphaGo Zero es la realización de la "teoría de la pizarra". La teoría de la pizarra cree que los bebés son una pizarra en blanco y pueden mejorar su inteligencia mediante el aprendizaje y el entrenamiento adquiridos. Turing, el pionero de la IA, creía que siempre que se pueda utilizar una máquina para crear una IA similar a la de un niño y luego entrenarla, se puede obtener una IA que se aproxima a la inteligencia adulta o incluso supera la inteligencia humana.

El autodidacta AlphaGo Zero implementó esta teoría. David Silver, investigador jefe de AlphaGo, cree que lo que se puede encontrar en AlphaGo Zero es que el algoritmo es más importante que el llamado cálculo o la cantidad de datos. De hecho, AlphaGo Zero utiliza un orden de magnitud menos de cálculos que las versiones anteriores, pero debido a que utiliza más principios y algoritmos, su rendimiento es en realidad más poderoso.

Se puede observar que en la era del big data, la importancia de los algoritmos es cada vez más clara. Un programador calificado debe dominar los algoritmos.

No sé cómo todo el mundo empieza a dominar los algoritmos y las estructuras de datos paso a paso. Cuando era estudiante de segundo año, entré en contacto con la "Estructura de datos" por primera vez. Debido a que nunca había tenido ninguna formación en pensamiento en esta área, fue bastante difícil para mí aprender este curso en ese momento. En ese momento, tenía relativamente poca exposición a la programación, por lo que no tenía mucha experiencia práctica para apreciar y apreciar la "belleza" de una buena estructura de datos y diseño de algoritmos.

Cuando comencé a aprender, incluso tenía ganas de memorizar cosas, no sabía qué problemas realmente surgirían “si no lo diseñara así”. Para mí, las diversas complejidades del tiempo y el espacio son sólo juegos matemáticos que no pueden integrarse en problemas reales. En cuanto a "la complejidad del tiempo y el espacio y las diversas clasificaciones de cada peor de los casos y de los casos promedio", pensé en ese momento por qué estos contenidos son tan importantes, tal vez porque los probaría en el examen.

Inesperadamente, algún tiempo después volvería a asociarme con algoritmos. Tal vez sea porque la beca ofrecida por la Universidad Rice es demasiado alta, por lo que cada estudiante de posgrado debe ser asistente de enseñanza de forma gratuita durante cinco semestres. Quiso la suerte que el profesor de algoritmos me seleccionara dos veces como asistente de enseñanza. Por lo tanto, bajo la fuerza del destino, estudié cuidadosamente la "Introducción a los algoritmos" no menos de cuatro veces. Como resultado, básicamente hice los ejercicios del libro completo y algunos más de una vez. Mi proceso de aprendizaje de algoritmos es el proceso de leer "Introducción a los algoritmos" repetidamente.

Entonces, ¿para qué sirven los algoritmos de aprendizaje?

En primer lugar, los algoritmos son un trampolín para las entrevistas. No estoy seguro de la situación en China, pero en cuanto a. Las empresas de TI en Silicon Valley están preocupadas, no solo las llamadas telefónicas. La entrevista se centra en los algoritmos, y al menos dos rondas de entrevistas in situ son sobre algoritmos y programación.

Las empresas más grandes y antiguas, como Google, Facebook, LinkedIn, Dropbox, etc., escriben programas directamente en la pizarra.

Las empresas más pequeñas y nuevas, como Square, Airbnb, etc., necesitan escribir programas ejecutables en el sitio. Empresas como Twitter y Uber utilizan tanto pizarras como computadoras, según la situación.

Aunque hay otras partes de la prueba como el diseño del sistema, si el algoritmo no ha sentado una buena base, el primer nivel será muy difícil, y el algoritmo debe ser lo suficientemente familiar para poder escribir la solución correcta en el acto en poco tiempo, por lo que muchas personas se preparan. Es necesario revisar las preguntas antes de la entrevista.

Una vez fui entrevistador y entrevisté a otra persona por teléfono. En ese momento, usé Codepad *** para pedirle a la otra persona que escribiera un analizador de expresiones regulares ejecutable. Han pasado 45 minutos y la otra parte no ha escrito nada. Le pregunté de manera rutinaria: "¿Tiene alguna pregunta o quiere saber más?" La otra parte probablemente se sintió frustrada porque no podía escribir un programa, así que me respondió: "¿Su trabajo habitual consiste en escribir un programa regular?" ¿Analizador de expresiones todos los días?

Por un momento, me quedé sin palabras. Después de pensarlo, respondí: "No tienes que escribir todos los días. Luego te daré otros 15 minutos. Puedes demostrarme qué más puedes hacer, o ¿hay alguna razón por la que debería darte?". ¿Una oportunidad para más entrevistas? "La otra parte pensó por un momento y colgó el teléfono en silencio.

Para ser honesto, tengo reservas sobre el énfasis actual en los algoritmos en las entrevistas. Responder bien a las preguntas sobre algoritmos no significa lo bueno que seas. Incluso las grandes personas a veces tropiezan porque no quieren responder las preguntas. Pero aparte de las pruebas de algoritmos, obviamente no hay mejor manera de demostrar la fortaleza del candidato. Sin embargo, cómo optimizar el proceso de entrevista también es un tema que se ha discutido sin cesar y cada discusión debe terminar en vano.

En segundo lugar, cuando se programa, se utilizan más ideas algorítmicas en lugar de escribir algoritmos específicos. Cuando se trata de oportunidades para usar algoritmos en el trabajo real, déjame pensarlo: este rango debería ser 10. .

Algunos amigos encuentran más escenarios de algoritmos en el trabajo, mientras que otros encuentran menos. Más a menudo, se trata de la comprensión de la lógica empresarial, el uso competente de diversas características de los lenguajes de programación, la comprensión de los estilos y patrones de codificación, diversos procesamientos sincrónicos y asincrónicos, incluidas las pruebas de código, si la implementación del sistema está estandarizada, etc. De hecho, hay muy pocas oportunidades para diseñar o incluso implementar un algoritmo. Incluso si se utiliza, puede que ya sea demasiado tarde para aprenderlo.

Pero la ventaja de estar familiarizado con los algoritmos básicos es que si un fragmento de código que necesitas leer para trabajar contiene algunas ideas algorítmicas básicas, entenderás el significado del código más rápido que alguien que no las sepa. comprender los algoritmos. Cuando lees un fragmento de código incorrecto, sabes por qué es incorrecto, dónde está y cómo optimizarlo.

Cuando realmente necesites diseñar un algoritmo en un programa, aquellos que estén familiarizados con el algoritmo te darán una solución más completa y tendrás más conocimientos sobre los algoritmos o problemas de complejidad de tiempo más complejos que aparecen en el programa. Si está familiarizado con los algoritmos, también puede convertirse en un mejor entrevistador y evitar que lo menosprecien cuando charle con otros ingenieros.

Finalmente, los ingenieros que no dominan los algoritmos nunca serán buenos ingenieros. Por supuesto, además de los algoritmos básicos y las ideas algorítmicas (divide y vencerás, programación dinámica) que se han convertido en clásicos del mundo. Introducción a los algoritmos, de hecho, entramos en contacto con ellos todos los días. Los algoritmos están en todas partes en diversas tecnologías.

Tome como ejemplo el almacenamiento al que todos están expuestos. La implementación de varias bases de datos o almacenes de valores clave implicará varios algoritmos de fragmentación y algoritmos de invalidación de caché, algoritmos de bloqueo, incluidos varios algoritmos tolerantes a fallas (multi). -algoritmo de sincronización de replicación). Aunque normalmente no escribe estos algoritmos, a menos que esté implementando una base de datos, realmente debe comprender los detalles del algoritmo y los detalles de implementación de esta tecnología, tanto para la selección de tecnología como para la evaluación general del rendimiento de su propio programa.

Por ejemplo, cuando necesita una solución de almacenamiento clave-valor en el sistema y se enfrenta a varias alternativas disponibles, ¿cuál debería elegir?

Ninguna solución es nunca la mejor en todos los aspectos.

Tomemos como ejemplo RocksDB, que es de código abierto de Facebook. Cualquiera que conozca su historia sabe que RocksDB es un almacén de valores clave creado en LevelDB que puede ejecutarse de manera eficiente en servidores con múltiples CPU. LevelDB está diseñado basándose en el concepto del sistema de base de datos BigTable de Google.

Ya en 2004, Google comenzó a desarrollar BigTable. Su código dependía en gran medida del código base interno de Google. Aunque BigTable era excelente, no podía ser de código abierto. En 2011, Jeff Dean y Sanjay Gemawalt de Google comenzaron a volver a desarrollar un sistema de código abierto similar basado en las ideas de BigTable y se aseguraron de que no utilizaría ninguna base de código de Google, por lo que nació LevelDB. La implementación de dicho almacén de valores clave también se utiliza en IndexedDB de Google Chrome y también proporciona cierto soporte para el código abierto de Google Chrome.

Una vez mencioné CockroachDB en un artículo, que en realidad puede verse como una implementación distribuida basada en RocksDB. Desde otro nivel, se puede decir que CockroachDB es una implementación de código abierto de Spanner. Si sabe esto, sabrá que estas bases de datos o almacenes de valores clave son en realidad de la misma familia. Echemos un vistazo al algoritmo SSTable subyacente de LevelDB. Sabremos que todos son sistemas de almacenamiento eficaces para cargas de trabajo de lectura/escritura secuenciales y de alto rendimiento.

Por supuesto, además de los algoritmos más básicos de un sistema, muchos detalles de implementación y arquitectura del sistema tendrán un gran impacto en el rendimiento y las aplicaciones. Sin embargo, comprender y dominar el algoritmo en sí es siempre una parte indispensable para una comprensión profunda del sistema.

Hay muchos ejemplos similares, como el análisis de registros y el algoritmo de programación del software de llamada de taxis.

Tome el campo de pago con el que estoy más familiarizado, como la compresión de los parámetros BIN de la tarjeta de crédito y la transmisión de datos desde el servidor a la aplicación móvil para que los datos transmitidos sean lo suficientemente pequeños. necesita ser comprimido y codificado.

Cada país, como China, Corea del Sur y México, tiene diferentes formatos de prefijo de tarjeta de crédito. Cómo comprimirlo tanto como sea posible sin ser demasiado complicado, lo que afectará la complejidad del código de la aplicación móvil. e incluso causar errores, etc. Es necesario tener una comprensión detallada de varios algoritmos relacionados antes de que sea posible encontrar la solución óptima.

Resumamos el algoritmo:

En la era del big data, los datos y los algoritmos son igualmente importantes, y los algoritmos son incluso más importantes que la potencia informática o el volumen de datos.

¿Cómo aprender algoritmos? Leer trabajos clásicos, hacer preguntas y luego leer y utilizar algoritmos en la práctica.

Los algoritmos son un trampolín hacia las entrevistas y pueden ayudarte a conseguir el trabajo que te guste.

Al escribir programas, se utilizan más ideas algorítmicas en lugar de escribir algoritmos específicos.

Un ingeniero que no domina los algoritmos nunca será un buen ingeniero. Sólo con una comprensión detallada de varios algoritmos relacionados será posible encontrar la solución óptima.