Estructura de datos y algoritmo (implementación de Golang) (8.1) Conocimientos básicos-Prefacio

Conocimiento basico

Aprenda estructuras de datos y algoritmos. Necesitamos saber algunos conocimientos básicos.

1. ¿Qué es un algoritmo?

algorithmLa palabra " algoritmo" (inglés ) es extensa y profunda en chino, y significa el método de contabilidad, y también puede significar planificación estratégica. ¿Qué significa en tecnología informática?

Una computadora, como su nombre lo indica, es una máquina utilizada para la computación. Los algoritmos en informática pueden describirse como: la computadora recibe una instrucción de entrada, luego realiza un proceso y finalmente genera el resultado del cálculo.

Este proceso de entrada-proceso-salida es fácil de entender usando patrones de comportamiento humano. Por ejemplo, mi madre le pidió a Xiaoming que jugara salsa de soja. El comando para jugar salsa de soja es entrada. Xiaoming descubrió que hay 5 tiendas en la comunidad con salsa de soja a la venta. El más cercano a casa, y la tienda de comestibles Zilong es la más alejada, pero la salsa de soya es muy barata. Para ahorrar dinero, Xiao Ming fue al supermercado Zilong más alejado para comprar salsa de soja, luego regresó a su casa sin problemas y se lo dio a su madre. El proceso de comprar salsa de soja es el procesamiento, y la salsa de soja para la madre es la salida.

¿Por qué Xiaoming no fue al supermercado Juanjuan más cercano y fue al supermercado Zilong más alejado? Este es el mejor plan que surge después de pensar en la cabeza de Xiaoming. Por supuesto, ahora puede comprar salsa de soja a través del software de comida para llevar, Xiaoming puede abrir el software de comida para llevar Meituan, buscar la palabra clave: salsa de soja y luego hacer clic para filtrar, el más cercano y el más barato de su hogar, y luego seleccionar la salsa de soja más barata para hacer un pedido.

El proceso de comprar salsa de soja = el proceso de ordenar el software para llevar Meituan.

En la evolución de los seres humanos durante miles de años, podrán realizar operaciones numéricas y cambiar sus intereses, luego fabricarán máquinas, darán sus propios patrones de comportamiento a las máquinas y se liberarán. Si los humanos realmente entienden el proceso de transferencia de información de las neuronas del cerebro humano, incluso pueden crear máquinas autoconscientes, pero este tipo de escena solo se puede ver en las películas de ciencia ficción.

Por lo tanto, este proceso lógico, o patrón de comportamiento, se asigna a un algoritmo en la computadora.

En una descripción más precisa: un algoritmo es un método 有限,确定,有效adecuado para ser implementado por programas informáticos y utilizado para resolver problemas. Primero, hay un problema y luego hay una manera de resolverlo. Este método se llama algoritmo.

El algoritmo es limitado, es decir, los pasos del algoritmo son limitados, y el tiempo de ejecución es limitado, y el resultado puede obtenerse en un tiempo limitado. Se determina el algoritmo, es decir, no importa cuántas veces se ejecute, el resultado calculado es el mismo. El algoritmo es efectivo, es decir, el resultado calculado es útil para resolver el problema.

Sin embargo, la definición del algoritmo se ha actualizado todo el tiempo. Debido a la aparición del aprendizaje automático, los pasos del algoritmo de aprendizaje automático son infinitos y se pueden calcular todo el tiempo en función de la gran cantidad de datos a gran escala. Los resultados de cada cálculo son diferentes. Y aumente el umbral de entrenamiento, los parámetros obtenidos durante el entrenamiento exceden el umbral establecido para detener el cálculo de inmediato, pero también cumplen con la definición anterior.

El algoritmo debe completarse en un tiempo limitado, lo cual es una carga para los humanos, porque las máquinas hechas por humanos no son lo suficientemente fuertes. Por qué Porque incluso si los pasos del algoritmo son limitados, el tiempo de ejecución puede ser particularmente largo.

Al igual que en el libro De uno al infinito, las tres agujas de joyas debajo del templo de Benarés, el lugar sagrado del hinduismo, dijo el dios hindú Fen Tian, ​​quien puede mover las 64 piezas de oro de la primera aguja de gema a través de la segunda aguja de gema. A la tercera raíz, la torre en llamas, el templo y el Brahmin se reducirán a cenizas, que es el famoso algoritmo de Hanoi.

El problema de la torre de Hanoi se puede describir como:

Hay tres polos (numeración A、B、C) y se Acoloca 64una placa de oro en orden de abajo hacia arriba, de mayor a menor (como se muestra a continuación). El objetivo del juego: Amover todas las placas de oro Cen el poste al poste, y mantener el orden original doblado.

Regla de operación: solo se puede mover una placa a la vez, y las tres placas siempre mantienen la placa grande hacia abajo y la placa pequeña hacia arriba, y la placa se puede colocar en A、B、Ccualquier barra durante la operación .

Naturalmente pensamos en un algoritmo:

  1. Primero debemos usar la Cbarra para mover la placa Afrente N-1a la Bbarra y luego Amover la placa restante directamente a la Cbarra A.
  2. Luego, con la ayuda de la Abarra, mueva Blas N-1placas de la Cbarra hacia la barra, y la tarea se completará.

Idea muy simple, utilizamos lenguaje de programación para lograr:

package main

import "fmt"

var total = 0

// 汉诺塔
// 一开始A杆上有N个盘子,B和C杆都没有盘子。
func main() {
    n := 4   // 64 个盘子
    a := "a" // 杆子A
    b := "b" // 杆子B
    c := "c" // 杆子C
    tower(n, a, b, c)

    // 当 n=1 时,移动次数为 1
    // 当 n=2 时,移动次数为 3
    // 当 n=3 时,移动次数为 7
    // 当 n=4 时,移动次数为 15
    fmt.Println(total)
}

// 表示将N个盘子,从 a 杆,借助 b 杆移到 c 杆
func tower(n int, a, b, c string) {
    if n == 1 {
        total = total + 1
        fmt.Println(a, "->", c)
        return
    }

    tower(n-1, a, c, b)
    total = total + 1
    fmt.Println(a, "->", c)
    tower(n-1, b, a, c)
}

A través de la inducción, podemos saber que Total(N)la relación del número de movimientos es Total(N)=2*Total(N-1)+1que para cada placa adicional, el número de movimientos se duplicará y aumentará en uno. Podemos saber por el método matemático de las series relacionadas Total(N)=2^N-1, es decir, el número de movimientos es una ecuación exponencial: el 2的N次方índice es igual a la placa Cantidad

Calculamos que podemos 2^64-1=18446744073709551615saber que una persona se mueve día y noche, moviéndose una vez por segundo: 18446744073709551615/3600/24/365/100000000=5849tomará 584.9 mil millones de años completar este asunto. En ese momento, el mundo puede haber sido destruido.

En informática, dado que todos los algoritmos son reglas definidas por el hombre, las reglas están muertas, así que no se preocupe por no aprender. Cuando aprenda estos algoritmos, sentirá, wow, todo es tan simple.

Segundo, ¿cuál es la estructura de datos?

La estructura de datos, como su nombre lo indica, es la estructura que almacena los datos, y también puede considerarse como el contenedor que almacena los datos. Por ejemplo, si desea encontrar el valor máximo de 1000 números, primero debe registrar 1000 números en algunas tarjetas y luego ordenar las tarjetas.

La mayoría de los algoritmos necesitan organizar datos, por lo que se generan estructuras de datos. La estructura de datos en la computadora se utiliza principalmente para realizar la base de varios algoritmos, por supuesto, la estructura de datos en sí misma también es parte del algoritmo.

Las estructuras de datos básicas son: lista vinculada, pila y cola, árbol y gráfico.

Una lista vinculada es para vincular y correlacionar datos. Un nodo de datos apunta a otro nodo de datos, como una cadena de hierro en la naturaleza. La mayoría de las estructuras de datos están representadas por varias variantes de la lista vinculada.

En cada lenguaje de programación, la matriz se proporciona como un tipo de datos básico. La matriz es un espacio de almacenamiento de memoria continuo, y los datos en la posición especificada de la matriz se pueden obtener rápidamente a través de los subíndices 0, 1 y 2. La lista vinculada también se puede implementar con una matriz, pero en general, dado que la matriz es continua, es fácil causar redundancia cuando la lista vinculada agrega y elimina nodos, y el efecto no es bueno. Por lo que la lista se implementa en diferentes lenguajes de programación tales como: C、C++un puntero a lograr, Javaque es implementado por la clase, y Golangse logra con referencia a la estructura.

Las pilas y las colas se utilizan principalmente para almacenar múltiples datos, pero uno es primero en entrar, primero en salir. Por ejemplo, al empujar hacia abajo la pila, los datos que primero se colocan en la pila saldrán al final, y para las colas con las que estamos familiarizados, aquellos que hacen cola primero definitivamente recibirán el servicio primero.

El segundo es el árbol y el gráfico. Un árbol tiene un nodo raíz que almacena datos. Hay muchos nodos secundarios debajo de él, y los datos también se almacenan. De forma análoga al árbol. Un mapa se puede comparar con un mapa en la naturaleza. Múltiples puntos apuntan a múltiples puntos, y hay uno o más bordes entre los puntos. Estos puntos almacenan datos, y los bordes también pueden almacenar datos, como la distancia.

Existen varias extensiones en torno a este tipo de estructuras de datos, además de cierta lógica de clasificación y búsqueda para formar una estructura de datos avanzada de nivel superior.

La estructura de datos es una ayuda para la implementación del algoritmo y es para organizar la estructura de los datos de manera más eficiente, por lo tanto, la estructura de datos y el algoritmo están realmente estrechamente relacionados.

Tercero, ¿qué es una buena estructura de datos y un buen algoritmo?

La razón para aprender algoritmos es que los buenos algoritmos pueden ahorrar recursos, pero es difícil elegir el algoritmo correcto. Necesitamos llevar a cabo análisis matemáticos complejos para saber qué es bueno En la computadora, llamamos a este análisis de algoritmo de análisis matemático.

¿Qué son buenas estructuras de datos y buenos algoritmos?

  1. 计算机资源是有限Sí, entonces las estructuras de datos y los algoritmos que consumen menos recursos de computadora son mejores.
  2. 人的生命是有限的Sí, el tiempo de espera es tolerante, por lo que cuanto más rápida sea la estructura de datos y el algoritmo que pueden ayudar al programa a completar el trabajo, mejor.

Entonces hay una teoría: la teoría de la complejidad del algoritmo de tiempo y espacio.

Durante la ejecución del programa, ya sea espacio por tiempo o tiempo por espacio, el espacio puede considerarse como un recurso informático como el uso de memoria, y el tiempo es la cuarta dimensión de la percepción humana, ya sea lenta o rápida, los dos generalmente no pueden tener ambos Si descubres que tienes ambos, es inventar un mejor algoritmo.

En los cuarenta o cincuenta años del desarrollo de la informática, tales inventos que ahorran recursos y ahorran tiempo son relativamente pocos, como los algoritmos de compresión de datos. Debido al algoritmo de compresión de datos sin pérdidas ultraeficiente inventado, cuando vemos videos en línea, ninguno Distorsión, no tartamudeo, rápido y bueno, esto se llama algoritmo.

En la actualidad, se está estudiando un nuevo tipo de método de computación, llamado computación cuántica, que puede calcular cantidades muy grandes de datos en un espacio muy pequeño y usar muy pocos recursos en un corto período de tiempo. Esperemos el día en que la producción en masa pueda tener éxito. La productividad humana se liberará enormemente.

4. Resumen

En general, la programación es considerada por muchas personas = estructura de datos + algoritmo.

Aprendemos estructuras de datos y algoritmos para escribir código más rápido y mejor para una mayor eficiencia.

Debido a que hemos estudiado, no necesitamos diseñar desde cero, y se mejora la eficiencia del trabajo.

Debido a que conocemos la complejidad y los escenarios aplicables de cada estructura de datos y algoritmo, y elegimos la combinación libremente, el código que escribimos se vuelve más rápido y requiere menos recursos.

Por lo tanto, debemos estudiar y comprender estructuras de datos y algoritmos comunes.

Bienvenido a los capítulos restantes.

Entrada de artículo de serie

Soy la estrella Chen, bienvenido he escrito personalmente estructuras de datos y algoritmos (Golang lograr) , comenzando en el artículo para leer más amigable GitBook .

Publicado 12 artículos originales · elogiado 0 · visitas 91

Supongo que te gusta

Origin blog.csdn.net/m0_46803965/article/details/105595061
Recomendado
Clasificación