freeCodeCamp/curriculum/challenges/italian/10-coding-interview-prep/project-euler/problem-328-lowest-cost-sea...

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