la domanda è come questa: esiste un elenco ordinato di n numeri. Dato x, trova un numero che è uguale a x nella lista ordinata. Qui assumiamo che x sia effettivamente nella lista. C'è un oracolo che può rispondere "sì" o "no" alla tua domanda "se x> = y?". A differenza della normale ricerca binaria, l'oracolo può mentire una volta alla tua domanda. Il modo più ingenuo per risolvere questo problema è che poni ogni domanda due volte all'oracolo. Se le due risposte sono le stesse, sai che l'orale non sta mentendo. Questo algoritmo ci serve confrontare 2log_2 (n) volte. Ma questa domanda mi chiede di trovare un algoritmo in grado di trovare x usando solo i confronti log_2 (n) + o (logn).come fare la ricerca binaria in un modello di bugia?
Ho provato molto duramente ma non ci sono riuscito. Qualcuno può darmi qualche consiglio su come risolvere questo problema? Grazie.
'2 * log_2 (N)' e 'log_2 (n) + O (log (N))' sono entrambi 'O (log (N))'. La costante nascosta può essere utilizzata per modificare la base del registro. Sei sicuro che quelli erano i criteri di soluzione? – phs
ok. La complessità è la stessa, che è O (log (N)). Hai ragione. Tuttavia, la domanda mi chiede di trovare un algoritmo che costa solo il confronto log_2 (n) + o (logn). Questo è meno di 2 * log_2 (n) confronti nella ricerca binaria ingenua, chiedendo due volte ogni volta. Mi dispiace di non chiarire abbastanza la questione. –
Si noti che è necessario chiedere tre volte di rilevare la risposta corretta se una delle risposte è bugie. – OleGG