如何生成数组 c++ 长度为 k 的所有唯一子集
How to generate all unique sub sets of length k of an array c++
我需要一种方法来生成数组长度为k的所有唯一子集,类似于python中的itertools.combs()。我正在尝试获取这些集合以进行关联挖掘,直到支持小于 2。任何通过 2 的集合都被证明是令人头疼的。此外,不能为此使用任何 STL 函数。
任何见解将不胜感激。
我能找到的最接近我的问题是什么:在 Python 中生成大小为 k 的所有子集(包含 k 个元素)
P.S 集合(数组)中的每个元素都是整数。
在主要:
int temp = 0;
int setsize = 2;
int **testarray = subsets(itemset,itemsetSize,setsize);
for (int i = 0; i < 1300; i++)
{
for(int j = 0; j < 10; j++)
{
cout<<testarray[i][j];
}
}
cout<<endl;
在函数中:
int** subsets (int inputArray[],int arraySize, int k)
{
size_t n = arraySize;
int **resultArray = 0;
resultArray = new int *[1000];
size_t i = (1 << k) -1;
while( !(i >> n) )
{
int pushBack = 0;
int pushBack2 = 0;
int v[500];
for (size_t j = 0; j<n; j++)
{
if (i & (1 << j))
{
v[pushBack] = inputArray[j];
pushBack++;
}
}
resultArray[pushBack2] = v;
pushBack2++;
i = (i+(i&(-i)))|(((i^(i+(i&(-i))))>>2)/(i&(-i)));
}
return resultArray;
}
#include <vector>
#include <iostream>
using namespace std;
vector<vector<int>> subsets(const vector<int>& input, int k)
{
size_t n = input.size();
vector<vector<int>> result;
size_t i = (1 << k) - 1;
while( !(i >> n) )
{
vector<int> v;
for (size_t j = 0; j < n; j++)
if (i & (1 << j))
v.push_back(input[j]);
result.push_back(v);
i = (i+(i&(-i)))|(((i^(i+(i&(-i))))>>2)/(i&(-i)));
}
return result;
}
int main()
{
auto out = subsets({5,2,8,14,3,9,11}, 3);
for (auto x : out)
{
for (auto y : x)
cout << y << " ";
cout << endl;
}
}
输出:
5 2 8
5 2 14
5 8 14
2 8 14
5 2 3
5 8 3
2 8 3
5 14 3
2 14 3
8 14 3
5 2 9
5 8 9
2 8 9
5 14 9
2 14 9
8 14 9
5 3 9
2 3 9
8 3 9
14 3 9
5 2 11
5 8 11
2 8 11
5 14 11
2 14 11
8 14 11
5 3 11
2 3 11
8 3 11
14 3 11
5 9 11
2 9 11
8 9 11
14 9 11
3 9 11
相关文章:
- 何时在引用或唯一指针上使用移动语义
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 计算排序向量的向量中唯一值的计数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 通过组合不同的类型来创建唯一的id
- 使用Unique_ptr确保工厂中的对象唯一
- c++多进程编写一个唯一的文件
- 在以唯一ptr为值的C++映射中,动态内存何时会被销毁
- 如何更改唯一指针向量的可见性
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 在子集化后将包含索引号的列表列表映射到标准索引序列
- C++尝试深度复制唯一指针时出现内存访问冲突
- 具有引用成员的结构是否具有唯一的对象表示形式
- 显示字符串的集合和子集
- 如何生成集合的所有唯一子集
- 如何在满足谓词的向量中获得唯一PTR的子集
- 如何生成数组 c++ 长度为 k 的所有唯一子集
- 用一些S计数大小为k的唯一子集