Estructura de datos - lista enlazada - problema de Joseph

1. Tema de hoy

  El tema de hoy es usar una lista enlazada circular para completar la solución del problema de Joseph. Entonces, primero entendamos cuál es el problema de José.
  Se dice que el famoso historiador judío Josefo tiene la siguiente historia: Después de que los romanos ocuparon Chotapat, 39 judíos se escondieron en una cueva con Josefo y sus amigos.39 Los judíos decidieron que preferían morir antes que ser capturados por el enemigo. un método de suicidio, 41 personas alineadas en círculo, la primera persona comenzó a contar, cada vez que se cuenta la tercera persona, la persona debe suicidarse, y luego la siguiente cuenta hasta que todos se suicidan hasta su muerte. Sin embargo, Josefo y sus amigos no quisieron cumplir. Comience con una persona, pase k-2 personas (porque la primera persona ya ha pasado) y mate a la k-ésima persona. Luego, vuelva a pasar a la persona k-1 y mate a la persona k. Este proceso continúa a lo largo del círculo hasta que finalmente solo queda una persona y esa persona puede seguir viviendo. La pregunta es, dada la suma, dónde colocarse en primer lugar para evitar la ejecución. Josefo le pidió a su amigo que fingiera obedecer primero, y él se colocó a él ya él en las posiciones 16 y 31, por lo que escapó del juego de la muerte. La siguiente figura es un ejemplo del problema de Joseph.

 

2. Análisis de problemas

  Ajustaremos los datos a pequeña escala, asumiendo que el tamaño de los datos es 8 [1,2,3,4,5,6,7,8],. Según el algoritmo de Joseph: (ps: donde actual se refiere a la posición para reiniciar después de estar fuera)

Afuera Ajuste de lista vinculada puntos actuales a
3 [1,2,4,5,6,7,8] 4
6 [1,2,4,5,7,8] 7
1 [2,4,5,7,8] 2
5 [2,4,7,8] 7
2 [4,7,8] 4
8 [4,7] 4

 

  1. El primer número es de 3 [1,2,4,5,6,7,8], currentpunto 4

  2. El segundo es el número 6 [1,2,4,5,7,8]y currentapunta al 7.

  3. El segundo es el número 1 [2,4,5,7,8]y currentapunta al 2.

  4. El segundo es el número 5 [2,4,7,8]y currentapunta al 7.

  5. El segundo es el número 2 [4,7,8]currentapunta al 4.

  6. El segundo número saliente es el 8 [4,7], currentpunto 4

  7. El último [4,7]
    modelo de datos restante es una lista circular vinculada. Para que sea más fácil de entender para todos, hice una imagen: 

     

 

Después de que salga el número 3, como se muestra en la siguiente figura:

 

 

3. Implementación de la codificación

  El lenguaje de codificación utilizado en este artículo es rápido y los lectores y amigos pueden tener su propio lenguaje familiar para implementar la codificación. Lo importante es comprender los principios y las ideas para la resolución de problemas. Creo que debes comprender esta verdad.
  Ideas de codificación:

  1. Actual toma 2 pasos, luego borra el nodo y finalmente apunta a la corriente al siguiente nodo.

  2. Ciclo del primer paso hasta que la lista vinculada esté vacía

  3.    let list = CircleList<Int>()
        for index in 1..<9 {
            list.add(index)//构造约瑟夫数据
        }
        while !list.isEmpty() {
        //走两步-->删结点-->继续执行 
            list.next()
            list.next()
            print( list.remove())
        }

    para resumir:

      Hoy entendemos cuál es la pregunta de José. Luego, a través del análisis, encontramos que Joseph se transformó en un problema matemático y encontramos que su estructura es una estructura de datos de lista enlazada circular. Finalmente, resolvimos el problema muy fácilmente mediante la codificación. Recientemente, resolví el conocimiento de la estructura de datos y descubrí que muchos problemas están estrechamente relacionados. También descubrí que las estructuras de datos y los algoritmos no son tan difíciles como pensábamos, y algunos son simplemente conocidos o no. En el campo de la informática, las estructuras de datos y los algoritmos son cursos obligatorios para todos. ¡Vamos!

    Bienvenido a prestar atención a la cuenta pública de [The Way of Infinite Testing], responder a [recibir recursos],
    recursos de aprendizaje de programación de Python productos secos, automatización de la interfaz de usuario de la aplicación del marco Python + Appium , automatización de la interfaz de usuario web del marco Python + Selenium, API del marco Python + Unittest automatización,


    Los recursos y códigos se envían gratis ~
    Hay un código QR de la cuenta oficial en la parte inferior del artículo, puede escanearlo en WeChat y seguirlo.

    Observaciones: Mi cuenta pública personal se ha abierto oficialmente, dedicada al intercambio de tecnología de prueba, que incluye: pruebas de big data, pruebas funcionales, desarrollo de pruebas, automatización de la interfaz API, operación y mantenimiento de pruebas, pruebas de automatización de la interfaz de usuario, etc., búsqueda pública de WeChat cuenta: "Wuliang The Way of Testing", o escanee el código QR a continuación:

     ¡Presta atención y crezcamos juntos!

Supongo que te gusta

Origin blog.csdn.net/weixin_41754309/article/details/109722509
Recomendado
Clasificación