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

九位不同数字乘法等式的递归与非递归回溯算法(三)

(……续上篇)

4  非递归回溯算法

将递归结构转化为非递归结构通常使用栈结构模拟系统调用进行转化[4],但这样转化后的非递归结构与递归结构并没有本质区别,只是将系统递归调用时现场保护、恢复改为手动压栈与出栈[5][6].通过分析递归回溯算法,可知对第n位数字的搜索为一个循环,该循环结束条件是搜索成功或n<1,循环内部首先保存nk中,然后,如果第n位数字搜索失败则将n1继续循环,直到第n位搜索成功,并且n=k;如果n<k,则将n1继续循环.

下面的函数使用非递归回溯的算法在数组r中搜索前n位数字均不相同的排列.

 
   
  1. function NRS(n: integer;var r: TArr): boolean;  
  2. var  
  3.   flag: boolean;  
  4.   k: integer;  
  5. begin 
  6.   k:= n;  
  7.   flag:= false;  
  8.   repeat  
  9.     inc(r[n]);  
  10.     if r[n] > 9 then 
  11.     begin 
  12.       r[n]:= 0;  
  13.       dec(n);  
  14.     end 
  15.     else if not Clash(n, r) then 
  16.       if k = n then 
  17.         flag:= true 
  18.       else 
  19.         inc(n);  
  20.   until flag or (n < 1);  
  21.   result:= flag;  
  22. end;  

如果前n位数字可以找到符合条件的排列,则函数NRS返回“真”,否则返回“假”.

非递归回溯算法其它部分与递归回溯算法相同,仅在过程Equation中调用函数RS改为调用函数NRS即可.

5  实验测试及结论

经过编程计算共得到如下9组解:

 
   
  1. 12×483=5796;18×297=5346;27×198=5346;  
  2. 28×157=4396;39×186=7254;4×1738=6952;  
  3. 4×1963=7852;42×138=5796;48×159=7632. 

通过分析算法,显然两种算法的时间复杂度均为O(n2)[5],且执行操作基本相同,理论上算法耗时应趋于一致,但递归算法由于系统必须进行现场保护、恢复,所以耗时应该略大于非递归算法.在PCP4-3GHz上由Delphi 2009实现,五次测试取平均值:递归算法耗时203ms,非递归算法耗时188ms,递归算法比非递归算法慢约8%

参考文献

[1]Aho Alfred,Ullman Jeffrey,Hopcroft et alThe design and analysis of computer algorithms[M].北京:机械工业出版社,2007

[2]Levitin Anany, 潘彦[].算法设计与分析基础.北京:清华大学出版社,2004

[3]郭继展,郭勇,苏辉程序算法与技朽精选北京:机械工业出版社2008

[4]吕国英,任瑞征,钱宇华.算法设计与分析.北京:清华大学出版社,2006

[5]王晓东.计算机算法设计与分析[M].北京:电子工业出版社,2001

[6]严蔚敏,吴伟民.数据结构[M]2版.北京:清华大学出版社,1996

 

The recursive and non-recursive backtrack algorithms for nine different numerals constitute a equation of multiplication

BAI Yu

(School of Mathematics & Computer Science, Shanxi Datong University, Datong Shanxi, 037008)

Abstract: In this paper, analyze the "nine different numerals constitute a equation of multiplication", design a recursive backtrack algorithm and non-recursive backtrack algorithm, gave the general design for exhaustive algorithm of NP problem, at the same time, compared the characteristics of two algorithms, and experimental testing.

Keywords: Exhaustive algorithm; Recursive backtrack algorithm; Non-recursive backtrack algorithm; NP problem

(全文完)









本文转自 BlackAlpha 51CTO博客,原文链接:http://blog.51cto.com/mengliao/465337,如需转载请自行联系原作者

相关文章:

  • 超棒的JS移动设备滑动内容幻灯实现 - Swiper
  • 关于SQLite,SQLCipher和FMDB
  • Android自定义组合控件
  • js判断客户浏览器类型,版本
  • Eclipse Deepin 12.12 代码提示崩溃
  • 做技术到底可以做到哪种地步-技术为什么越走越窄
  • linux转发流程图。
  • Java连接Mysql,SQL Server, Access,Oracle
  • 毕业那点事儿--回顾在大学这7年
  • Engineer01
  • 7款拥有超酷设计灵感的动态网站设计
  • 这才叫电脑高手!
  • 必应搜索全球PK,只为证明自己
  • 关于glusterfs-3.3.1的两个bug
  • 老树新芽,在ES6下使用Express
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Docker: 容器互访的三种方式
  • If…else
  • js操作时间(持续更新)
  • Logstash 参考指南(目录)
  • PAT A1017 优先队列
  • React as a UI Runtime(五、列表)
  • 排序(1):冒泡排序
  • 设计模式 开闭原则
  • 深入浅出Node.js
  • 深入浅出webpack学习(1)--核心概念
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 算法系列——算法入门之递归分而治之思想的实现
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 协程
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 1.Ext JS 建立web开发工程
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Android开发者必备:推荐一款助力开发的开源APP
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #1015 : KMP算法
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (003)SlickEdit Unity的补全
  • (6)设计一个TimeMap
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (三) diretfbrc详解
  • (顺序)容器的好伴侣 --- 容器适配器
  • (未解决)macOS matplotlib 中文是方框
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • *p++,*(p++),*++p,(*p)++区别?
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 发展历程
  • .net 简单实现MD5
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args