传说中的字典树
#include <stdio.h>
#include <string.h>
#include "stdlib.h"

char in[35];

typedef struct
  {
int next[53];
int count;
}node;
node trie[150005];
int now;

char st[10005][35];
int snow;

void init()
  {
memset(&trie[0],0,sizeof(trie));
now = 1;
snow = -1;
}

int cmp(const void *a, const void *b)
  {

return strcmp((char *)a, (char *)b);
}

int insert(char *str, int len)
  {
int i;
int p = 0;
int hash;
for (i=0; i<len; i++)
 {
hash = str[i]-20;
if (!trie[p].next[hash])
 {
memset(&trie[now], 0, sizeof(node));
trie[p].next[hash] = now++;
}
p = trie[p].next[hash];
}
trie[p].count++;
return p;
}

int search(char *str, int len)
  {
int i;
int p = 0;
int hash;
for (i=0; i<len; i++)
 {
hash = str[i]-20;
if (!trie[p].next[hash])
 {
return 0;
}
p = trie[p].next[hash];
}
if(!trie[p].count)
 {
return 0;
}
return p;
}

int main()
  {

int p, i;
int count = 0;
int len;
init();
while (gets(in))
 {
len = strlen(in);
p = search(in, len);
if (!p)
 {
insert(in, len);
strcpy(st[++snow], in);
}
else
 {
trie[p].count ++;
}
count ++;
}

qsort(st, snow+1, sizeof(st[0]), cmp);
for (i=0; i<snow+1; i++)
 {
printf("%s", &st[i]);
len = strlen(st[i]);
printf(" %.4lf\n", (double)trie[search(st[i], len)].count/(double)count*100);
}
return 0;
}


|
|
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|
25 | 26 | 27 | 28 | 29 | 30 | 31 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 1 | 2 | 3 | 4 | 5 |
|
公告
决定从线程开始!!
常用链接
留言簿(6)
随笔档案
搜索
最新评论

阅读排行榜
评论排行榜
|
|