Files
hsa/Html/apps/static/68bacdfadf5aeae0912f7f18-基础算法-二分.html

64 lines
2.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<!-- 你的其他样式 -->
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script>
MathJax.config = {
tex: {
inlineMath: [['$', '$'], ['\(', '\)']]
},
svg: {
fontCache: 'global'
}
};
</script>
</head>
<body>
<h1>二分查找与二分答案</h1>
<h2>二分查找</h2>
<h3>引入</h3>
<p>二分是一个很简单基础,但很重要的知识点,为以后许多高级的数据结构与算法铺垫。</p>
<p>下面是一个用二分的简单场景:</p>
<p>假设小明从0到1000之间选择了一个数字但不告诉你,你可以不断猜测这个数,每次猜测小明会告知你的猜测得过大还是过小,问最多几次就一定能猜中?</p>
<p>答案是利用二分查找的原理,猜测11次即可。</p>
<ol>
<li>对于0到1000的答案备选区,猜测中位数500,假设过小,</li>
<li>则对于501到1000的答案备选区,猜测750,假设过大</li>
<li>则对于501到749的答案备选区,猜测625,假设过小,</li>
<li>则对于626到749区间......</li>
<li>(688-749)</li>
<li>(718-749)</li>
<li>(734-749)</li>
<li>(742-749)</li>
<li>(746-749)</li>
<li>(748-749)</li>
<li>(749-749)</li>
</ol>
<p>在最差的情况下,第11次的答案备选区就一定长度为1了,也就是必然是答案。</p>
<p>因此如果序列是有序的,就可以通过二分查找快速定位所需要的数据。</p>
<h4>思考题(询问Agent以学习计算方法,或验证你的答案)</h4>
<p>对于上面那个题目,如果问题区间是1到4000,最差情况下需要猜测几次?</p>
<h3>练习:二分查找</h3>
<p>试试对于下面的题目,用代码实现一下二分查找。</p>
<h4>题目:有序数组寻址</h4>
<p>给出一个长度为n的有序数组(从小到大),有q次询问,对于每次询问,输出指定数在数组中的下标。如果不存在则输出-1。</p>
<h5>输入</h5>
<p>第一行一个整数n。(1&lt;=n&lt;=10^5)</p>
<p>第二行n个用空格分开的整数ai。(0&lt;=ai&lt;=10^8)</p>
<p>第三行一个整数q,表示询问的次数。(1&lt;=q&lt;=10^4)</p>
<p>后q行,每行一个整数b,表示询问的数。(0&lt;=b&lt;=10^8)</p>
<h5>输出</h5>
<p>q行,每行一个整数,对应每次询问的返回结果</p>
<h5>提示:</h5>
<p>完成代码后,通知Agent进行评测。</p>
<p>如果你还不完全会这个算法,询问Agent获取提示并进行学习。</p>
</body>
</html>