Calculadora de índices Fenwick
Escriba un índice y vea cómo se mueve un árbol de Fenwick desde él: el 13 es 1101 en binario, su bit más bajo vale 1, el paso de actualización lleva al 14 y el de consulta al 12. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Índice
- 13
- Tamaño
- 16
- Bit activo más bajo
- 1
- Siguiente de actualización
- 14
- Padre de consulta
- 12
- Binario
- 0b1101
Un árbol de Fenwick, también llamado binary indexed tree, responde sumas de prefijo y actualizaciones en un punto en tiempo logarítmico al guardar rangos parciales cuyas longitudes son potencias de dos. Cada paso de navegación depende de un truco de bits: el bit menos significativo del índice 1-based actual, escrito lsb igual a i AND el negativo de i en complemento a dos. Sumar ese lsb recorre la cadena de actualización; restarlo recorre la cadena de consulta de prefijo. Estudiantes, programadores competitivos y autores de bibliotecas necesitan esos índices padre y siguiente sin rederivar las identidades bajo presión de examen. Esta calculadora de índices del árbol de Fenwick acepta un índice positivo i y, opcionalmente, un tamaño de árbol n; devuelve el lsb, el siguiente de actualización y el padre de consulta en un paso, formas binarias para enseñanza y, cuando se indica n, la ruta completa de actualización y de consulta del código BIT clásico.
Cómo los índices de Fenwick usan el bit menos significativo
En un binary indexed tree con índices 1-based, la celda en el índice i es responsable de un segmento contiguo del array subyacente cuya longitud es el bit menos significativo de i. Esa longitud se calcula como lsb igual a i AND la negación en complemento a dos de i, a menudo escrito i and minus i en lenguajes con aritmética modular sobre enteros de ancho fijo.
Geométricamente, invertir todos los bits por debajo del uno menos significativo aísla esa potencia de dos; el AND bit a bit con el índice original produce exactamente esa potencia. El bucle clásico de actualización parte del índice modificado y sustituye i por i más lsb mientras i permanece dentro del tamaño n del árbol, de modo que cada paso salta al siguiente índice que debe absorber el delta.
El bucle clásico de consulta de prefijo parte del extremo derecho del prefijo y sustituye i por i menos lsb mientras i sigue siendo positivo, sumando las celdas responsables que recubren el rango desde uno hasta el índice original. Juntas, esas dos recorridas implementan sumas de rango mediante la inclusión de dos prefijos.
Comprender un solo paso—siguiente de actualización igual a i más lsb, padre de consulta igual a i menos lsb—basta para depurar errores off-by-one, dibujar el árbol de responsabilidades en la pizarra y verificar que una implementación coincide con las identidades del manual antes de integrarla en una plantilla de concurso o en un pipeline analítico de producción.
Cuándo ayudan los pasos de un árbol de Fenwick
Entrenadores de programación competitiva y jueces en línea usan una calculadora de índices del árbol de Fenwick para que los alumnos comprueben pasos padre y siguiente mientras escriben a mano los bucles de actualización y consulta. Las herramientas de preparación de entrevistas necesitan un oráculo determinista que coincida con todo tutorial BIT estándar sobre las mismas entradas enteras, incluidos índices incómodos que son uno menos que una potencia de dos. La validación fallida no consume saldo.
Mantenga los índices en el rango positivo de treinta y dos bits, fije los arrays de ruta en las pruebas cuando size esté definido, y obtendrá navegación reproducible para deberes, capturas de documentación y edge workers sin montar un sandbox completo de estructuras de datos propio.
Qué puede hacer con ella
Validación de entrevistas y plantillas
Compare implementaciones BIT candidatas con un oráculo determinista de secuencias de índices de actualización y consulta de prefijo para tamaños fijos.
Preguntas frecuentes
¿Los índices son 0-based o 1-based?
1-based, como en la formulación estándar de Fenwick / binary indexed tree. El índice debe ser un entero de 1 a 2147483647.
¿Por qué se usa i & -i para el bit menos significativo?
En complemento a dos, -i invierte los bits por debajo del 1 menos significativo de i; el AND bit a bit aísla esa potencia de dos, que es exactamente la longitud de responsabilidad de la celda i.
¿Cuáles son las rutas del índice 13 en un árbol de tamaño 16?
Con tamaño 16, la ruta de actualización es 13, 14, 16: las celdas que absorben un cambio en el 13. La ruta de consulta es 13, 12, 8: las celdas que se suman para obtener la suma acumulada hasta el 13.
¿Para qué sirve un árbol de Fenwick?
Resuelve sumas acumuladas y actualizaciones de un solo valor en tiempo logarítmico. Cada celda guarda un tramo parcial cuya longitud es una potencia de dos, así que sumar o actualizar solo toca unas pocas celdas.
¿Qué índices puedo introducir?
Cualquier entero de 1 a 2147483647, el mayor valor positivo de 32 bits. Si además indica el tamaño del árbol, debe ser al menos igual al índice y no superar ese mismo límite.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/dev/fenwick-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"index":13}'const res = await fetch("https://api.kit.forhosting.com/dev/fenwick-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"index": 13
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/fenwick-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"index": 13
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/fenwick-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"index":13}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"index":13}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/fenwick-index", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"index": 13
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.fenwick_index",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
La lógica pura y determinista coincide byte a byte entre el uso gratuito en el navegador y las llamadas API de pago.
Contrato de entrada, campos de respuesta y validación
Ejemplo: el índice trece tiene binario zero-b one one zero one, bit menos significativo uno, siguiente de actualización catorce, padre de consulta doce; con size dieciséis la ruta de actualización es trece luego catorce luego dieciséis, y la de consulta es trece luego doce luego ocho. Envíe un cuerpo JSON por POST con el campo obligatorio index: un entero positivo en el intervalo cerrado de uno a dos elevado a treinta y uno menos uno, el máximo positivo con signo de treinta y dos bits donde los operadores bit a bit de JavaScript siguen siendo fieles. Se aceptan los alias i, idx y position. El campo opcional size (alias n, n_max, tree_size) es el índice máximo del árbol; cuando está presente debe ser un entero al menos tan grande como index y como máximo el mismo límite superior. Valores ausentes, no enteros, cero o fuera de rango fallan con invalid_input nombrando el campo y no se facturan. En caso de éxito el cuerpo incluye siempre index, lowest_set_bit, update_next, query_parent, cadenas binary y lsb_binary con prefijo zero-b, y una cadena formula breve que reafirma las identidades. Cuando se proporciona size, el cuerpo también incluye size, update_path como lista ordenada de índices visitados por el bucle de actualización, query_path como lista ordenada visitada por el bucle de prefijo, y update_next_in_range como booleano que indica si el vecino de actualización de un paso sigue dentro del árbol. Combine la respuesta con su propia visualización de arrays si necesita un diagrama; este endpoint solo calcula aritmética de índices y no almacena valores del árbol ni realiza consultas de suma sobre arrays del usuario.
Dónde una API de índices Fenwick aporta valor real
Como la implementación es pure parse de nivel A, cada llamada exitosa cuesta el precio base publicado $0.002 sin tokens de modelo ni red saliente.
Casos de integración
Ejercicios BIT de concurso y deberes
Entregue a los alumnos el índice i y el size n opcional; verifique lowest_set_bit, update_next, query_parent y las rutas completas frente a bucles Fenwick escritos a mano.
Rutas golden para docs y bibliotecas
Genere fixtures de update_path y query_path para documentación de binary indexed tree, pruebas unitarias y comprobaciones de portabilidad entre lenguajes.
Preguntas técnicas
¿Cómo se calculan los índices padre y siguiente del árbol de Fenwick?
Envíe un índice i positivo 1-based. La API devuelve lsb = i & -i, update_next = i + lsb y query_parent = i - lsb, más las formas binarias de i y del lsb.
¿Qué hace el parámetro opcional size?
Cuando size n está definido (n >= index), la respuesta añade update_path (i += lsb mientras i <= n) y query_path (i -= lsb mientras i > 0), igual que los bucles BIT clásicos.
¿Cuánto cuesta la calculadora de índices del árbol de Fenwick?
La herramienta en el navegador es gratuita. Las solicitudes API usan saldo prepago KIT a $0.002 por llamada exitosa; la entrada inválida no se factura.