Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在列表中对选定数字进行分组的算法_List_Algorithm_Grouping_Modbus_Selected - Fatal编程技术网

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

List 在列表中对选定数字进行分组的算法,list,algorithm,grouping,modbus,selected,List,Algorithm,Grouping,Modbus,Selected,给定一个连续且唯一的数字列表,其中一些是选中的,而另一些不是选中的,我需要创建包含所有选中数字的组。组的数量应保持在最低限度,组中非必需值的数量也应保持在最低限度。组的最大大小也是一个变量 示例列表,其中*表示所选编号,组大小限制为5: 1*,2,3,4,5*,6*,7,8*,9 最佳组为[(1)和(5,6,7,8)]。 [(1,2,3,4,5)和(6,7,8)]是另一个可能的答案,但它包含更多未选择的值,因此不可取 这种算法有名字吗?我不需要有人为我写代码,只要寻找指针,如果这个问题已经众所周

给定一个连续且唯一的数字列表,其中一些是选中的,而另一些不是选中的,我需要创建包含所有选中数字的组。组的数量应保持在最低限度,组中非必需值的数量也应保持在最低限度。组的最大大小也是一个变量

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

最佳组为[(1)和(5,6,7,8)]。 [(1,2,3,4,5)和(6,7,8)]是另一个可能的答案,但它包含更多未选择的值,因此不可取

这种算法有名字吗?我不需要有人为我写代码,只要寻找指针,如果这个问题已经众所周知

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

尝试以下方法:

number=[1,2,3,4,5,4,5,6,2,4]
组,当前组=[],[]
max_group_size=4#这是您的max size
对于n个数字:
是否有效=是否选择了(n)
如果有效:
当前_组。追加(n)
elif(无效且为当前组)或len(当前组)=最大组大小:
groups.append(当前组)
当前_组=[]

假设选择了
是一个函数,它会告诉您是否选择了一个数字

,它似乎类似于一个数字。您需要量化的一件事是额外组的成本与额外非选定值的成本。在您的示例中,第一个答案显然更好,因为答案的组数相同,但第二个答案的非选定值更多。例如,如果一个答案有2个组和8个未选择的值,而另一个答案有3个组和4个未选择的值,则选择会变得更加困难。这不会检查最大组大小并添加空组。它不能添加空组,因为添加组的唯一时间是在
elif current_group
中,只有
len时才是真的(当前组)>0
。关于最大组大小,您是对的,我忘了,我将立即编辑答案,谢谢!