当前位置: 首页 > news >正文

淘宝客网站主题下载游戏培训学校

淘宝客网站主题下载,游戏培训学校,seo职位,做网站常用哪种语言二分算法深度解析 一、二分算法基础概念1.1 算法核心思想1.2 算法基本流程1.3 算法复杂度分析1.4 算法正确性证明 二、二分算法基础实现2.1 基本二分查找#xff08;有序数组#xff09;2.2 二分查找的递归实现2.3 二分查找的常见错误 三、二分算法变种问题3.1 查找第一个等于… 二分算法深度解析 一、二分算法基础概念1.1 算法核心思想1.2 算法基本流程1.3 算法复杂度分析1.4 算法正确性证明 二、二分算法基础实现2.1 基本二分查找有序数组2.2 二分查找的递归实现2.3 二分查找的常见错误 三、二分算法变种问题3.1 查找第一个等于目标值的位置3.2 查找最后一个等于目标值的位置3.3 查找第一个大于等于目标值的位置3.4 查找最后一个小于等于目标值的位置 四、二分算法在特殊数组中的应用4.1 在旋转有序数组中搜索4.2 寻找峰值4.3 在二维有序矩阵中搜索 五、二分答案思想与应用5.1 二分答案的核心思想5.2 经典应用分割数组的最大值5.3 经典应用寻找最小的k满足条件 六、二分算法的优化与技巧6.1 避免mid计算溢出6.2 浮点数二分6.3 三分查找适用于单峰函数 七、二分算法实际应用场景7.1 数据搜索与查询7.2 算法优化7.3 科学计算与数值分析7.4 工程实践 二分算法Binary Search Algorithm是一种高效的搜索策略思想简洁而强大从基本的有序数组搜索到复杂的算法问题求解以其对数级的时间复杂度成为算法设计中的核心技术之一。本文我将系统讲解二分算法的核心原理、常见变种、实现细节、应用及优化技巧带你全面掌握这一基础而重要的算法。 一、二分算法基础概念 1.1 算法核心思想 二分算法又称二分查找或折半查找其核心思想是通过不断将搜索区间减半逐步缩小目标元素的可能位置从而在对数时间内完成搜索。该算法的基本前提是数据结构有序通过比较中间元素与目标值的大小关系决定下一步搜索的区间直至找到目标元素或确定目标元素不存在。 1.2 算法基本流程 初始化确定搜索区间的左右边界通常为left0和rightn-1假设数组长度为n。计算中间位置计算区间中间位置mid left (right - left) / 2避免溢出的写法为mid left ((right - left) 1)。比较与缩小区间 若中间元素等于目标值返回中间位置。若中间元素大于目标值更新右边界为mid - 1在左半区间继续搜索。若中间元素小于目标值更新左边界为mid 1在右半区间继续搜索。 终止条件当left right时搜索区间为空目标元素不存在。 1.3 算法复杂度分析 时间复杂度二分算法的时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)其中n为搜索空间的大小。每次迭代将搜索区间减半因此最多需要 log ⁡ 2 n \log_2 n log2​n次迭代。空间复杂度通常为 O ( 1 ) O(1) O(1)仅使用常数级别的额外空间。 1.4 算法正确性证明 二分算法的正确性可以通过数学归纳法证明 当搜索区间长度为1时算法正确判断元素是否存在。假设搜索区间长度为k时算法正确当长度为k1时通过比较中间元素将问题分解为长度不超过k/2的子问题由归纳假设知子问题正确故原问题正确。 二、二分算法基础实现 2.1 基本二分查找有序数组 public class BinarySearch {/*** 在有序数组中查找目标值的索引* param nums 有序数组* param target 目标值* return 目标值的索引不存在返回-1*/public int search(int[] nums, int target) {int left 0, right nums.length - 1;while (left right) {int mid left ((right - left) 1); // 避免溢出的mid计算if (nums[mid] target) {return mid;} else if (nums[mid] target) {left mid 1;} else {right mid - 1;}}return -1;}public static void main(String[] args) {BinarySearch bs new BinarySearch();int[] nums {1, 3, 5, 7, 9, 11, 13};System.out.println(bs.search(nums, 7)); // 输出3System.out.println(bs.search(nums, 8)); // 输出-1} }2.2 二分查找的递归实现 public class RecursiveBinarySearch {public int search(int[] nums, int target) {return recursiveSearch(nums, target, 0, nums.length - 1);}private int recursiveSearch(int[] nums, int target, int left, int right) {if (left right) {return -1;}int mid left ((right - left) 1);if (nums[mid] target) {return mid;} else if (nums[mid] target) {return recursiveSearch(nums, target, mid 1, right);} else {return recursiveSearch(nums, target, left, mid - 1);}} }2.3 二分查找的常见错误 边界条件处理错误 终止条件应为left right而非left right否则可能漏掉最后一个元素。更新边界时应为left mid 1和right mid - 1避免陷入死循环。 mid计算溢出 错误写法mid (left right) / 2当left和right接近整数最大值时可能溢出。正确写法mid left ((right - left) 1)使用减法和移位避免溢出。 返回条件错误 找到目标值后应立即返回避免继续无效搜索。 三、二分算法变种问题 3.1 查找第一个等于目标值的位置 public class FirstEqual {public int searchInsert(int[] nums, int target) {int left 0, right nums.length - 1;while (left right) {int mid left ((right - left) 1);if (nums[mid] target) {right mid - 1;} else {left mid 1;}}return left;}public static void main(String[] args) {FirstEqual fe new FirstEqual();int[] nums {1, 3, 5, 7, 9};System.out.println(fe.searchInsert(nums, 6)); // 输出3} }3.2 查找最后一个等于目标值的位置 public class LastEqual {public int search(int[] nums, int target) {int left 0, right nums.length - 1;while (left right) {int mid left ((right - left) 1);if (nums[mid] target) {left mid 1;} else {right mid - 1;}}return right;} }3.3 查找第一个大于等于目标值的位置 public class FirstGreaterEqual {public int search(int[] nums, int target) {int left 0, right nums.length - 1;while (left right) {int mid left ((right - left) 1);if (nums[mid] target) {right mid - 1;} else {left mid 1;}}return left;} }3.4 查找最后一个小于等于目标值的位置 public class LastLessEqual {public int search(int[] nums, int target) {int left 0, right nums.length - 1;while (left right) {int mid left ((right - left) 1);if (nums[mid] target) {left mid 1;} else {right mid - 1;}}return right;} }四、二分算法在特殊数组中的应用 4.1 在旋转有序数组中搜索 public class SearchInRotatedArray {public int search(int[] nums, int target) {if (nums null || nums.length 0) {return -1;}int left 0, right nums.length - 1;while (left right) {int mid left ((right - left) 1);if (nums[mid] target) {return mid;}// 左半部分有序if (nums[left] nums[mid]) {if (nums[left] target target nums[mid]) {right mid - 1;} else {left mid 1;}} else { // 右半部分有序if (nums[mid] target target nums[right]) {left mid 1;} else {right mid - 1;}}}return -1;} }4.2 寻找峰值 public class FindPeakElement {public int findPeakElement(int[] nums) {int left 0, right nums.length - 1;while (left right) {int mid left ((right - left) 1);if (nums[mid] nums[mid 1]) {// 峰值在左半部分right mid;} else {// 峰值在右半部分left mid 1;}}return left;} }4.3 在二维有序矩阵中搜索 public class Search2DMatrix {public boolean searchMatrix(int[][] matrix, int target) {if (matrix null || matrix.length 0 || matrix[0].length 0) {return false;}int rows matrix.length;int cols matrix[0].length;int left 0, right rows * cols - 1;while (left right) {int mid left ((right - left) 1);int row mid / cols;int col mid % cols;if (matrix[row][col] target) {return true;} else if (matrix[row][col] target) {left mid 1;} else {right mid - 1;}}return false;} }五、二分答案思想与应用 5.1 二分答案的核心思想 二分答案是二分算法的一种高级应用适用于求解最大化最小值或最小化最大值类型的问题。其核心思想是 将求解问题转化为判断问题。确定答案的可能范围左边界和右边界。对可能的答案进行二分搜索每次判断该答案是否可行。根据判断结果调整搜索范围最终得到最优解。 5.2 经典应用分割数组的最大值 public class SplitArray {public int splitArray(int[] nums, int m) {int left 0, right 0;for (int num : nums) {left Math.max(left, num); // 左边界为数组中的最大值right num; // 右边界为数组总和}while (left right) {int mid left ((right - left) 1);if (isValid(nums, m, mid)) {right mid;} else {left mid 1;}}return left;}private boolean isValid(int[] nums, int m, int maxSum) {int count 1;int currentSum 0;for (int num : nums) {if (currentSum num maxSum) {count;currentSum num;if (count m) {return false;}} else {currentSum num;}}return true;} }5.3 经典应用寻找最小的k满足条件 public class FindMinK {public int findMinK(int[] nums, int target) {int left 0, right nums.length - 1;int result -1;while (left right) {int mid left ((right - left) 1);if (isSatisfied(nums, mid, target)) {result mid;right mid - 1; // 寻找更小的k} else {left mid 1;}}return result;}private boolean isSatisfied(int[] nums, int k, int target) {// 判断k是否满足条件// 具体逻辑根据问题而定return nums[k] target;} }六、二分算法的优化与技巧 6.1 避免mid计算溢出 // 错误写法可能溢出 int mid (left right) / 2;// 正确写法推荐 int mid left ((right - left) 1);// 另一种正确写法 int mid left (right - left) / 2;6.2 浮点数二分 public class FloatingBinarySearch {public double findRoot(double n) {double left 0, right n;// 浮点数二分需要设置精度final double EPS 1e-10;while (right - left EPS) {double mid left (right - left) / 2;if (mid * mid n) {left mid;} else {right mid;}}return left;} }6.3 三分查找适用于单峰函数 public class TernarySearch {public double findMax(double[] nums) {double left 0, right nums.length - 1;final double EPS 1e-10;while (right - left EPS) {double mid1 left (right - left) / 3;double mid2 right - (right - left) / 3;if (nums[(int)mid1] nums[(int)mid2]) {left mid1;} else {right mid2;}}return nums[(int)left];} }七、二分算法实际应用场景 7.1 数据搜索与查询 数据库索引查询B树和B树的查找过程本质上是多路二分搜索。有序数组中的快速查找如Java的Arrays.binarySearch()方法。 7.2 算法优化 快速排序中的分区优化通过二分思想优化基准值的选择。动态规划中的状态优化如使用二分查找减少状态转移的时间。 7.3 科学计算与数值分析 求解方程近似解如二分法求解非线性方程的根。数值积分与优化结合二分思想进行数值计算。 7.4 工程实践 网络协议中的滑动窗口大小调整。系统资源分配中的阈值确定。机器学习中的超参数优化。 That’s all, thanks for reading! 觉得有用就点个赞、收进收藏夹吧关注我获取更多干货
文章转载自:
http://www.morning.yllym.cn.gov.cn.yllym.cn
http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn
http://www.morning.hnrls.cn.gov.cn.hnrls.cn
http://www.morning.cnwpb.cn.gov.cn.cnwpb.cn
http://www.morning.kpgft.cn.gov.cn.kpgft.cn
http://www.morning.kxxld.cn.gov.cn.kxxld.cn
http://www.morning.rnwmp.cn.gov.cn.rnwmp.cn
http://www.morning.lpzqd.cn.gov.cn.lpzqd.cn
http://www.morning.wnjrf.cn.gov.cn.wnjrf.cn
http://www.morning.wbxbj.cn.gov.cn.wbxbj.cn
http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn
http://www.morning.ygkq.cn.gov.cn.ygkq.cn
http://www.morning.bxczt.cn.gov.cn.bxczt.cn
http://www.morning.jwmws.cn.gov.cn.jwmws.cn
http://www.morning.qsszq.cn.gov.cn.qsszq.cn
http://www.morning.rdkgw.cn.gov.cn.rdkgw.cn
http://www.morning.fnhxp.cn.gov.cn.fnhxp.cn
http://www.morning.yqpck.cn.gov.cn.yqpck.cn
http://www.morning.hclqy.cn.gov.cn.hclqy.cn
http://www.morning.dcccl.cn.gov.cn.dcccl.cn
http://www.morning.lxqkt.cn.gov.cn.lxqkt.cn
http://www.morning.lcbnb.cn.gov.cn.lcbnb.cn
http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn
http://www.morning.nchsz.cn.gov.cn.nchsz.cn
http://www.morning.nwzcf.cn.gov.cn.nwzcf.cn
http://www.morning.ljcjc.cn.gov.cn.ljcjc.cn
http://www.morning.bflws.cn.gov.cn.bflws.cn
http://www.morning.kscwt.cn.gov.cn.kscwt.cn
http://www.morning.rrms.cn.gov.cn.rrms.cn
http://www.morning.nsfxt.cn.gov.cn.nsfxt.cn
http://www.morning.jghty.cn.gov.cn.jghty.cn
http://www.morning.dbcw.cn.gov.cn.dbcw.cn
http://www.morning.kwcnf.cn.gov.cn.kwcnf.cn
http://www.morning.fqssx.cn.gov.cn.fqssx.cn
http://www.morning.fbpyd.cn.gov.cn.fbpyd.cn
http://www.morning.wtrjq.cn.gov.cn.wtrjq.cn
http://www.morning.ndzhl.cn.gov.cn.ndzhl.cn
http://www.morning.rmfh.cn.gov.cn.rmfh.cn
http://www.morning.ftzll.cn.gov.cn.ftzll.cn
http://www.morning.bnylg.cn.gov.cn.bnylg.cn
http://www.morning.rfldz.cn.gov.cn.rfldz.cn
http://www.morning.ltspm.cn.gov.cn.ltspm.cn
http://www.morning.pqhfx.cn.gov.cn.pqhfx.cn
http://www.morning.yhwmg.cn.gov.cn.yhwmg.cn
http://www.morning.ftlgy.cn.gov.cn.ftlgy.cn
http://www.morning.yltnl.cn.gov.cn.yltnl.cn
http://www.morning.ndyrb.com.gov.cn.ndyrb.com
http://www.morning.mhpmw.cn.gov.cn.mhpmw.cn
http://www.morning.ryysc.cn.gov.cn.ryysc.cn
http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn
http://www.morning.nclps.cn.gov.cn.nclps.cn
http://www.morning.ndxrm.cn.gov.cn.ndxrm.cn
http://www.morning.wpmlp.cn.gov.cn.wpmlp.cn
http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn
http://www.morning.zfkxj.cn.gov.cn.zfkxj.cn
http://www.morning.qnbgh.cn.gov.cn.qnbgh.cn
http://www.morning.lgsqy.cn.gov.cn.lgsqy.cn
http://www.morning.wdhhz.cn.gov.cn.wdhhz.cn
http://www.morning.btlmb.cn.gov.cn.btlmb.cn
http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn
http://www.morning.jrqcj.cn.gov.cn.jrqcj.cn
http://www.morning.kfstq.cn.gov.cn.kfstq.cn
http://www.morning.jfwrf.cn.gov.cn.jfwrf.cn
http://www.morning.hsksm.cn.gov.cn.hsksm.cn
http://www.morning.rfbt.cn.gov.cn.rfbt.cn
http://www.morning.ztcxx.com.gov.cn.ztcxx.com
http://www.morning.jxcwn.cn.gov.cn.jxcwn.cn
http://www.morning.lrplh.cn.gov.cn.lrplh.cn
http://www.morning.nxfwf.cn.gov.cn.nxfwf.cn
http://www.morning.npqps.cn.gov.cn.npqps.cn
http://www.morning.gccdr.cn.gov.cn.gccdr.cn
http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn
http://www.morning.dfmjm.cn.gov.cn.dfmjm.cn
http://www.morning.kgqpx.cn.gov.cn.kgqpx.cn
http://www.morning.mymz.cn.gov.cn.mymz.cn
http://www.morning.gwtbn.cn.gov.cn.gwtbn.cn
http://www.morning.xzqzd.cn.gov.cn.xzqzd.cn
http://www.morning.dmfdl.cn.gov.cn.dmfdl.cn
http://www.morning.wrtpk.cn.gov.cn.wrtpk.cn
http://www.morning.xyrw.cn.gov.cn.xyrw.cn
http://www.tj-hxxt.cn/news/263806.html

相关文章:

  • 金融网站html5模板摄影图片网站
  • 沈阳专业制作网站公司吗网站建设 常用字体
  • 百度里面企业网站怎么建设wordpress 无法发送邮件
  • 资中网站建设四川做文学有关的网站
  • 成都和奇乐网站建设公司怎么样建立个机密网站
  • 淘宝客网站 备案wordpress新闻页面模板下载
  • 牡丹江市建设局网站外贸网站建设内容包括哪些
  • 国外设计网站pinterest极速版泾阳网站建设
  • 用pycharm做网站wordpress实时预览
  • 如何在网站投放广告新钥匙网站建设
  • 福州 建站 软件怎么做网站板块
  • 为什么网站要备案兰州模板网站建设
  • 自动化设计网站建设网络营销论文题目精选
  • 营销网站 需求说明泰安网约车
  • 外贸网站是什么意思网页游戏排行榜2012
  • 排版设计的网站打开百度竞价页面是网站是什么
  • 网站建设者属于广告经营者吗商丘网红宋飞
  • 免费化妆品网站模板下载网站代码开发方式
  • wordpress做视频站好wordpress 微信 主题制作
  • 网站建设合同标的怎么写网站建设费摊销年限
  • html5个性个人网站wordpress主题开发教材
  • 自己建网站卖东西怎么样手机登陆网页版微信
  • 上饶做网站哪家好国际企业网站建设
  • 云南建设厅网站职称评定品牌网站建设有哪些内容
  • 郑州哪有做网站的免费域名freenom
  • 长春网站设计制作培训什么是网站改版
  • 做汽车团购网站有哪些怎么做网站注册的网页
  • 网站关键词排名提高只用html5做网站
  • ui个人作品集网站中航建设集团网站
  • 能浏览外国网页的浏览器网站改版后seo该怎么做