4 votos

Borrar recursivamente cada segundo elemento de una lista

Esta pregunta me hizo pensar.

Si tiene una lista de longitud n y eliminar recursivamente todos los demás elementos de la lista hasta que sólo quede un elemento, ¿existe alguna relación entre el índice del último elemento restante y n ?

Por ejemplo, con una lista de longitud 100 :

$[0, 1, 2, ..., 99]$

$[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]$

$[3, 7, 11, 15, 19, 23, 27, 31, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99]$

$[7, 15, 23, 31, 39, 47, 55, 63, 71, 79, 87, 95]$

$[15, 31, 47, 63, 79, 95]$

$[31, 63, 95]$

$[63]$

Se obtiene el índice 63 de la lista.

Pero con una lista de longitud 1000, se obtiene 511. Y con una lista de longitud 10000, obtienes 8191.

Siento que hay algo obvio pero me lo estoy perdiendo. ¿Qué se hace aquí matemáticamente? ¿Podemos predecir el índice con n ?

edición: un usuario ha publicado la fórmula math.pow(2, math.floor(math.log(n, 2))) - 1 pero definitivamente me encantaría una explicación aquí.

2voto

Siempre acabarás recibiendo $2^n-1$ donde n es el máximo número entero tal que $2^n<K$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X