一种基于一维索引的组合遍历方法技术

技术编号:32132195 阅读:15 留言:0更新日期:2022-01-29 19:33
本发明专利技术属于数据处理算法技术领域,具体涉及一种基于一维索引的组合遍历方法,包括下列步骤:S1、建立n个集合V

【技术实现步骤摘要】
一种基于一维索引的组合遍历方法


[0001]本专利技术属于数据处理算法
,具体涉及一种基于一维索引的组合遍历方法。

技术介绍

[0002]排列组合是组合学最基本的概念。所谓排列,就是指从给定个数的元素中取出指定个数的元素进行排序。组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。
[0003]组合的遍历是计算机软件中常见的一种应用。大部分组合遍历算法都是通过递归的方式来实现。但是,通过递归方式实现有以下几个缺点:1)由于递归是函数调用自身,而函数调用是存在时间和空间的消耗,运行效率较低。2)当调用的层次太多时,递归深度太大时,就会超出栈的容量,从而导致栈溢出。3) 难以采用多线程或分布式计算方式提高性能。为解决此问题,提出一种基于一维索引的组合遍历方法。

技术实现思路

[0004]针对上述的技术问题,本专利技术提供了一种额外占用内存极少、计算复杂度小、可完成大数据级的计算的基于一维索引的组合遍历方法。
[0005]为了解决上述技术问题,本专利技术采用的技术方案为:
[0006]一种基于一维索引的组合遍历方法,包括下列步骤:
[0007]S1、建立n个集合V
i
,每个所述集合V
i
中有k个元素;
[0008]S2、从每个集合V
i
中任取一个元素,构成一个组合;
[0009]S3、遍历所有S2所述的组合,构成集合G;
[0010]S4、通过索引算法将集合G中的所有元素在一维空间生成组合索引G
index

[0011]S5、通过for循环实现组合的遍历。
[0012]所述S1中的集合
[0013]所述S3中的集合G={(v1,v2…
v
n
)|v
i
∈V
i
},i=1,2

n,所述集合G的长度为k
n

[0014]所述S4中的组合索引为一个等差递增数列。
[0015]所述S4中索引算法的方法为:
[0016]S4.1、组合索引值所述j
i
代表第i个集合V
i
中被选中元素的序号,1≤j
i
≤k;
[0017]S4.2、推导出组合索引中每个值对应的集合V
i
中所选中元素的序号,所述 j
i
=((index/k
i
‑1)mod k)+1;
[0018]S4.3、组合索引中的值与所对应组合的关系为:
[0019]本专利技术与现有技术相比,具有的有益效果是:
[0020]1、本专利技术占用内存少,内存占用最大的是已知集合对应的变量,而在计算过程中额外占用的内存极少。
[0021]2、本专利技术计算复杂度小,每个数组只需要n个整数的除法和取模算即可得出。
[0022]3、本专利技术可完成大数据级的计算,可完成2^63个组合的运算。
[0023]4、本专利技术算法简单,任何计算机语言都可实现。
[0024]5、本专利技术可适用于多线程和分布式计算,可以将组合索引值index的范围分段后,使用多线程或分布式计算方式,分别计算,以提高效率。
具体实施方式
[0025]下面将对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0026]一种基于一维索引的组合遍历方法,包括下列步骤:
[0027]S1、建立n个集合V
i
,每个所述集合V
i
中有k个元素;
[0028]S2、从每个集合V
i
中任取一个元素,构成一个组合;
[0029]S3、遍历所有S2所述的组合,构成集合G;
[0030]S4、通过索引算法将集合G中的所有元素在一维空间生成组合索引G
index

[0031]S5、通过for循环实现组合的遍历。
[0032]进一步,S1中的集合
[0033]进一步,S3中的集合G={(v1,v2…
v
n
)|v
i
∈V
i
},i=1,2

n,所述集合G的长度为k
n

[0034]进一步,S4中的组合索引为一个等差递增数列。
[0035]进一步,S4中索引算法的方法为:
[0036]S4.1、组合索引值所述j
i
代表第i个集合V
i
中被选中元素的序号,1≤j
i
≤k;
[0037]S4.2、推导出组合索引中每个值对应的集合V
i
中所选中元素的序号,所述 j
i
=((index/k
i
‑1)mod k)+1;
[0038]S4.3、组合索引中的值与所对应组合的关系为:
[0039]实施例
[0040]本专利技术基于C#的实现的代码如下所示:
[0041][0042][0043]利用以下代码调用zuhe方法:
[0044][0045]得到输出结果如下:
[0046]G0000=(1,11,21),G0001=(2,11,21),G0002=(3,11,21),G0003=(4,11,21),G0004=(5,11,21),
[0047]G0005=(1,12,21),G0006=(2,12,21),G0007=(3,12,21),G0008=(4,12,21),G0009=(5,12,21),
[0048]G0010=(1,13,21),G0011=(2,13,21),G0012=(3,13,21),G0013=(4,13,21),G0014=(5,13,21),
[0049]G0015=(1,14,21),G0016=(2,14,21),G0017=(3,14,21),G0018=(4,14,21),G0019=(5,14,21),
[0050]G0020=(1,15,21),G0021=(2,15,21),G0022=(3,15,21),G0023=(4,15,21),G0024=(5,15,21),
[0051]G0025=(1,11,22),G0026=(2,11,22),G0027=(3,11,22),G0028=(4,11,22),G0029=(5,11,22),
[0052]G0030=(1,12,22),G0031=(2,12,22),G0032=(3,12,22),G0033=(4,12,22),G0034=(5,12,22),
[0053]G0035=(1,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于一维索引的组合遍历方法,其特征在于:包括下列步骤:S1、建立n个集合V
i
,每个所述集合V
i
中有k个元素;S2、从每个集合V
i
中任取一个元素,构成一个组合;S3、遍历所有S2所述的组合,构成集合G;S4、通过索引算法将集合G中的所有元素在一维空间生成组合索引G
index
;S5、通过for循环实现组合的遍历。2.根据权利要求1所述的一种基于一维索引的组合遍历方法,其特征在于:所述S1中的集合3.根据权利要求1所述的一种基于一维索引的组合遍历方法,其特征在于:所述S3中的集合G={(v1,v2…
v
n
)|v
i
∈V
i
...

【专利技术属性】
技术研发人员:张游杰吴伟杨志杰郑伟伟张清萍陈学丽
申请(专利权)人:中电科鹏跃电子科技有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1