广度优先在python中-计算最大值?

里昂

我正在尝试在python中实现以下“游戏”:

给定一个起始单词,找到目标单词,并对其进行允许的修改(可对每个步骤进行修改):删除或添加任何字母并进行置换

任务是以最少的步骤找到从开始到实现目标的方法。

我的方法是添加/删除字母,置换生成的字母,并查找字典中的每个置换。

这很快导致运行时间长(对于一个9字母的单词,第一步大约需要60秒)。

这是我的代码。

import time
from itertools import permutations
startword = 'croissant'

nodes = list()

nodes.append(startword)

dicts = set([line.rstrip('\n') for line in open('wordList.txt')])
alpha = set([chr(i) for i in range(ord('a'),ord('z')+1)])


def step(nodes):
    nnodes = list()
    for word in nodes:
        for s in word:
            new_word = word.replace(s, '', 1)
            perms = [''.join(p) for p in permutations(new_word)]
            for per in perms:
                if per in dicts:
                    nnodes.append(per)
       for s in alpha:
            new_word = word + s
            perms = [''.join(p) for p in permutations(new_word)]
            for per in perms:
                if per in dicts:
                    nnodes.append(per)
return set(nnodes)


btime = time.time()
step(nodes)
print time.time() - btime

如何改善性能/逻辑?特别要求我们使用广度优先搜索。

CodeSurgeon

有趣的问题!有一种方法可以极大地提高性能。可以通过遍历单词列表并检查是否存在每个单词来检查每个新单词,而无需按字母顺序将单词列表中每个单词的字符按字母顺序排列,然后直接将它们与按字母顺序排列的缩短/加长的关注单词进行比较。

例如,使用croissant,我可以按字母顺序生成字符acinorsst然后,我检查是否acinorsst默认情况下删除或添加了一个字符是否在列表的默认值中,其中键是按字母顺序排列的字符串,并检索相应的值(这是与该字母顺序相对应的实际单词的列表)。

用代码解释的过程要少得多,所以我在下面发布了它:

from collections import defaultdict
import itertools as its
import time

def get_alpha_dicts():
    wa_dict = {}#word: alphabetized dict
    aw_dict = defaultdict(list)#alphabetized: corresponding WORDS dict
    for line in open('wordList.txt'):
        word = line.rstrip('\n')
        alpha_word = ''.join(sorted(word))
        wa_dict[word] = alpha_word
        aw_dict[alpha_word].append(word)
    return wa_dict, aw_dict    

def step(nodes, aw_dict):
    alpha = set([chr(i) for i in range(ord('a'),ord('z')+1)])
    nnodes = list()
    for word in nodes:
        alpha_word = ''.join(sorted(word))
        #remove a char from word
        short_words = set([''.join(w) for w in its.combinations(alpha_word, len(start_word)-1)])
        for short_word in short_words:
            nnodes.extend(aw_dict[short_word])
        #add a char to word
        long_words = [''.join(sorted(alpha_word + s)) for s in alpha]
        for long_word in long_words:
            nnodes.extend(aw_dict[long_word])
    return set(nnodes)

if __name__ == "__main__":
    start_word = 'croissant'
    nodes = list()
    nodes.append(start_word)
    wa_dict, aw_dict = get_alpha_dicts()
    btime = time.time()
    print step(nodes, aw_dict)
    print time.time() - btime

希望能帮助到你!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算数组中的最大值

来自分类Dev

计算hadoop中的'n'最大值

来自分类Dev

在计算中设置最大值

来自分类Dev

计算 postgresql 中的最大值

来自分类Dev

有条件的计算列中的最大值

来自分类Dev

如何计算Excel 2010中每列的最大值?

来自分类Dev

DAX - 计算列中每天的最大值

来自分类Dev

Python中的列表推导,可计算列表的最小值和最大值

来自分类Dev

计算Less中两个值的最小值/最大值

来自分类Dev

计算Less中两个值的最小值/最大值

来自分类Dev

Python / Pandas:计算1.最小值,2.最大值到最小值的左边,3.最大值,到最小值的右边

来自分类Dev

使用MySQL中管道分隔的列值中的存在来计算最大值

来自分类Dev

如何在SQL Server中计算序列中组的最小值和最大值?

来自分类Dev

如何在XQuery中获得计算值的最大值?

来自分类Dev

计算MySQL8中重复条目组的最大值和最小值之和

来自分类Dev

计算R中的最小值,最大值和平均值

来自分类Dev

计算Python中每一行中特定列的下3行的最大值

来自分类Dev

在matlab中检查交替最大值最大值

来自分类Dev

最大值的 Python 参数

来自分类Dev

列中的最大值

来自分类Dev

计算R中每一行中特定列的后3行最大值

来自分类Dev

用OCaml中的给定列表和运算符计算最大值

来自分类Dev

在MATLAB中为双矩阵计算累积最大值的函数

来自分类Dev

如何使用NumPy计算向量化lambda中的最大值?

来自分类Dev

将数据框中的行分组,取最大值并计算组均值

来自分类Dev

函数计算AT&T x86组件中的最大值

来自分类Dev

计算数据帧中时间样本内的最大值数量

来自分类Dev

通过在Excel中过滤文本的特定部分来计算最大值(文本+数字)

来自分类Dev

用OCaml中的给定列表和运算符计算最大值

Related 相关文章

  1. 1

    计算数组中的最大值

  2. 2

    计算hadoop中的'n'最大值

  3. 3

    在计算中设置最大值

  4. 4

    计算 postgresql 中的最大值

  5. 5

    有条件的计算列中的最大值

  6. 6

    如何计算Excel 2010中每列的最大值?

  7. 7

    DAX - 计算列中每天的最大值

  8. 8

    Python中的列表推导,可计算列表的最小值和最大值

  9. 9

    计算Less中两个值的最小值/最大值

  10. 10

    计算Less中两个值的最小值/最大值

  11. 11

    Python / Pandas:计算1.最小值,2.最大值到最小值的左边,3.最大值,到最小值的右边

  12. 12

    使用MySQL中管道分隔的列值中的存在来计算最大值

  13. 13

    如何在SQL Server中计算序列中组的最小值和最大值?

  14. 14

    如何在XQuery中获得计算值的最大值?

  15. 15

    计算MySQL8中重复条目组的最大值和最小值之和

  16. 16

    计算R中的最小值,最大值和平均值

  17. 17

    计算Python中每一行中特定列的下3行的最大值

  18. 18

    在matlab中检查交替最大值最大值

  19. 19

    最大值的 Python 参数

  20. 20

    列中的最大值

  21. 21

    计算R中每一行中特定列的后3行最大值

  22. 22

    用OCaml中的给定列表和运算符计算最大值

  23. 23

    在MATLAB中为双矩阵计算累积最大值的函数

  24. 24

    如何使用NumPy计算向量化lambda中的最大值?

  25. 25

    将数据框中的行分组,取最大值并计算组均值

  26. 26

    函数计算AT&T x86组件中的最大值

  27. 27

    计算数据帧中时间样本内的最大值数量

  28. 28

    通过在Excel中过滤文本的特定部分来计算最大值(文本+数字)

  29. 29

    用OCaml中的给定列表和运算符计算最大值

热门标签

归档