57 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| id: 5900f4b41000cf542c50ffc7
 | |
| title: 'Problema 328: Pesquisa pelo menor custo'
 | |
| challengeType: 5
 | |
| forumTopicId: 301985
 | |
| dashedName: problem-328-lowest-cost-search
 | |
| ---
 | |
| 
 | |
| # --description--
 | |
| 
 | |
| Estamos tentando encontrar um número oculto selecionado de um conjunto de números inteiros {1, 2, ..., $n$} fazendo perguntas. Cada número (pergunta) que perguntamos, tem um <u>custo igual ao número solicitado</u> e nós recebemos uma de três respostas possíveis:
 | |
| 
 | |
| - "Seu palpite é menor que o número oculto", ou
 | |
| - "Sim, é isso!", ou
 | |
| - "Seu palpite é maior que o número oculto".
 | |
| 
 | |
| Dado o valor de $n$, uma estratégia ideal minimiza o custo total (ou seja, a soma de todas as perguntas feitas) <u>para o pior caso possível</u>. Ex:
 | |
| 
 | |
| Se $n = 3$, o melhor que podemos fazer é obviamente perguntar o número "<strong>2</strong>". A resposta nos levará imediatamente a encontrar o número oculto (a um custo total de 2).
 | |
| 
 | |
| Se $n = 8$, nós podemos decidir usar um tipo de estratégia com "busca binária": nossa primeira questão seria "<strong>4</strong>" e se o número oculto for maior que 4, precisaremos de uma ou duas questões adicionais. Considere que nossa segunda pergunta seja "<strong>6</strong>". Se o número oculto ainda for superior a 6, necessitaremos de uma terceira pergunta para discriminar entre 7 e 8. Assim, nossa terceira pergunta será "<strong>7</strong>" e o custo total para este cenário pior, será $4 + 6 + 7 = \mathbf{\color{red}{17}}$.
 | |
| 
 | |
| Podemos melhorar consideravelmente o pior custo para $n = 8$, tendo "<strong>5</strong>" como nossa primeira pergunta. Se nos disserem que o número oculto é maior que 5, a nossa segunda pergunta será "<strong>7</strong>", então saberemos com certeza qual é o número oculto (para um custo total de $5 + 7 = \mathbf{\color{blue}{12}}$). Se nos disserem que o número oculto é menor que 5, nossa segunda pergunta será "<strong>3</strong>". Se for menor que 3, nossa terceira pergunta será "<strong>1</strong>", dando um custo total de $5 + 3 + 1 = \mathbf{\color{blue}{9}}$. Como $\mathbf{\color{blue}{12 > 9}}$, o pior caso de custo para esta estratégia é <strong><span style="color: red;">12</span></strong>. Isso é melhor do que o que alcançamos anteriormente com a estratégia de "pesquisa binária"; também é melhor ou igual a qualquer outra estratégia. Então, de fato, acabamos de descrever uma estratégia ideal para $n = 8$.
 | |
| 
 | |
| Considere $C(n)$ como o pior caso de custo alcançado com uma estratégia ideal para $n$, como descrito acima. Assim, $C(1) = 0$, $C(2) = 1$, $C(3) = 2$ e $C(8) = 12$.
 | |
| 
 | |
| Da mesma forma, $C(100) = 400$ e $\displaystyle\sum_{n = 1}^{100} C(n) = 17575$.
 | |
| 
 | |
| Encontre $\displaystyle\sum_{n = 1}^{200.000} C(n)$.
 | |
| 
 | |
| # --hints--
 | |
| 
 | |
| `lowestCostSearch()` deve retornar `260511850222`.
 | |
| 
 | |
| ```js
 | |
| assert.strictEqual(lowestCostSearch(), 260511850222);
 | |
| ```
 | |
| 
 | |
| # --seed--
 | |
| 
 | |
| ## --seed-contents--
 | |
| 
 | |
| ```js
 | |
| function lowestCostSearch() {
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| lowestCostSearch();
 | |
| ```
 | |
| 
 | |
| # --solutions--
 | |
| 
 | |
| ```js
 | |
| // solution required
 | |
| ```
 |