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

2.5 KiB
Raw Blame History

id challengeType videoUrl title
5900f4b41000cf542c50ffc7 5 问题328成本最低的搜索

Description

我们试图通过提问来找到从整数集{1,2...n}中选择的隐藏数字。我们要求的每个数字问题的成本等于所要求的数字我们得到三个可能的答案之一“您的猜测低于隐藏的数字”或“是的就是它”或“您的猜测是高于隐藏号码“。给定n的值最优策略最小化了最坏情况下的总成本即所有问题的总和。例如

如果n = 3我们能做的最好的就是问号码“2”。答案将立即引导我们找到隐藏号码总费用= 2

如果n = 8我们可能决定使用“二分搜索”类型的策略我们的第一个问题是“4”如果隐藏数字高于4我们将需要一个或两个额外的问题。让我们的第二个问题是“6”。如果隐藏数字仍高于6我们将需要第三个问题以区分7和8.因此我们的第三个问题将是“7”这个最坏情况的总成本将是4 + 6 + 7 = 17。

通过将“5”作为我们的第一个问题我们可以大大改善n = 8的最坏情况成本。如果我们被告知隐藏的数字高于5我们的第二个问题将是“7”那么我们将确定隐藏的数字是什么总成本为5 + 7 = 12。如果我们被告知隐藏号码低于5我们的第二个问题将是“3”如果隐藏号码低于3我们的第三个问题将是“1”总成本为5 + 3 + 1 = 9。自12> 9以来该策略的最坏情况成本为12.这比我们之前使用“二元搜索”策略所取得的成本更好;它也优于或等于任何其他策略。所以事实上我们刚刚描述了n = 8的最优策略。

假设Cn是通过n的最优策略实现的最坏情况成本如上所述。因此C1= 0C2= 1C3= 2C8= 12.类似地C100= 400Cn= 17575。

找到Cn

Instructions

Tests

tests:
  - text: <code>euler328()</code>应返回260511850222。
    testString: assert.strictEqual(euler328(), 260511850222);

Challenge Seed

function euler328() {
  // Good luck!
  return true;
}

euler328();

Solution

// solution required

/section>