Python-穷举搜索Google方程式
来源:互联网 发布:图片切换js代码 编辑:程序博客网 时间:2024/04/30 00:19
概述
在《算法的乐趣》这一本书中,第3.4.3章节举了一个穷举搜索的例子,其中里面是用C语言代码编写的。下面自己使用Python实现了一遍。
问题描述
有一个由字符组成的等式。WWWDOT-GOOGLE=DOTCOM,每个字符代表一个0~9之间的数字,WWWDOT、GOOGLE和DOTCOM都是合法的数字,不能以0开头。请找出一组字符和数字的对应关系,使它们互相替换,并且替换后的数字能够满足等式。
Python代码
# coding=utf-8# 问题:有一个由字符组成的等式。WWWDOT-GOOGLE=DOTCOM,每个字符代表一个0~9之间的数字,# WWWDOT、GOOGLE和DOTCOM都是合法的数字,不能以0开头。# 请找出一组字符和数字的对应关系,使它们互相替换,并且替换后的数字能够满足等式。# 解答:# 777589-188103=589486# 777589-188106=589483import time# 0:用时127.50秒# 1:用时51.31秒USE_MY_ISVALUE = 1# 字符,数字,是否是数字的最高位char_item = [ ['W', -1, True], ['D', -1, True], ['O', -1, False], ['T', -1, False], ['G', -1, True], ['L', -1, False], ['E', -1, False], ['C', -1, False], ['M', -1, False],]# value,usedchar_value = [ [0, False], [1, False], [2, False], [3, False], [4, False], [5, False], [6, False], [7, False], [8, False], [9, False]]# 判断数值是否有效def IsValueVaild(ciItem, cvItem): if cvItem[0] == 0: if USE_MY_ISVALUE: if ciItem[0] == 'W'or ciItem[0] == 'D'or ciItem[0] == 'G': return False else: return not ciItem[2] return not cvItem[1]# 获取对应的整数def MakeIntegerValue(ci, string): strLen = string.__len__() res = 0 for i in range(0, strLen, 1): for item in ci: if string[i] == item[0]: res *= 10 res += item[1] return res# 判断数值是否正确的回调函数def OnCharListReady(ci): minuend = "WWWDOT" subtrahead = "GOOGLE" diff = "DOTCOM" m = MakeIntegerValue(ci, minuend) s = MakeIntegerValue(ci, subtrahead) d = MakeIntegerValue(ci, diff) if (m-s) == d: print(str(m)+"-"+str(s)+"="+str(d))def SearchResult(ci, cv, index, callback): max_char_count = ci.__len__() max_number_count = cv.__len__() if index == max_char_count: callback(ci) return for i in range(0, max_number_count, 1): if IsValueVaild(ci[index], cv[i]): cv[i][1] = True # 设置使用标志 ci[index][1] = cv[i][0] SearchResult(ci, cv, index+1, callback) cv[i][1] = False # 清除使用标志if __name__ == '__main__': print("有一个由字符组成的等式。WWWDOT-GOOGLE=DOTCOM,每个字符代表一个0~9之间的数字," "WWWDOT、GOOGLE和DOTCOM都是合法的数字,不能以0开头。" "请找出一组字符和数字的对应关系,使它们互相替换,并且替换后的数字能够满足等式。") print("解答:") start = time.clock() SearchResult(char_item, char_value, 0, OnCharListReady) end = time.clock() print("使用了: %f s" % (end - start))
最后打印的数值是,与书本提供的答案一样。
777589-188103=589486
777589-188106=589483
777589-188106=589483
0 0
- Python-穷举搜索Google方程式
- 穷举搜索:Google方程式
- 穷举法应用示例:解Google方程式
- GOOGLE方程式
- Google方程式
- google方程式
- 穷举搜索
- 算法系列之一 :Google方程式
- 算法系列之一 :Google方程式
- 算法系列之一 :Google方程式
- 算法系列之一 : Google方程式
- 算法系列之一 : Google方程式
- python抓取google搜索结果
- 爱的方程式(Python)
- 穷举搜索法
- 穷举搜索法
- 穷举搜索法!
- 穷举搜索法
- 手机的UI设计
- MDI窗口支持库源码,支持静态编译嗷~~
- Qt的元对象系统
- HDU5333 Undirected Graph
- 梦代码编辑框支持库 (2.1#0版)
- Python-穷举搜索Google方程式
- 快速构架超级列表表项(非虚表)
- 玩转Eclipse开发工具(四)
- Faded (Conor Maynard Cover)
- 多线程安全问题。
- 本宝宝blog的背景图片。。
- equal ==
- archive包真机运行崩溃问题一则
- mysql基本操作(1)