| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6687 人关注过本帖
标题:出个小题 活跃下论坛气氛
只看楼主 加入收藏
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
我写了脚本测试了一下
果然效果很好。
-bash-3.00$ ./test < in.dat
Run Time        0.036625

-bash-3.00$ ./outcome < in.dat
Run Time        0.923035


生命不熄,战斗不止.
2009-08-25 15:06
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
以下是引用wxjeacen在2009-8-25 12:30的发言:回复 31楼 pangding最优的方法肯定就是构造二叉树,毫无疑问.
直接无视掉了hashtable了……也罢,我写个hash的看看性能如何。

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-25 15:28
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 42楼 StarWing83
  是很差劲的

我就是真命天子,顺我者生,逆我者死!
2009-08-25 15:44
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
回复 42楼 StarWing83
最烦马后炮的人。
Blue不是一经贴代码了。
结果我上面也测了。

生命不熄,战斗不止.
2009-08-25 15:49
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
热闹  热闹

[ 本帖最后由 BlueGuy 于 2009-8-25 16:38 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2009-08-25 15:51
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
写出来了,不过还没测试过。
程序代码:
#include <stdio.h>
#include <string.h>

#define HT_SIZE 16381

int total = 1;

typedef unsigned int hash_T;
hash_T ht_hash[HT_SIZE] = {0};
int ht_index[HT_SIZE];
char text[10001][201];
int count[10001];

hash_T hash(char *str)
{
    hash_T h = *str;

    if (h != 0)
    {
        for (str += 1; *str != '\0'; str++)
            h = (h << 5) - h + *str;
    }

    return h;
}

int lookup_and_insert(char *str)
{
    size_t step = 0, index;
    hash_T hash_value = hash(str);

    if (hash_value < 1)
        hash_value = 1;

    index = hash_value % HT_SIZE;

    while (ht_hash[index] != 0)
    {
        if (ht_hash[index] == hash_value
                && !strcmp(text[ht_index[index]], str))
            return ht_index[index];

        step++;
        index += step;
        index %= HT_SIZE;
    }

    strcpy(text[total], str);
    ht_hash[index] = hash_value;
    ht_index[index] = total;
    count[total] = 1;
    ++total;
    return 0;
}

int main(void)
{
    char txt[201];
    int i, n, res;

    res = scanf("%d", &n);

    for (i = 0; i < n; ++i)
    {

        if (scanf("%s", txt) == 1
                && (res = lookup_and_insert(txt)))
            ++count[res];
    }

    for (i = 1; i < total; ++i)
        printf("%s %d\n", text[i], count[i]);

    return 0;
}


[ 本帖最后由 StarWing83 于 2009-8-25 19:48 编辑 ]

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-25 16:16
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
……………………我发帖的时候还只有第四楼,没看见BlueGuy的代码,我的代码也和他的不一样,不过可以测测看哪个的效率比较高。

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-25 16:21
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
while (strcmp(a[x].str, "") && strcmp(a[x].str, s))
好像这个判断太差了

  学了不少知识

[ 本帖最后由 BlueGuy 于 2009-8-25 16:50 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2009-08-25 16:44
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 32楼 wxjeacen
请你写个 AVL 或者 随机BST 让我们学学吧

我就是真命天子,顺我者生,逆我者死!
2009-08-25 17:00
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
去吃饭,回来写个sbt玩玩……

专心编程………
飞燕算法初级群:3996098
我的Blog
2009-08-25 17:30
快速回复:出个小题 活跃下论坛气氛
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017138 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved