Indice padre di un heap binario
In un heap numerato da 0, l'indice 5 ha il padre in 2, perché la parte intera di 4 diviso 2 è 2. La radice non ha padre e viene rifiutata invece di ricevere una posizione inventata. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Indice
- 5
- Indicizzazione
- Zero
- Genitore
- 2
- Radice
- 0
Un heap binario conservato in un array è la struttura dietro code di priorità, heapsort e molte implementazioni di cammino minimo. Ogni manuale elenca una formula del padre, ma le due convenzioni di indicizzazione discordano di un'unità, e uno scarto di uno corrompe in silenzio il sift-up. Questo calcolatore dell'indice padre accetta l'indice di array di un nodo e la convenzione di numerazione — a partire da zero, con la radice all'indice zero, oppure a partire da uno, con la radice all'indice uno — e restituisce il padre con la forma chiusa corrispondente. Gli heap a partire da zero usano padre uguale al pavimento di indice meno uno su due. Gli heap a partire da uno usano padre uguale al pavimento di indice su due. La radice non ha padre e viene rifiutata invece di inventare uno scomparto negativo o fittizio.
Formule del padre con indicizzazione da zero e da uno
Un heap binario disposto in un array non memorizza mai puntatori al padre né ai figli. La risalita da un nodo al proprio padre è una formula di indice in forma chiusa, e quella formula dipende dal fatto che l'array sia numerato da zero oppure da uno.
Nella convenzione a partire da zero usata da C, Java, JavaScript, Python e dalla maggior parte degli heap di produzione, la radice occupa l'indice zero, i figli del nodo i stanno in due i più uno e due i più due, e il padre di un nodo che non è radice è il pavimento di i meno uno diviso due.
Nella convenzione a partire da uno usata da molti manuali, dallo pseudocodice in stile CLRS e da alcuni modelli da concorso, la radice occupa l'indice uno, i figli stanno in due i e due i più uno, e il padre è semplicemente il pavimento di i diviso due. Entrambe le identità sono esatte per indici interi; non sono approssimazioni e non sono intercambiabili. Questo calcolatore applica l'identità corrispondente dopo che Lei ha scelto la convenzione, e rifiuta la radice perché la radice non ha padre.
Confondere le due convenzioni è il classico errore di uno: trattare un array di linguaggio come se partisse da uno, o un diagramma da manuale come se partisse da zero, produce un padre a uno scomparto dalla verità e rompe in silenzio il sift-up e il decrease-key.
Contratto di ingresso, forma della risposta ed errori
Quando indexing è zero l'indice deve essere almeno zero; quando indexing è one l'indice deve essere almeno uno. La radice della convenzione scelta — zero in un heap a partire da zero, uno in un heap a partire da uno — viene rifiutata con un messaggio che nomina quella radice, perché inventare un padre a meno uno o avvolgere fino all'ultimo scomparto sarebbe una menzogna. Esempio: indice cinque con la convenzione a partire da zero per omissione produce padre due, perché il pavimento di quattro su due è due.
Esempio: indice quattro con indicizzazione a partire da uno produce padre due, mentre lo stesso quattro in un heap a partire da zero avrebbe padre uno — quella coppia è l'intera ragione per cui la convenzione è un campo. La convalida fallita non viene fatturata.
Dove un calcolatore dell'indice padre merita il proprio posto
La preparazione ai colloqui, i corsi di algoritmi e le code di priorità di produzione hanno bisogno della stessa risalita verso il padre, e discordano sulla numerazione. Chi verifica una traccia di sift-up vuole confermare che il padre di cinque è due in un array di linguaggio e che il padre di quattro è due su un foglio a partire da uno, senza invertire la formula a mano a ogni passo.
I correttori automatici dei compiti di strutture servono un oracolo deterministico che rifiuti la radice perché non ha padre, invece di restituire un meno uno silenzioso che un invio difettoso potrebbe trattare come successo. Chi porta un heap da manuale in un linguaggio a partire da zero, o il contrario, può fissare entrambe le convenzioni nei test e cogliere lo scarto di uno prima della pubblicazione.
I visualizzatori e le impalcature da concorso che disegnano l'albero da un array possono chiedere il padre di ogni scomparto non radice e tracciare gli archi senza incorporare due copie della formula. Tenga le richieste modeste, fissi l'intero padre nei test e otterrà risalite riproducibili per compiti, plugin LMS e worker al bordo senza allestire una biblioteca locale di heap.
Casi d'uso
Tracce di compiti e colloqui
Verifichi il padre di qualsiasi scomparto dell'array tracciando sift-up o heapsort, passando dalla numerazione da manuale a partire da uno agli array di linguaggio a partire da zero.
Correttori automatici e oracoli da concorso
Valuti le domande sugli indici di heap con una formula deterministica del padre che rifiuta la radice perché non ha padre, invece di inventare un indice fittizio.
Portare heap da una convenzione all'altra
Fissi le risalite verso il padre traducendo lo pseudocodice CLRS a partire da uno in un array di linguaggio a partire da zero, o il contrario, prima che lo scarto di uno venga pubblicato.
Domande frequenti
Come si ottiene il padre di un nodo in un array di heap binario?
Negli heap a partire da zero il padre è floor((index − 1) / 2). Negli heap a partire da uno il padre è floor(index / 2).
Qual è la differenza tra indicizzazione da zero e da uno in un heap?
Gli heap a partire da zero pongono la radice all'indice 0 e usano parent = floor((i − 1) / 2). Quelli a partire da uno pongono la radice all'indice 1 e usano parent = floor(i / 2). Lo stesso numero può nominare padri distinti secondo la convenzione.
Che succede se si chiede il padre della radice?
La radice (indice 0 se indexing è zero, indice 1 se indexing è one) non ha padre, e il calcolatore non ne inventerà uno.
Qual è il padre dell'indice 5 in un heap binario a partire da zero?
Due. floor((5 − 1) / 2) = 2. Lo stesso indice in un heap a partire da uno è pure 2, ma il 4 è la coppia che diverge: padre 1 a partire da zero, padre 2 a partire da uno.
Perché un errore di una posizione nella formula del padre conta tanto?
Perché il risultato indica una posizione reale accanto al padre vero, quindi nulla si blocca: la risalita di un elemento e la riduzione di priorità confrontano e scambiano gli elementi sbagliati, e l'ordine dell'heap si rompe in silenzio.
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/heap-parent-index \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"index":5}'const res = await fetch("https://api.kit.forhosting.com/dev/heap-parent-index", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"index": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/heap-parent-index",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"index": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/heap-parent-index", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"index":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"index":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/heap-parent-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": 5
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.heap_parent_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
Formule del padre con indicizzazione da zero e da uno
La risposta ripete l'indice e la convenzione che Lei ha inviato, nomina il padre, nomina l'indice della radice di quella convenzione, riscrive la formula come stringa che Lei può stampare accanto alla risposta, e imposta is_root a false in ogni risalita riuscita così i client trattano il successo come «esiste un padre reale».
Contratto di ingresso, forma della risposta ed errori
Invii con POST un corpo JSON con index obbligatorio: un intero finito che nomina lo scomparto dell'array del nodo di cui Lei vuole il padre. indexing è facoltativo e vale zero per omissione, ossia un array a partire da zero con la radice all'indice zero; invii one quando il Suo heap è numerato a partire da uno. Gli alias i e node sono accettati per index, e convention per indexing, così i frammenti copiati dagli appunti di lezione vengono ancora analizzati. Valori non finiti, booleani, stringhe vuote e un index assente falliscono con invalid_input. Gli indici oltre il limite di intero sicuro vengono rifiutati così i numeri JSON restano esatti sotto la divisione a pavimento. In caso di successo il corpo include l'index e l'indexing ripetuti, parent come intero calcolato, is_root a false, root come scomparto radice della convenzione, e formula come padre uguale al pavimento di parentesi indice meno uno chiusura su due, oppure padre uguale al pavimento di indice su due.
Dove un calcolatore dell'indice padre merita il proprio posto
Poiché si tratta di parse di livello A, ogni chiamata riuscita costa il prezzo base pubblicato $0.002 senza gettoni di modello né rete in uscita, e un ingresso non valido non consuma il saldo.
Domande tecniche
Quanto costa il calcolatore dell'indice padre di un heap binario?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo prepagato KIT a $0.002 per chiamata riuscita; un ingresso non valido non viene fatturato.