微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在列表中对选定数字进行分组的算法

如何解决在列表中对选定数字进行分组的算法

给出一个连续的和唯一的号码列表,其中一些被选中,而另一些则没有,我需要创建包含所有选定号码的组。组的数量应保持最小,并且组中非必需值的数量也应保持最小。组的最大大小也是一个变量。

示例列表,其中*表示所选编号,并且组大小限制为5: 1 *,2,3,4,5 *,6 *,7,8 *,9

最优化的组将是[(1)和(5,6,7,8)]。 [(1,2,5)和(6,8)]是另一个可能的答案,但是它包含更多未选择的值,因此不希望使用。

这种算法有名称吗?我不需要别人为我编写代码,只要已经知道此问题就可以寻找指针。

对于那些好奇的目的,我正在尝试优化Modbus TCP寄存器请求。用户可以定义他们需要的寄存器列表,并且一次只能请求连续的寄存器组。由于TCP延迟,我们希望发出尽可能少的请求,而只请求最少数量的不需要的寄存器。

解决方法

尝试一下:

numbers = [1,2,3,4,5,6,4]
groups,current_group = [],[]
max_group_size = 4 # here you put your max size
for n in numbers:
    is_valid = is_selected(n)
    if is_valid:
        current_group.append(n)
    elif (not is_valid and current_group) or len(current_group) == max_group_size:
        groups.append(current_group)
        current_group = []

假设is_selected是一个告诉您是否选择了数字的功能

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。