免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: flw2
打印 上一主题 下一主题

10万个字符串,检查相同的.怎么找? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-09-23 22:39 |只看该作者
搞到数据库中去 呵呵

论坛徽章:
0
12 [报告]
发表于 2006-09-23 23:04 |只看该作者
字符串可以提前处理吗 ,如果字符串很少变化, 可以对字符串进行MD5编码, 的到MD5 列表, 然后对MD5列表排序, 得到MD5编码索引, 需要进行字符串查找时 , 先找具有相同MD5的字符串, 然后仔细比较, 速度应该很快的的 。
如过数据时变动很大的, MD5索引可以用,hash + 链表的方式 。 自持动态加载。

论坛徽章:
0
13 [报告]
发表于 2006-09-24 00:03 |只看该作者
构建一个索引树!
讲课时用过这个例子,参考一下吧!

  1. #define TREEWIDTH 256

  2. typedef struct node_t {
  3.         struct node_t *next[TREEWIDTH];
  4.         int count;
  5. } node_t;

  6. /* 这个函数把一个word导入一个索引树,然后返回这个word以前曾经导入过多少次 */
  7. int
  8. indexword(node_t *head, const char *word)
  9. {
  10.         int i;
  11.         node_t *cur,*new;

  12.         for (i=0,cur=head;;++i) {
  13.                 if (word[i]=='\0') {
  14.                         cur->count=cur->count+1;
  15.                         if (cur->count > 1) {
  16.                                 return cur->count-1;
  17.                         }
  18.                         break;
  19.                 }
  20.                 if (cur->next[word[i]] == NULL) {
  21.                         cur->next[word[i]] = (node_t*)malloc(sizeof(node_t));
  22.                         if (cur->next[word[i]] == NULL) {
  23.                                 return -1;
  24.                         }
  25.                 }
  26.                 cur=cur->next[word[i]];
  27.         }

  28.         return 0;
  29. }

复制代码

论坛徽章:
0
14 [报告]
发表于 2006-09-24 05:52 |只看该作者
btree?

论坛徽章:
0
15 [报告]
发表于 2006-09-24 12:25 |只看该作者
可以直接将所有字符串排序,然后二分查找,这个也不慢的。

要算 hash 的话,也不需要 md5 那么复杂的,毕竟 md5 太长了,比较不方便。我习惯这样算 hash:

  1. int hash_str(const char* str)
  2. {
  3.   int h = 0;
  4.   while (*str)
  5.     h = h * 5 + *str++;
  6.   return h;
  7. }
复制代码


也可以对字符串的 pair<hash, index> 按 hash 排序,先对 hash 进行二分查找,再比较实际值。

论坛徽章:
0
16 [报告]
发表于 2006-09-25 05:51 |只看该作者
原帖由 BenBear 于 2006-9-24 12:25 发表
可以直接将所有字符串排序,然后二分查找,这个也不慢的。

要算 hash 的话,也不需要 md5 那么复杂的,毕竟 md5 太长了,比较不方便。我习惯这样算 hash:
[CODE]
int hash_str(const char* str)
{
  int h ...

md5 什么意思?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
17 [报告]
发表于 2006-09-25 09:29 |只看该作者
原帖由 liuty2006 于 2006-9-25 05:51 发表

md5 什么意思?

google md5

论坛徽章:
0
18 [报告]
发表于 2006-09-25 10:40 |只看该作者
原帖由 flw 于 2006-9-25 09:29 发表

google md5



"MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)" --- 好像用于加密,但与此查找相同字符串算法有什么关系?

论坛徽章:
0
19 [报告]
发表于 2006-09-25 10:43 |只看该作者
原帖由 liuty2006 于 2006-9-25 10:40 发表



"MD5的全称是Message-Digest Algorithm 5(信息-摘要算法)" --- 好像用于加密,但与此查找相同字符串算法有什么关系?



8懂这个木有关系。。。

有排序树。。。

论坛徽章:
0
20 [报告]
发表于 2006-09-25 10:47 |只看该作者
原帖由 BenBear 于 2006-9-24 12:25 发表
可以直接将所有字符串排序,然后二分查找,这个也不慢的。

要算 hash 的话,也不需要 md5 那么复杂的,毕竟 md5 太长了,比较不方便。我习惯这样算 hash:
[CODE]
int hash_str(const char* str)
{
  int h ...


排序二分法么。。。

老师提问就问这个D。。。。。:em11:

结果木有人回答上。。。:em11:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP