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í.