C语言实现求字符串子集问题

这个问题在于实现Apriori算法的时候需要求各个频繁集的关联规则,而这时需要在求得最大的频繁集中求各个频繁集的真子集。然后在实现这一步的时候被卡主了,第一反应是用递归完成,但是面对数据挖掘中庞大的项目集,递归显然很低效,而且估计跑不起来,所以用迭代的方法显然比较靠谱。

网上非递归的方法有用二进制加法模拟实现,具体就是

例如有abcd,用0000加1-》0001这里的1就映射到相应的位置的字符串,例如对于0101也就是bd,那么我们通过不停对他加1,那么就能模拟出这个过程。这个方法显然很好,但是得运算2^n-1次.

自己后来排列了下,对于1234这样的形式,可以有

1

12,13,14,

123,124,1234

2

23,24

234

3

34

4

即用一个变量去循环1234上的元素,如何再利用一个变量去控制他每次显示的的长度,例如如果长度为2,那么显示以该元素为首的所有可能,例如12,13,14这样。思想比较简单,实现也比较简单。附上C代码

#include
#include

void print(int*a,int start,int count){
    while(count>=0){
        printf("%d",a[start]);
        start++;
        count--;
    }
}

int main(){
    int m[4]={1,2,3,4};
    int length=sizeof(m)/sizeof(int);   //求长度
    int i,j,k;
    for(i=0;i
        printf("%d\n",m[i]);
        for(j=1;j

            for(k=j+i;k
                print(m,i,j-1);
                printf("%d\n",m[k]);
            }
        }
    }
    system("pause");
    return 1;
}
时间: 2024-10-26 22:08:44

C语言实现求字符串子集问题的相关文章

C语言中求字符串的长度

在C语言中求字符串的长度,可以使用sizeof()函数和strlen()函数,后者需要引入string.h (#include <string.h>) 因为C语言字符串是以 \0 结尾表示结束的,如: char str1[] = {'h','e','l','l','o','\0'}; 使用sizeof(str1) 结果为:6,因为包括 \0; 使用strln(str1)结果为:5,不包括 \0, 所以只求字符串中内容的长度,就使用strlen()函数 另: sizeof()函数,既可以用来计算

c语言:求字符串的字节数,strlen

#include<stdio.h> int main() { printf("%d\n",strlen("Welcome\n")); return 0; } 结果: 8 Press any key to continue

【C语言】实现一个函数求字符串长度(不能创建第三方变量)

//实现一个函数求字符串长度(不能创建第三方变量) #include <stdio.h> #include <assert.h> int my_strlen(const char *p) { assert(p); if (*p == '\0') return 0; else return 1 + my_strlen(++p); } int main() { char *p = "abcdefg"; printf("%d\n", my_strl

【C语言】编写一个函数,求字符串长度

//编写一个函数,求字符串长度 #include <stdio.h> #include <assert.h> int my_strlen(const char *p) { int len=0; assert(p); while (*(p++)) { len++; } return len; } int main() { char *p = "abcdef"; printf("%d\n", my_strlen(p)); return 0; }

【c语言】实现一个函数,求字符串的长度

// 实现一个函数,求字符串的长度 #include <stdio.h> #include <assert.h> int my_strlen(char const *p) { int count = 0; assert(p != NULL); while(*p) { count++; p++; } return count; } int main() { char *p = "zhaoyaqian"; printf("长度是:%d\n", m

【c语言】实现一个函数,求字符串的长度,不允许创建第三方变量

// 实现一个函数,求字符串的长度,不允许创建第三方变量. #include <stdio.h> #include <assert.h> int my_strlen_no(char const *p) { assert(p != NULL); if (*p == NULL) return 0; else return (1 + my_strlen_no(p + 1)); } int main() { char *p = "zhaoyaqian"; printf(

Swift语言指南(十)--字符串与字符

原文:Swift语言指南(十)--字符串与字符 字符串是一段字符的有序集合,如"hellow,world"或"信天翁".Swift 中的字符串由 String 类型表示,对应着 Character 类型值的集合. Swift 中的 String 类型为你的编程提供了一个高速的,兼容 Unicode规范 的文本处理方式.Swift 创建和处理字符串的语法轻量可读,与 C 语言的字符串语法颇为相似.字符串的拼接非常简单,只需将两个字符串用 + 运算符相加.字符串的值是否

【C语言总结】字符串

字符串的存储 字符串是用字符数组存储的,并且最后一位必须是\0 ,编译器会把这个字符数组看做是char*类型的指针. 例如:printf("abc") //传递的时abc的地址,并且是a的地址 操作: char *p; p = "abc"; char ch; ch = "abc"[1]; 字符串变量 char str[8] = "abcdefg";//会把这几个字符复制到这个字符数组中: 他的存储方式为: 如果字符串不够7个就

C语言最优化求素数

初学C语言,看到求素数的代码,不是太满意,自己设计了一个计算流程图.在贴吧里也问了一下,和"埃拉托色尼(Eratosthenes)筛法”有些撞车,当然在下不敢与数学巨匠们争长短,不过还是想自己试一下. 百度了一下有人已经用这类方法做了代码,不过和我的想法有出入. 思路: 1要避免冗余的求余计算的计算次数,这样在数字足够大的时候更能体现更高的计算效率, 1)分母排除偶数,可以减少一半的计算量.具体做法是改+1递增为从第二个素数3开始+2递增; 2)筛选求余计算的分子,而根据素数的定义,只要不被小于