中途相遇法,这是一种特殊的算法,大体思路是从两个不同的方向来解决问题,最终“汇集”到一起。“双向广度优先搜索”算法就有一点中途相遇的味道。
下面我们通过一道具体的题目,来了解一下这种算法思想的应用。
和为0的4个值(4 Value Whose Sum is Zero,ACM/ICPC SWERC 2005,UVa 1152)
给定4个n(1<=n<=400)元素集合A,B,C,D,要求分别从中选取一个元素a,b,c,d,使得a+b+c+d=0。问有多少种选法?
例如,A={-45,-41,-36,26,-32},B={22,-27,53,30,-38,-54},C={42,56,-37,-75,-10,-6},D={-16,30,77,-46,62,45},则有5中选择法:(-45,-27,42,30),(26,30,-10,-46),(-32,22,56,-46),(-32,30,-75,77),(-32,-54,56,30)。
分析如下:
我们最容易想到的就是写一个四重循环枚举a,b,c,d,看看加起来是否等于0,时间复杂度为O(n^4),超时。一个稍好的方法就是枚举a,b,c,则只需要再集合D里面找找是否有元素-a-b-c,如果存在,则方案加1.如果排序后使用二分查找则算法可以适当优化。
把刚才的方法加以推广就可以得到一个更快的算法:首先枚举a,b,把所有的a+b记录下来存放在一个有序数组里,然后枚举c,d,看看有多少种方法写成a+b的形式。这里就用到了“中途相遇“的思想。但如果数据量较大,以上所述算法也可能会超时。所以,在此处,小编推荐一种更高效的实现方法,就是把a+b放在自己实现的一个哈希表里。这样,就可以适当程度上优化算法。
由于,此博文重在通过一道简单的例题讲述”中途相遇“的思想,重点不在次例题的具体实现算法上。所以,此处没有写出具体的实现代码。小编建议读者,亲自试一下此博文中提到的几种思想,以便于让自己对执行效率有更加清楚的认识。
由于小编水平有限,欢迎读者发现错误,并提出错误,小编一定积极改正。

转载于:https://blog.51cto.com/13642075/2086255

算法优化策略之“中途相遇”算法思想相关推荐

  1. 粒子群算法优化策略总结

    粒子群算法优化策略总结 前言 1 对于惯性权重w的优化 1.1 引入混沌Sine映射构造非线性随机递增惯性权重 1.2 采用一种指数型的非线性递减惯性权重 1.3 分策略更改惯性权重 2 对于c1.c ...

  2. 【百度飞浆】RCNN系列算法优化策略与案例

    RCNN系列算法优化策略与案例 目录 1 两阶段检测进阶模型介绍 2 两阶段检测进阶模型优化策略 3 工业应用:铝压铸件质检 目录 1 两阶段检测进阶模型介绍 2 两阶段检测进阶模型优化策略 3 工业 ...

  3. 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码

    基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 1 蝙蝠算法与BP神经网络分类模型 1.1 蝙 ...

  4. ALO_DELM 蚁狮算法优化深度极限学习机回归预测算法

    ALO_DELM 蚁狮算法优化深度极限学习机回归预测算法 蚁狮算法 优化 ELM-AE网络结构 Ant Lion Optimization Deep Extreme Learning Machine ...

  5. Python实现ALO蚁狮优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蚁狮优化(Ant Lion Optimizer,ALO)算法是M ...

  6. Python实现ALO蚁狮优化算法优化支持向量机回归模型(SVR算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蚁狮优化(Ant Lion Optimizer,ALO)算法是M ...

  7. Python实现DE差分进化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 差分进化算法(Differential Evolution,DE ...

  8. Python实现ABC人工蜂群优化算法优化支持向量机回归模型(SVR算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人工蜂群算法(Artificial Bee Colony, AB ...

  9. Python实现ABC人工蜂群优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人工蜂群算法(Artificial Bee Colony, AB ...

最新文章

  1. 【03】Spark分析日志实例
  2. Newtonsoft.Json高级用法
  3. 前端基本功—javascript 第三天
  4. ARM开发培训的总结报告
  5. 老oj1965:polygon半平面交
  6. mysql主库宕机能写吗_MYSQL主主切换(主库宕机)_MySQL
  7. 洛谷4400 BlueMary的旅行(分层图+最大流)
  8. 故乡与文学:一场别开生面的跨年代文学对话(一)
  9. 问了自己8个问题后,我选择了考博...
  10. 2022年中国折叠屏手机市场洞察报告
  11. sql server 2000能否得到一个表的最后更新日期?
  12. jsp post中文乱码
  13. css背景色过渡效果,css3背景色过渡
  14. 安装IDEA 并创建快捷方式
  15. 学员管理系统(面向对象版)
  16. 搭建git 服务器出现 Error executing action `create` on resource 'user[GitLab user and group]'
  17. 管理之道(十) - 你还在崇拜交付速度吗?
  18. android p2p 视频通话,GitHub - wutonglei/webrtc_android: P2P Webrtc VideoConference 视频通话 视频会议...
  19. 本科、硕士研究生毕业论文字体、段落格式参考
  20. 输出一个区间内的质数(素数)

热门文章

  1. 使用Delphi编写棋牌类游戏 – 设计篇(3)
  2. BCS 2020举行补天白帽日峰会 多维度彰显白帽实力
  3. Cerberus 银行木马开发团队解散,源代码5万美元起拍
  4. PHP date() 函数
  5. CocoaPods管理iOS项目 2018年11月06日
  6. [译] 如何用 Python 写一个 Discord 机器人
  7. ansible-playbook之循环(Loops)
  8. 动图,用Python追踪NBA球员的运动轨迹
  9. 双向链表中基本函数的实现
  10. UVA 10572 Black White