为了账号安全,请及时绑定邮箱和手机立即绑定

优化python中的蛮力算法

优化python中的蛮力算法

Helenr 2022-05-24 15:07:57
我试图在python中实现一种简单的蛮力方法来使用内置库函数搜索字符串模式。这是代码from itertools import productfrom multiprocessing import Poolimport timeimport numpy as npchars=np.array(['a','b','c','d', 'e', 'f', 'g', 'h', 'i', 'j'])password='cgbjfifac'min_length=1max_length=9def brute_force():    for length in range(min_length, max_length + 1):        for p in product(chars, repeat=length):            guess = ''.join(p)            if guess == password:                return guess在双核 Intel(R) Xeon(R) CPU @ 2.30GHz 机器上花费了大约87 秒。我已经尝试过在 python 中使用标准库的多处理方法(即使用pool 和 map方法);但它没有提供任何加速。我们怎样才能进一步提高这种方法的性能。(理想情况下,输入的长度 >= 10)
查看完整描述

2 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

我拿出 numpy 并删除了 "".join ,加速了 ~ x3。


from itertools import product

from multiprocessing import Pool

import time


start_time = time.time()


chars=['a','b','c','d', 'e', 'f', 'g', 'h', 'i', 'j']

password=tuple('cgbjfifac')

min_length=1

max_length=9


def brute_force():

    for length in range(min_length, max_length + 1):

        for p in product(chars, repeat=length):

            if p == password:

                return p




brute_force()


print(time.time()-start_time)


查看完整回答
反对 回复 2022-05-24
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

这是代码的稍微好一点的版本,使用多处理...


from itertools import product

from multiprocessing import Pool

import time



chars=['a','b','c','d', 'e', 'f', 'g', 'h', 'i', 'j']

password=tuple('cgbjfifac')

min_length=1

max_length=9


def parallel_brute_force(length):

        for p in product(chars, repeat=length):

            if p == password:

                return p


tick=time.time()


with multiprocessing.Pool(multiprocessing.cpu_count()) as p:

       for v in p.imap_unordered(parallel_brute_force, range(min_length, max_length + 1):

           result=v



print("Time :" + str(time.time()-tick) + " s")

print(result)

在 4 核 2.0GHz 机器上,时间从 23 秒减少到 17 秒 .. 1.3 倍改进!!!


查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 257 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号