3.0 KiB
id | title | challengeType | forumTopicId | dashedName |
---|---|---|---|---|
5900f4b41000cf542c50ffc7 | Problema 328: Ricerca a costo minore | 1 | 301985 | problem-328-lowest-cost-search |
--description--
Stiamo cercando di trovare un numero nascosto selezionato dal set di interi {1, 2, ..., n
} facendo domande. Ogni numero (domanda) che chiediamo, ha un costo pari al numero chiesto e otteniamo una delle tre risposte possibili:
- "La tua ipotesi è inferiore al numero nascosto", o
- "Sì, è così!", o
- "La tua ipotesi è più alta del numero nascosto".
Dato il valore di n
, una strategia ottimale minimizza il costo totale (es. la somma di tutte le domande poste) per il caso peggiore. Ad es.
Se n = 3
, il meglio che possiamo fare è ovviamente chiedere il numero "2". La risposta ci porterà immediatamente a trovare il numero nascosto (a un costo totale = 2).
Se n = 8
, potremmo decidere di utilizzare un tipo di strategia di "ricerca binaria": la nostra prima domanda sarebbe "4" e se il numero nascosto è superiore a 4 avremo bisogno di una o due domande aggiuntive. Sia "6" la nostra seconda domanda. Se il numero nascosto è ancora superiore a 6, avremo bisogno di una terza domanda per operare una discriminazione tra 7 e 8. Così, la nostra terza domanda sarà "7" e il costo totale per questo scenario peggiore sarà di 4 + 6 + 7 = \mathbf{\color{red}{17}}
.
Possiamo migliorare notevolmente il costo peggiore per n = 8
, scegliendo "5" come nostra prima domanda. Se ci viene detto che il numero nascosto è superiore a 5, la nostra seconda domanda sarà "7", allora sapremo per certo qual'è il numero nascosto (per un costo totale di 5 + 7 = \mathbf{\color{blue}{12}}
). Se ci viene detto che il numero nascosto è inferiore a 5, la nostra seconda domanda sarà "3" e se il numero nascosto è inferiore a 3 la nostra terza domanda sarà "1", dando un costo totale di 5 + 3 + 1 = \mathbf{\color{blue}{9}}
. Dal momento che \mathbf{\color{blue}{12 > 9}}
, il costo più basso per questa strategia è 12. Questo è meglio di quello che abbiamo realizzato in precedenza con la strategia di "ricerca binaria"; è anche migliore o uguale a qualsiasi altra strategia. Così, infatti, abbiamo appena descritto una strategia ottimale per n = 8
.
Sia C(n)
sia il costo peggiore ottenuto da una strategia ottimale per n
, come descritto sopra. Così C(1) = 0
, C(2) = 1
, C(3) = 2
e C(8) = 12
.
Allo stesso modo, C(100) = 400
e \displaystyle\sum_{n = 1}^{100} C(n) = 17575
.
Trova \displaystyle\sum_{n = 1}^{200\\,000} C(n)
.
--hints--
lowestCostSearch()
dovrebbe restituire 260511850222
.
assert.strictEqual(lowestCostSearch(), 260511850222);
--seed--
--seed-contents--
function lowestCostSearch() {
return true;
}
lowestCostSearch();
--solutions--
// solution required