我必须进行表查找才能从输入A转换为输出A'。我有一个输入A的函数,它应返回A'。由于某些原因,无法使用数据库或平面文件。我必须在程序本身中对查找进行硬编码。
什么是最优的(*空格和时间分开):使用散列图,以A作为键,A'作为值,或在函数中使用switch case语句?
该表是一个字符串到字符串查找,大小约为60个条目。
答案 0 :(得分:7)
如果超速需要超速,那么我会考虑perfect hashing。否则,我将使用字符串对的数组/向量,按排序顺序静态创建并使用二进制搜索。我还会编写一个小测试程序来检查速度和内存限制是否得到满足。
答案 1 :(得分:1)
我相信交换机和表查找都是等效的(尽管应该对正在使用的编译器进行一些测试)。现代C编译器将使用查找表实现一个大开关。使用宏语言或脚本语言可以更轻松地创建表查找。
对于两种解决方案,输入A必须是整数。如果不是这种情况,一个解决方案就是实现一个巨大的if-else语句。
如果你有字符串,你可以创建两个数组 - 一个用于输入,一个用于输出(如果它们的大小不同,这将是低效的)。然后,您需要迭代输入数组的内容以查找匹配项。根据您找到的索引,返回相应的输出字符串。
答案 2 :(得分:0)
如果表是非常静态的,将来不太可能改变,你可以看看 - 在“key”字符串中添加少数选择的字符(带有修复索引)是否可以获得唯一性值(值K)。通过使用每个“键”字符串的预先计算的“K”值,将“值”字符串插入到hash_table中。
答案 3 :(得分:0)
虽然 hash 方法很快,但仍有可能发生冲突(两个输入生成相同的哈希值)。快速方法取决于输入的数据类型。
对于整数类型,最快的表查找方法是一个数组。使用传入的数据作为数组的索引。此方法的一个问题是阵列必须考虑最快速度的整个值范围。否则,通过将原始索引转换为数组的索引(类似于散列方法)来减慢执行速度。
对于字符串输入类型,嵌套查找可能是最快的。一个例子是按长度分解表格。第一个数组返回指向表的指针,以根据长度进行搜索,例如: char * sub_table = First_Array [5],长度为5的字符串。可以为专门的输入数据配置。
另一种方法是使用B树,它是“页面”的二叉树。行为类似于嵌套数组。
如果您告诉我们输入类型,我们可以更好地回答您的问题。