Supponiamo di ottenere un numero (usando i bit nella codifica binaria).
Quanto velocemente riesci a trovare (o determinare che non esiste) ?
Ad esempio, dato l'ingresso , si può produrre n = 27, k = 10 .n = 27 , k = 10
Un algoritmo ingenuo per il problema dovrebbe andare oltre tutti i possibili valori per e cercare un valore di che soddisfi la proprietà.
Una semplice osservazione è che non è necessario controllare valori di inferiori a o maggiori di . Tuttavia (anche se potessimo controllare solo possibili valori per valore) questo finisce in un algoritmo inefficiente che è esponenziale nella dimensione dell'input.
Un approccio alternativo sarebbe quello di esaminare i possibili valori di (è sufficiente controllare ) e per ogni controllo per possibili valori. Possiamo quindi usare:
Quindi per un dato dobbiamo solo controllare valori nell'intervallo , facendo così usando la ricerca binaria (quando è fisso, aumenta monotonicamente in ), questo dà un algoritmo polinomiale in esecuzione in .
Questo mi sembra ancora inefficiente e suppongo che questo potrebbe essere risolto in tempo lineare (nella dimensione di input).