python写算法怎么样_为什么别人Python写的算法解题只要10多秒,我的要10分钟?...

Dive into Python 第八章的例子

解决一个问题:

HAWAII + IDAHO + IOWA + OHIO == STATES

510199 + 98153 + 9301 + 3593 == 621246

H = 5

A = 1

W = 0

I = 9

D = 8

O = 3

S = 6

T = 2

E = 4

书中的算法:

import re

import itertools

def solve(puzzle):

words = re.findall('[A-Z]+', puzzle.upper())

unique_characters = set(''.join(words))

assert len(unique_characters) <= 10, 'Too many letters'

first_letters = {word[0] for word in words}

n = len(first_letters)

sorted_characters = ''.join(first_letters) + \

''.join(unique_characters - first_letters)

characters = tuple(ord(c) for c in sorted_characters)

digits = tuple(ord(c) for c in '0123456789')

zero = digits[0]

for guess in itertools.permutations(digits, len(characters)):

if zero not in guess[:n]:

equation = puzzle.translate(dict(zip(characters, guess)))

if eval(equation):

return equation

if __name__ == '__main__':

import sys

for puzzle in sys.argv[1:]:

print(puzzle)

solution = solve(puzzle)

if solution:

print(solution)

我写的算法:

'use strict';

console.time('H,A,W,I,D,O,S,T,E');

const 满足等式=(H,A,W,I,D,O,S,T,E)=>

H*100110+A*9201+W*1010+I*11021+D*1000+O*1102===S*100001+T*10100+E*10;

const 无一重复=(H_A_W_I_D_O_S_T_E)=>

new Set(...H_A_W_I_D_O_S_T_E).size===H_A_W_I_D_O_S_T_E.length;

const 数字范围=1000000000;

for(let 数字答案=数字范围;数字答案--;){

const 字串答案=(数字范围+数字答案).toString().slice(1);

if(满足等式(...字串答案)&&无一重复(字串答案)){

console.log(字串答案.split('').join(','));

break;

}

}

console.timeEnd('H,A,W,I,D,O,S,T,E');

10 分钟是在 Node.js 8.3 中进行的测试;Chrome 要 15 分钟。

这究竟是算法的差异,还是语言的差异?我的电脑 CPU 是 E3 1230 v5 (3.4GHz)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值