Calcolatore indici Fenwick
Inserisca un indice e veda come si muove un albero di Fenwick a partire da esso: 13 in binario è 1101, il suo bit più basso vale 1, il passo di aggiornamento porta a 14 e quello di somma a 12. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Indice
- 13
- Dimensione
- 16
- Bit attivo più basso
- 1
- Successivo dell'aggiornamento
- 14
- Genitore della query
- 12
- Binario
- 0b1101
Un albero di Fenwick, chiamato anche binary indexed tree, risponde a somme di prefisso e aggiornamenti puntuali in tempo logaritmico memorizzando intervalli parziali le cui lunghezze sono potenze di due. Ogni passo di navigazione dipende da un trucco sui bit: il bit meno significativo dell'indice 1-based corrente, scritto lsb uguale a i AND il negativo di i in complemento a due. Sommare quel lsb percorre la catena di aggiornamento; sottrarlo percorre la catena di query di prefisso. Studenti, programmatori competitivi e autori di librerie hanno bisogno di quegli indici padre e successivo senza riderivare le identità sotto la pressione di un esame. Questo calcolatore di indici dell'albero di Fenwick accetta un indice positivo i e, opzionalmente, una dimensione dell'albero n; restituisce il lsb, il successivo di aggiornamento e il padre di query in un passo, forme binarie per la didattica e, quando n è impostato, il percorso completo di aggiornamento e di query del codice BIT classico.
Come gli indici di Fenwick usano il bit meno significativo
In un binary indexed tree con indici 1-based, la cella all'indice i è responsabile di un segmento contiguo dell'array sottostante la cui lunghezza è uguale al bit meno significativo di i. Quella lunghezza si calcola come lsb uguale a i AND la negazione in complemento a due di i, spesso scritto i and minus i nei linguaggi con aritmetica modulare su interi a larghezza fissa. Geometricamente, invertire tutti i bit sotto l'uno meno significativo isola quella potenza di due; l'AND bit a bit con l'indice originale produce esattamente quella potenza.
Il ciclo classico di aggiornamento parte dall'indice modificato e sostituisce i con i più lsb finché i resta entro la dimensione n dell'albero, così ogni passo salta all'indice successivo che deve assorbire il delta. Il ciclo classico di query di prefisso parte dall'estremo destro del prefisso e sostituisce i con i meno lsb finché i resta positivo, sommando le celle responsabili che ricoprono l'intervallo da uno fino all'indice originale. Insieme, quei due percorsi implementano somme di intervallo tramite inclusione di due prefissi.
Capire un solo passo—successivo di aggiornamento uguale a i più lsb, padre di query uguale a i meno lsb—basta per debuggare errori off-by-one, disegnare l'albero delle responsabilità alla lavagna e verificare che un'implementazione corrisponda alle identità del manuale prima di integrarla in un template da gara o in una pipeline analitica di produzione.
Quando i passi di un albero di Fenwick aiutano
Coach di programmazione competitiva e judge online usano un calcolatore di indici dell'albero di Fenwick affinché gli allievi controllino passi padre e successivo mentre scrivono a mano i cicli di aggiornamento e query. Gli strumenti di preparazione ai colloqui necessitano di un oracolo deterministico che concordi con ogni tutorial BIT standard sulle stesse entrate intere, compresi indici scomodi che valgono una potenza di due meno uno. La validazione fallita non consuma il saldo.
Mantenga gli indici nell'intervallo positivo a trentadue bit, fissi gli array di percorso nei test quando size è impostato, e otterrà navigazione riproducibile per compiti, screenshot di documentazione e edge worker senza montare un sandbox completo di strutture dati proprio.
Casi d'uso
Validazione di colloqui e template
Confronti implementazioni BIT candidate con un oracolo deterministico di sequenze di indici di aggiornamento e query di prefisso per dimensioni fisse.
Domande frequenti
Gli indici sono 0-based o 1-based?
1-based, come nella formulazione standard di Fenwick / binary indexed tree. L'indice deve essere un intero da 1 a 2147483647.
Perché usare i & -i per il bit meno significativo?
In complemento a due, -i inverte i bit sotto l'1 meno significativo di i; l'AND bit a bit isola quella potenza di due, che è esattamente la lunghezza di responsabilità della cella i.
Quali sono i percorsi dell'indice 13 in un albero di dimensione 16?
Con dimensione 16, il percorso di aggiornamento è 13, 14, 16: le celle che assorbono una modifica in 13. Il percorso di somma è 13, 12, 8: le celle da sommare per ottenere la somma cumulativa fino a 13.
A cosa serve un albero di Fenwick?
Calcola somme cumulative e aggiorna singoli valori in tempo logaritmico. Ogni cella conserva un intervallo parziale lungo una potenza di due, quindi una somma o un aggiornamento toccano solo poche celle.
Quali indici posso inserire?
Qualsiasi intero da 1 a 2147483647, il massimo valore positivo a 32 bit. Se indica anche la dimensione dell'albero, deve essere almeno pari all'indice e restare entro lo stesso limite.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo 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)Esempio di richiesta
{
"index": 13
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.fenwick_index",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
La logica pura e deterministica coincide byte per byte tra l'uso gratuito nel browser e le chiamate API a pagamento.
Contratto di input, campi di risposta e validazione
Esempio: l'indice tredici ha binario zero-b one one zero one, bit meno significativo uno, successivo di aggiornamento quattordici, padre di query dodici; con size sedici il percorso di aggiornamento è tredici poi quattordici poi sedici, e quello di query è tredici poi dodici poi otto. Invii un corpo JSON con POST con il campo obbligatorio index: un intero positivo nell'intervallo chiuso da uno a due elevato a trentuno meno uno, il massimo positivo con segno a trentadue bit dove gli operatori bit a bit di JavaScript restano fedeli. Sono accettati gli alias i, idx e position. Il campo opzionale size (alias n, n_max, tree_size) è l'indice massimo dell'albero; quando presente deve essere un intero almeno grande quanto index e al più lo stesso limite superiore. Valori mancanti, non interi, zero o fuori intervallo falliscono con invalid_input nominando il campo e non vengono fatturati. In caso di successo il corpo include sempre index, lowest_set_bit, update_next, query_parent, stringhe binary e lsb_binary con prefisso zero-b, e una breve stringa formula che riafferma le identità. Quando size è fornito, il corpo include anche size, update_path come lista ordinata di indici visitati dal ciclo di aggiornamento, query_path come lista ordinata visitata dal ciclo di prefisso, e update_next_in_range come booleano che indica se il vicino di aggiornamento di un passo resta ancora dentro l'albero. Abbini la risposta alla propria visualizzazione di array se le serve un diagramma; questo endpoint calcola solo aritmetica di indici e non memorizza valori dell'albero né esegue query di somma su array utente.
Dove un'API di indici Fenwick dimostra il suo valore
Poiché l'implementazione è pure parse di livello A, ogni chiamata riuscita costa il prezzo base pubblicato $0.002 senza token di modello e senza rete in uscita.
Casi di integrazione
Esercizi BIT di gara e compiti
Fornisca agli studenti l'indice i e lo size n opzionale; verifichi lowest_set_bit, update_next, query_parent e i percorsi completi rispetto a cicli Fenwick scritti a mano.
Percorsi golden per docs e librerie
Generi fixture di update_path e query_path per documentazione di binary indexed tree, test unitari e controlli di portabilità tra linguaggi.
Domande tecniche
Come si calcolano gli indici padre e successivo dell'albero di Fenwick?
Invii un indice i positivo 1-based. L'API restituisce lsb = i & -i, update_next = i + lsb e query_parent = i - lsb, più le forme binarie di i e del lsb.
Cosa fa il parametro opzionale size?
Quando size n è impostato (n >= index), la risposta aggiunge update_path (i += lsb finché i <= n) e query_path (i -= lsb finché i > 0), come i cicli BIT classici.
Quanto costa il calcolatore di indici dell'albero di Fenwick?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo prepagato KIT a $0.002 per chiamata riuscita; l'input non valido non viene fatturato.