亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

優化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 倍改進!?。?/p>


查看完整回答
反對 回復 2022-05-24
  • 2 回答
  • 0 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號