10万个字符串,检查相同的.怎么找?
来源:互联网 发布:北京市软件行业协会 编辑:程序博客网 时间:2024/05/17 08:02
构建一个索引树!
讲课时用过这个例子,参考一下吧!
字符串可以提前处理吗 ,如果字符串很少变化, 可以对字符串进行MD5编码, 的到MD5 列表, 然后对MD5列表排序, 得到MD5编码索引, 需要进行字符串查找时 , 先找具有相同MD5的字符串, 然后仔细比较, 速度应该很快的的 。
如过数据时变动很大的, MD5索引可以用,hash + 链表的方式 。 自持动态加载。
=================================================
可以直接将所有字符串排序,然后二分查找,这个也不慢的。
要算 hash 的话,也不需要 md5 那么复杂的,毕竟 md5 太长了,比较不方便。我习惯这样算 hash:
=======================================================
__________________________________
讲课时用过这个例子,参考一下吧!
CODE:
[Copy to clipboard]
#define TREEWIDTH 256
typedef struct node_t {
struct node_t *next[TREEWIDTH];
int count;
} node_t;
/* 这个函数把一个word导入一个索引树,然后返回这个word以前曾经导入过多少次 */
int
indexword(node_t *head, const char *word)
{
int i;
node_t *cur,*new;
for (i=0,cur=head;;++i) {
if (word[i]=='/0') {
cur->count=cur->count+1;
if (cur->count > 1) {
return cur->count-1;
}
break;
}
if (cur->next[word[i]] == NULL) {
cur->next[word[i]] = (node_t*)malloc(sizeof(node_t));
if (cur->next[word[i]] == NULL) {
return -1;
}
}
cur=cur->next[word[i]];
}
return 0;
}
========================================================typedef struct node_t {
struct node_t *next[TREEWIDTH];
int count;
} node_t;
/* 这个函数把一个word导入一个索引树,然后返回这个word以前曾经导入过多少次 */
int
indexword(node_t *head, const char *word)
{
int i;
node_t *cur,*new;
for (i=0,cur=head;;++i) {
if (word[i]=='/0') {
cur->count=cur->count+1;
if (cur->count > 1) {
return cur->count-1;
}
break;
}
if (cur->next[word[i]] == NULL) {
cur->next[word[i]] = (node_t*)malloc(sizeof(node_t));
if (cur->next[word[i]] == NULL) {
return -1;
}
}
cur=cur->next[word[i]];
}
return 0;
}
字符串可以提前处理吗 ,如果字符串很少变化, 可以对字符串进行MD5编码, 的到MD5 列表, 然后对MD5列表排序, 得到MD5编码索引, 需要进行字符串查找时 , 先找具有相同MD5的字符串, 然后仔细比较, 速度应该很快的的 。
如过数据时变动很大的, MD5索引可以用,hash + 链表的方式 。 自持动态加载。
=================================================
可以直接将所有字符串排序,然后二分查找,这个也不慢的。
要算 hash 的话,也不需要 md5 那么复杂的,毕竟 md5 太长了,比较不方便。我习惯这样算 hash:
CODE:
[Copy to clipboard]
int hash_str(const char* str)
{
int h = 0;
while (*str)
h = h * 5 + *str++;
return h;
}
{
int h = 0;
while (*str)
h = h * 5 + *str++;
return h;
}
=======================================================
__________________________________
- 10万个字符串,检查相同的.怎么找?
- java中从1000万个随机数中查找出相同的10万个随机数花的最少时间
- 从10万个数中找10个最大的数
- PHP之找任意两个字符串的最大相同部分
- 一个检查字符串是否相同的封装函数
- 找相同字符串(非AC代码,luogu上第一个点过不了TAT)
- 寻找热门查询,300万个查询字符串中统计最热门的10个查询
- 将n个字符串中相同的字符串删除
- 1004---找相同字符串个数操作
- 利用后缀数组找字符串中相同且长度最长的字符串
- LeetCode 49. Group Anagrams 找相同的字母组成的字符串
- 相同name的input 判断点击的是第几个,找下标
- 删除以个字符串中相同的字符
- 6.1找出两个字符串第一个相同的字符
- 找出2个字符串中所有相同的字符
- LeetCode number387 字符串第一个没有相同的字符
- 求n个字符串的最大相同子串
- java中如何提取多个字符串相同的字符
- 【阿冈心情】住了15年医院的阿冈怕进医院!
- 【阿冈献策】 5进4历娜和刘力扬大反击的独孤九式
- 为自己的简历工作
- jBPM3.12用户指南中文翻译----第五章 部署
- 【阿冈观察】06超女三大准冠军的10个陷阱
- 10万个字符串,检查相同的.怎么找?
- swing入门教程(一) swing简介
- 构建具有最大灵活性的 Web 应用程序的 Python 标准入门
- AJAX, EMF, GEF, 读心术
- 【阿冈建议】5进4力扬的百变不该再歌舞变!
- js中,实现两个数字相加
- 一沓扑克牌中剔除等于13或者相邻之和等于13的扑克牌,剩余多少
- Swing用户界面设计
- 分页说明