Calculateur d'indices Fenwick
Saisissez un indice et voyez comment un arbre de Fenwick se déplace à partir de lui : 13 s'écrit 1101 en binaire, son bit le plus bas vaut 1, l'étape de mise à jour mène à 14 et celle de somme à 12. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Indice
- 13
- Taille
- 16
- Bit actif le plus bas
- 1
- Suivant de la mise à jour
- 14
- Parent de la requête
- 12
- Binaire
- 0b1101
Un arbre de Fenwick, aussi appelé binary indexed tree, répond aux sommes de préfixe et aux mises à jour ponctuelles en temps logarithmique en stockant des plages partielles dont les longueurs sont des puissances de deux. Chaque pas de navigation repose sur une astuce binaire : le bit de poids faible de l'indice 1-based courant, écrit lsb égal à i AND le négatif de i en complément à deux. Ajouter ce lsb parcourt la chaîne de mise à jour ; le soustraire parcourt la chaîne de requête de préfixe. Étudiants, programmeurs compétitifs et auteurs de bibliothèques ont besoin de ces indices parent et suivant sans redériver les identités sous la pression d'un examen. Ce calculateur d'indices d'arbre de Fenwick accepte un indice positif i et, en option, une taille d'arbre n ; il renvoie le lsb, le suivant de mise à jour et le parent de requête en une étape, des formes binaires pour l'enseignement et, lorsque n est fourni, le chemin complet de mise à jour et de requête du code BIT classique.
Comment les indices de Fenwick utilisent le bit de poids faible
Dans un binary indexed tree à indices 1-based, la cellule d'indice i est responsable d'un segment contigu du tableau sous-jacent dont la longueur égale le bit de poids faible de i. Cette longueur se calcule comme lsb égal à i AND la négation en complément à deux de i, souvent écrit i and minus i dans les langages à arithmétique modulaire sur entiers de largeur fixe.
Géométriquement, inverser tous les bits sous le un de poids le plus faible isole cette puissance de deux ; le ET bit à bit avec l'indice d'origine produit exactement cette puissance. La boucle classique de mise à jour part de l'indice modifié et remplace i par i plus lsb tant que i reste dans la taille n de l'arbre, de sorte que chaque pas saute à l'indice suivant qui doit absorber le delta.
La boucle classique de requête de préfixe part de l'extrémité droite du préfixe et remplace i par i moins lsb tant que i reste positif, en additionnant les cellules responsables qui pavent l'intervalle de un jusqu'à l'indice d'origine. Ensemble, ces deux parcours implémentent des sommes d'intervalle via l'inclusion de deux préfixes.
Comprendre une seule étape—suivant de mise à jour égal à i plus lsb, parent de requête égal à i moins lsb—suffit pour déboguer les erreurs off-by-one, dessiner l'arbre de responsabilités au tableau et vérifier qu'une implémentation correspond aux identités du manuel avant de l'intégrer dans un modèle de concours ou un pipeline analytique de production.
Quand les étapes d'un arbre de Fenwick sont utiles
Les coachs de programmation compétitive et les juges en ligne utilisent un calculateur d'indices d'arbre de Fenwick pour que les apprenants vérifient les pas parent et suivant tout en écrivant à la main les boucles de mise à jour et de requête. Les outils de préparation aux entretiens ont besoin d'un oracle déterministe qui s'accorde avec tout tutoriel BIT standard sur les mêmes entrées entières, y compris les indices gênants qui valent une puissance de deux moins un. Une validation échouée ne consomme pas le solde.
Gardez les indices dans la plage positive sur trente-deux bits, figez les tableaux de chemin dans les tests lorsque size est défini, et vous obtenez une navigation reproductible pour les devoirs, les captures de documentation et les edge workers sans monter votre propre bac à sable complet de structures de données.
Cas d’usage
Validation d'entretiens et de modèles
Comparez des implémentations BIT candidates à un oracle déterministe de séquences d'indices de mise à jour et de requête de préfixe pour des tailles fixes.
Questions fréquentes
Les indices sont-ils 0-based ou 1-based ?
1-based, comme dans la formulation standard de Fenwick / binary indexed tree. L'indice doit être un entier de 1 à 2147483647.
Pourquoi utiliser i & -i pour le bit de poids faible ?
En complément à deux, -i inverse les bits sous le 1 de poids le plus faible de i ; le ET bit à bit isole cette puissance de deux, qui est exactement la longueur de responsabilité de la cellule i.
Quels sont les chemins de l'indice 13 dans un arbre de taille 16 ?
Avec une taille de 16, le chemin de mise à jour est 13, 14, 16 : les cases qui absorbent un changement en 13. Le chemin de somme est 13, 12, 8 : les cases additionnées pour la somme cumulée jusqu'à 13.
À quoi sert un arbre de Fenwick ?
Il calcule des sommes cumulées et met à jour une valeur isolée en temps logarithmique. Chaque case stocke une plage partielle dont la longueur est une puissance de deux, si bien qu'une somme ou une mise à jour ne touche que peu de cases.
Quels indices peut-on saisir ?
Tout entier de 1 à 2147483647, la plus grande valeur positive sur 32 bits. Si vous indiquez aussi la taille de l'arbre, elle doit être au moins égale à l'indice et rester sous la même limite.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre 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)Exemple de requête
{
"index": 13
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.fenwick_index",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
La logique pure et déterministe coïncide octet pour octet entre l'usage gratuit dans le navigateur et les appels API payants.
Contrat d'entrée, champs de réponse et validation
Exemple : l'indice treize a le binaire zero-b one one zero one, bit de poids faible un, suivant de mise à jour quatorze, parent de requête douze ; avec size seize le chemin de mise à jour est treize puis quatorze puis seize, et celui de requête treize puis douze puis huit. Envoyez un corps JSON en POST avec le champ obligatoire index : un entier positif dans l'intervalle fermé de un à deux à la puissance trente et un moins un, le maximum positif signé sur trente-deux bits où les opérateurs bit à bit de JavaScript restent fidèles. Les alias i, idx et position sont acceptés. Le champ optionnel size (alias n, n_max, tree_size) est l'indice maximal de l'arbre ; lorsqu'il est présent, il doit être un entier au moins aussi grand que index et au plus la même borne supérieure. Les valeurs manquantes, non entières, nulles ou hors plage échouent avec invalid_input en nommant le champ et ne sont pas facturées. En cas de succès le corps inclut toujours index, lowest_set_bit, update_next, query_parent, les chaînes binary et lsb_binary avec préfixe zero-b, et une courte chaîne formula rappelant les identités. Lorsque size est fourni, le corps inclut aussi size, update_path comme liste ordonnée des indices visités par la boucle de mise à jour, query_path comme liste ordonnée visitée par la boucle de préfixe, et update_next_in_range comme booléen indiquant si le voisin de mise à jour d'un pas reste dans l'arbre. Associez la réponse à votre propre visualisation de tableaux si vous avez besoin d'un schéma ; ce endpoint ne calcule que l'arithmétique d'indices et ne stocke pas les valeurs de l'arbre ni n'effectue de requêtes de somme sur des tableaux utilisateur.
Où une API d'indices Fenwick prouve sa valeur
Comme l'implémentation est pure parse de niveau A, chaque appel réussi coûte le prix de base publié $0.002 sans jetons de modèle ni réseau sortant.
Cas d'intégration
Exercices BIT de concours et devoirs
Donnez aux élèves l'indice i et le size n optionnel ; vérifiez lowest_set_bit, update_next, query_parent et les chemins complets face aux boucles Fenwick écrites à la main.
Chemins golden pour docs et bibliothèques
Générez des fixtures update_path et query_path pour la documentation de binary indexed tree, les tests unitaires et les contrôles de portabilité entre langages.
Questions techniques
Comment calculer les indices parent et suivant d'un arbre de Fenwick ?
Envoyez un indice i positif 1-based. L'API renvoie lsb = i & -i, update_next = i + lsb et query_parent = i - lsb, plus les formes binaires de i et du lsb.
Que fait le paramètre optionnel size ?
Lorsque size n est défini (n >= index), la réponse ajoute update_path (i += lsb tant que i <= n) et query_path (i -= lsb tant que i > 0), comme les boucles BIT classiques.
Combien coûte le calculateur d'indices d'arbre de Fenwick ?
L'outil navigateur est gratuit. Les requêtes API utilisent le solde prépayé KIT à $0.002 par appel réussi ; une entrée invalide n'est pas facturée.