如何寻找一个字符数组的子集?

Digitaldancer 2005-12-05 10:30:06
例如给定一个字符数组{A,B,C},如何找到所有的子集{A,B,C,AB,AC,BA,BC,CA,CB,ABC,ACB,BAC,BCA,CAB,CBA}?
我用的方法是依次寻找1位,2位,3位的子集。例如寻找2位的字符串时,先随机选取第一位,然后从剩余的两个字母中随机选取一个出来,组成一个两位的字符串(如AB)。由于两位的字符串共六个,把每次随机产生的字符串记下来,与已经存在的做比较,若重复则删除,不重复则保留,直到发现所有的六个两位字符串。三位的产生方法类似。算法由于采用随机产生,找到所有子集要花很长时间。请问有无更好算法?
...全文
257 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
newsea008 2005-12-19
  • 打赏
  • 举报
回复
char[] ji = {A,B,C};
public void powerSet(String str, int i, int n){
if (i > n-1){
System.out.println("str= ");
for (int len=0; len<str.length(); len++){
System.out.println(" " + str.charAt(len));
}
str = "";
}else{
powerSet(str,i+1, n);
str = str.concat(String.valueOf(ji[i]));
powerSet(str,i+1, n);
}
}
xuzuning 2005-12-16
  • 打赏
  • 举报
回复
我很苯
这不就是m取n的组合吗?
jp1984 2005-12-15
  • 打赏
  • 举报
回复
回朔的典型例子
就是求集合的幂集

算法上面已经给了。
Digitaldancer 2005-12-13
  • 打赏
  • 举报
回复
To sanhill:
抱歉,这两天没上网。如你所猜测,AB与BA是不同的子集。
zcz0918 2005-12-13
  • 打赏
  • 举报
回复
#define EXE_MAX_SIZE 1024

char u[EXE_MAX_SIZE];
int p[EXE_MAX_SIZE];
unsigned char flag[0x20];

void set_f(char a)
{
int n = 1;
flag[(int)a/8]|=(n<<=(a&0x07));
}
void __fastcall f(int s,char* in,int n,int r)
{
if (s==r) {
for (int i=0; r != i; ++i)
cout << in[p[i]];
cout << endl;
return;
}
for (int i=0; n != i; ++i)
if (!u[i])
{
++u[i];
p[s] = i;
f(s+1,in,n,r);
--u[i];
}
}
int main(int argc, char *argv[])
{
char in[] = {'a','b','c','d','f,'k','y','d','f'};
int sz = sizeof(in)/sizeof(char);
for(int i = 0 ; sz != i; ++i ) set_f(in[i]);
char *out = (char*)malloc(sz+1);
char * tmp = out;
int m = 1,cnt = 0;

for(int j = 0; 0x20 != j; ++j){
for(i = 0; 0x0f != i; ++i){
if(flag[j]&(m<<i)){
*(tmp++) = (char)(j*8 +i);
cnt++;
}
}
}
for(i = 1 ; i <= cnt; ++i)
f(0,out,cnt,i);
if(out) free(out);
return 0;
}
ZeroGts 2005-12-07
  • 打赏
  • 举报
回复
把一个n元集合看作一个n位二进制数,每一位代表一个元素,0不选,1选。
boodweb 2005-12-06
  • 打赏
  • 举报
回复
设PA是集合A的幂集
set PA={}
for each x in A
{
for each y in PA
PA=PA∪(y∪{x})
PA=PA∪{x}
}
sanhill 2005-12-06
  • 打赏
  • 举报
回复
{A,B,C,AB,AC,BA,BC,CA,CB,ABC,ACB,BAC,BCA,CAB,CBA}?
中间
AB与BA是不同的子集?
AC与CA是不同的子集?
BC与CB是不同的子集?
以及ABC BCA....等可以看成是不同的子集吗??

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧