在涵盖特定值的列表中查找最小数量的元素

阿拉斯

招聘人员希望组建一支具有不同技能的团队,他希望选择能够满足所有所需技能的最低人数。

N代表人数,K是需要包括的独特技能的数量。列表spec_skill = [[1,3],[0,1,2],[0,2,4]]提供有关每个人的技能的信息。例如,人0有技能1 and 3,人1有技能0, 1 and 2等等。

该代码应输出招聘人员可以找到的最小团队人数(最少人数)和指示要招聘到团队中的特定人员ID的值。

我使用如下代码实现了代码,但是由于某些数据超过数千,因此似乎需要使用启发式方法来解决在这种情况下,可能会有近似答案。

任何建议如何用启发式方法解决它的建议将不胜感激。

N,K = 3,5
spec_skill = [[1,3],[0,1,2],[0,2,4]]

A = list(range(K))
set_a = set(A)

solved = False
for L in range(0, len(spec_skill)+1):
    for subset in itertools.combinations(spec_skill, L):
        s = set(item for sublist in subset for item in sublist)
        if set_a.issubset(s):
            print(str(len(subset)) + '\n' + ' '.join([str(spec_skill.index(item)) for item in subset]))
            solved = True
            break
    if solved: break

全脑

这是我的方法。代码中可能存在潜在的优化可能性,但基本思想应该是可以理解的。

import random
import time
def man_power(lst, K, iterations=None, period=0):
    """
    Specify a fixed number of iterations
    or a period in seconds to limit the total computation time.
    """

    # mapping each sublist into a (sublist, original_index) tuple
    lst2 = [(lst[i], i) for i in range(len(lst))]
    mini_sample = [0]*(len(lst)+1)
    if period<0 or (period == 0 and iterations is None):
        raise AttributeError("You must specify iterations or a positive period")
    
            
    def shuffle_and_pick(lst, iterations):
        mini = [0]*len(lst)
        for _ in range(iterations):
            random.shuffle(lst2)
            skillset = set()
            chosen_ones = []
            idx = 0
            fullset = True
            # Breaks from the loop when all skillsets are found
            while len(skillset) < K:
                # No need to go further, we didn't find a better combination
                if len(chosen_ones) >= len(mini):
                    fullset = False
                    break
                before = len(skillset)
                skillset.update(lst2[idx][0])
                after = len(skillset)
                if after > before:
                    # We append with the orginal index of the sublist
                    chosen_ones.append(lst2[idx][1])
                idx += 1
            if fullset:
                mini = chosen_ones.copy()
        return mini
    
    # Estimates how many iterations we can do in the specified period
    if iterations is None:
        t0 = time.perf_counter()
        mini_sample = shuffle_and_pick(lst, 1)
        iterations = int(period / (time.perf_counter() - t0)) - 1
    
    mini_result = shuffle_and_pick(lst, iterations)
    if len(mini_sample)<len(mini_result):
        return mini_sample, len(mini_sample)
    else:
        return mini_result, len(mini_result)

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

列表中特定元素的数量

来自分类Dev

修改numpy数组以获取元素之间的最小数量的值

来自分类Dev

在 Ocaml 中的列表中查找最大/最小数

来自分类Dev

查找最小数量并打印的功能

来自分类Dev

获取列表中特定元素的数量

来自分类Dev

从日期列表中查找最小日期值

来自分类Dev

如何在列表中查找第二个元素的最小值

来自分类Dev

计算列表中其他元素之间特定元素的数量

来自分类Dev

查找大于r中特定频率的特定值的数量

来自分类Dev

计算嵌套列表中包含特定元素的列表的数量

来自分类Dev

在列表中查找唯一元素的数量

来自分类Dev

在列表中查找最大数量的相似元素

来自分类Dev

在大于 X 的列表元素中查找值

来自分类Dev

在Python中查找列表的最小值,最大值

来自分类Dev

在Matlab中查找连续相同值元素的平均数量

来自分类Dev

在Matlab中查找连续的相同值元素的平均数量

来自分类Dev

在多维列表的特定行中查找值

来自分类Dev

如何在产品列表页面中显示“购物车中允许的最小数量”

来自分类Dev

查找交换的最小数量以对数组进行排序

来自分类Dev

如何在字符串java中打印最大和最小数量的ASCII值

来自分类Dev

在包含两个特定元素的列表中查找列表

来自分类Dev

从字典列表中查找最小键值,忽略无值

来自分类Dev

按名称查找列表中的最小值

来自分类Dev

列表中的最小元素,具有特定功能

来自分类Dev

在列表的开头查找相等元素的数量

来自分类Dev

在数字列表中查找最小数字的递归方法

来自分类Dev

如何在随机列表中查找连续元素的列表,其中结果列表的数量不应大于给定的数量

来自分类Dev

在列表中查找元素

来自分类Dev

在HashMap中查找值的数量?

Related 相关文章

  1. 1

    列表中特定元素的数量

  2. 2

    修改numpy数组以获取元素之间的最小数量的值

  3. 3

    在 Ocaml 中的列表中查找最大/最小数

  4. 4

    查找最小数量并打印的功能

  5. 5

    获取列表中特定元素的数量

  6. 6

    从日期列表中查找最小日期值

  7. 7

    如何在列表中查找第二个元素的最小值

  8. 8

    计算列表中其他元素之间特定元素的数量

  9. 9

    查找大于r中特定频率的特定值的数量

  10. 10

    计算嵌套列表中包含特定元素的列表的数量

  11. 11

    在列表中查找唯一元素的数量

  12. 12

    在列表中查找最大数量的相似元素

  13. 13

    在大于 X 的列表元素中查找值

  14. 14

    在Python中查找列表的最小值,最大值

  15. 15

    在Matlab中查找连续相同值元素的平均数量

  16. 16

    在Matlab中查找连续的相同值元素的平均数量

  17. 17

    在多维列表的特定行中查找值

  18. 18

    如何在产品列表页面中显示“购物车中允许的最小数量”

  19. 19

    查找交换的最小数量以对数组进行排序

  20. 20

    如何在字符串java中打印最大和最小数量的ASCII值

  21. 21

    在包含两个特定元素的列表中查找列表

  22. 22

    从字典列表中查找最小键值,忽略无值

  23. 23

    按名称查找列表中的最小值

  24. 24

    列表中的最小元素,具有特定功能

  25. 25

    在列表的开头查找相等元素的数量

  26. 26

    在数字列表中查找最小数字的递归方法

  27. 27

    如何在随机列表中查找连续元素的列表,其中结果列表的数量不应大于给定的数量

  28. 28

    在列表中查找元素

  29. 29

    在HashMap中查找值的数量?

热门标签

归档