从埃及分数看迭代加深搜索
来源:互联网 发布:中国人工智能股票龙头 编辑:程序博客网 时间:2024/05/17 22:41
什么是迭代加深搜索:
对于深度d比较大的情况,深度优先搜索需要很长的运行时间,而且还可能得不到解答。一种比较好的问题求解方法是对搜索树的深度进行控制,即有界深度优先搜索方法。有界深度优先搜索过程总体上按深度优先搜索方法进行,但对搜索深度需要给出一个深度限制dm,当深度达到了dm的时候,如果还没有找到解答,就停止对该分支的搜索,换到另外一个分支进行搜索。
迭代指的是当在一个深度范围内找不到解时,扩大深度范围。
埃及分数:
在古埃及,人们使用单位分数的和(如1/a,a是自然数)表示一切有理数。例如,2/3 = 1/2 + 1/6,但不允许 2/3 = 1/3 + 1/3,因为在加数中不允许有相同的。
对于一个分数 a/b ,表示方法有很多种,其中加数少的比加数多的好,如果加数个数相同,则最小的分数越大越好。例如, 19 / 45 = 1 / 5 + 1/ 6 + 1 / 18 是最优方案。
输入整数 a,b(0 < a < b < 1000),试编程计算最佳表达式。
#include<iostream>using namespace std;double frac;// a /bint depth=1;const double error=1e-7;//精度,假设满足此精度,所得分数相加等于frac double dabs(double x){ return x > 0 ? x : -x;}bool dfs(int d,double now,int dion){ if(d == depth)//出口 { if(dabs(frac - now) < error) return true; return false; //剪枝 } //maxdion为当前可以存在的最大分母/* depth - d:剩下还有多少个数 frac - now:剩下的数 (frac - now)/(depth - d):表示剩下的每个数至少多大, 反过来就表示当前可以存在的最大分母*/ int maxdion= (int)((depth-d) / ( frac - now )); /* * 用到了回溯算法 */ for(;dion <= maxdion; ++dion) { if( dfs(d+1 , now + 1.0 / dion , dion+1)) { printf("1 / %d ", dion); return true; } } return false;}int main(){ int a,b; scanf("%d%d",&a,&b); frac=(double)a / b; while(dfs(0,0.0,(int)(1.0 / frac)+1)== false) ++depth; printf("\n"); return 0;}
0 0
- 从埃及分数看迭代加深搜索
- 埃及分数 迭代加深搜索 IDS
- 迭代加深搜索 埃及分数
- 埃及分数,迭代加深搜索
- 埃及分数(迭代加深搜索)
- 埃及分数(迭代加深搜索)
- 埃及分数题解[迭代加深搜索]
- 埃及分数(迭代加深搜索)
- 迭代加深搜索(埃及分数)
- 迭代加深搜索与埃及分数
- 埃及分数问题(迭代加深搜索)
- 埃及分数 迭代加深搜索 IDA*
- 埃及分数(迭代加深搜索)
- 迭代加深搜索--埃及分数
- [codevs1288]埃及分数 迭代加深搜索
- codevs1288埃及分数-迭代加深搜索
- 迭代加深搜索与埃及分数求解
- 埃及分数——迭代加深搜索
- Hog算法加速的实现代码
- 【大数据】大数据排序或取重或去重相关问题
- 把Win8PE制作成U盘版的万能微型电脑维护系统
- Scripts:基于时间显示闪回日志中redo的脚本fdb_redo_time_matrix.sql
- Maven 核心概念——站点生成和报告
- 从埃及分数看迭代加深搜索
- Scripts:显示闪回数据库状态的脚本fdb_status.sql
- 网址
- linux -- xinput 输入设备管理
- Linux下面开起启动服务命令(chkconfig、ntsysv)
- oracle 分割字符串 截取字符串
- Dozer轻松实现对象间属性复制
- 2014百度之星初赛(第二场)——Scenic Popularity
- 排序算法之快速排序的随机化版本