【问题标题】:Python 3 - Reducing a list by cyclical reconstructing a given setPython 3 - 通过循环重构给定集合来减少列表
【发布时间】:2018-11-28 06:28:48
【问题描述】:

我正在寻找一种算法,该算法通过将给定的集合重构为模式来减少循环的元组列表。

每个元组包含一个 id 和一个集合,例如 (1, {'xy'})

示例

query = {'xyz'}

my_dict = [(1, {'x'}), (2, {'yx'}), (3, {'yz'}),
           (4, {'z'}), (5, {'x'}), (6, {'y'}), 
           (7, {'xyz'}), (8, {'xy'}), (9, {'x'}),]

目标是根据my_dict 中元组的第二个值,尽可能频繁地重新创建模式xyz。查询集不能完全重构的剩余元素应被切断,因此“减少”。

my_dict共包含:6次x,5次y,3次z

考虑到my_dict,有效的解决方案例如:

result_1 = [(7, {'xyz'}), (8, {'xy'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
result_2 = [(7, {'xyz'}), (2, {'yx'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]
result_3 = [(7, {'xyz'}), (9, {'x'}), (6, {'y'}), (4, {'z'}), (1, {'x'}), (3, {'yz'})]

列表中元组的顺序并不重要,为了便于说明,我按照查询模式xyz 的顺序对它们进行了排序。

目标

目标是获得一个元组列表,其中查询集中的元素出现的总次数是最佳均匀分布的。

result_1result_2result_3共包含:3次x、3次y、3次z

有人知道如何做到这一点吗?

感谢您的帮助!

【问题讨论】:

    标签: python python-3.x algorithm sorting


    【解决方案1】:

    根据您的应用程序上下文,一种简单的蛮力方法可能就足够了:使用来自this SO answerpowerset 函数,

    def find_solutions(query, supply):
        for subset in powerset(supply):   
            if is_solution(query, subset):
                yield subset
    

    当给定的供应子集 (my_dict.values()) 是给定查询的有效解决方案时,您需要实现一个函数 is_solution(query, subset),该函数返回 True

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 2011-06-13
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      • 2018-12-01
      • 2012-07-16
      相关资源
      最近更新 更多