gpt4 book ai didi

c - 如何优化我的哈希表以减少实际运行时间?

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:45 25 4
gpt4 key购买 nike

下面是我的一段程序,它使用哈希表将文件(字典)加载到内存中。该词典每行仅包含 1 个单词。但是这个过程花费了太多时间。我该如何优化它??

 bool load(const char* dictionary)
{
// TODO
int k;
FILE* fp = fopen(dictionary,"r");
if(fp == NULL)
return false;

for(int i=0; i<26; i++)
{
hashtable[i] = NULL;
}

while(true)
{
if(feof(fp))
return true;

node* n = malloc(sizeof(node));

n->pointer = NULL;

fscanf(fp,"%s",n->word);

if(isalpha(n->word[0]))
{
k = hashfunction(n->word);
}

else return true;

if(hashtable[k] == NULL)
{
hashtable[k] = n;
total_words++;
}

else
{
node* traverse = hashtable[k];
while(true)
{
if(traverse->pointer == NULL)
{
traverse->pointer = n;
total_words++;
break;
}
traverse = traverse->pointer;
}
}

}
return false;
}

最佳答案

摆脱潜在的功能问题,然后担心性能。

A) for(int i=0; i<26; i++)可能是错的,hashtable[]定义未发布。使用这么小的固定表对于性能来说肯定是不明智的。

B) "%s"gets()一样安全- 两者都不好。而不是 fscanf(fp,"%s",n->word); , 使用 fgets() .

C) 而不是 if(feof(fp)) , 检查来自 fscanf()/fgets() 的返回值.

D) isalpha(n->word[0]) --> isalpha((unsigned char) n->word[0])应对负面char值(value)观。

E) 检查内存分配失败。

F) 根据未发布的代码,还可能存在其他问题。

然后形成一个简单的测试用例并使用有效的最少代码,考虑在 codereview.stackexchange.com 上发帖以寻求性能改进。

关于c - 如何优化我的哈希表以减少实际运行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39010838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com