Intervista:Ricerca di primo bit impostato in un enorme bitmap
In uno slot di parcheggio che può contenere milione di auto, è necessario trovare un posto auto gratuito . Non vi è alcuna condizione su dove possa essere la fessura, cioè, il parcheggio può avere più ingressi e trovare uno slot vicino all'ingresso, ecc., Non importa. La domanda era: che tipo di struttura dei dati dovrebbe essere usata e quale sarebbe la complessità delle varie operazioni.
Ho suggerito di utilizzare un array di bit di milioni di bit, con 0/1 per lo slot preso/libero, quindi per trovare il punto libero la domanda tradotta per trovare il primo bit impostato. Non dare per scontato nulla su quante macchine ci sono, ecc., Ad esempio, la matrice di bit potrebbe essere scarsa o densa.
Qual è il modo più veloce per trovare un bit impostato in un'enorme bitmap? Ho suggerito la ricerca binaria + efficiente ffs() per parola come schema.
Se non possiamo assumere nulla sul contenuto dell'array, quindi una ricerca binaria non aiuterà qui; dovrai usare una ricerca lineare. –
In c, è possibile passare attraverso gli slot in gruppi di 64 bit (utilizzando uint64_t) e verificare il primo valore diverso da zero. –
Fare una ricerca binaria su un albero di Fenwick (Binary Indexed Tree, BIT). L'operazione di aggiornamento richiede O (log n). La ricerca del primo bit impostato è O ((log n)^2) – nhahtdh