关于字符串到整数的映射问题.

predawning 2003-04-10 06:35:20
这个问题是这样的:

提供唯一字符串作为标识,并产生一个对应的整数.这个整数在整个数据集中也应该是唯一的.这样这个整数又可以作为数据库记录集中的索引.从而通过查找字符串完成数据库的查询.
那么有什么好的算法能够完成字符串到整数的映射呢.即生成一一对应的<字符串,整数>元组.

希望有这方面经验的人热心帮助,如有相关材料,或例子也可推荐.谢谢.
...全文
373 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
predawning 2003-04-11
  • 打赏
  • 举报
回复
kicool(多米诺)

这个例子是个字符串到整数(正负都有)的hash函数.不知道生成的整数是否没有重复?
.
我现在还无法验证.
predawning 2003-04-11
  • 打赏
  • 举报
回复
hash算法我也考虑过.但是,hash出来的值可能会有重复,这不是我想要得.如果hash出来的值唯一,当然是最理想的.因为这个整数是做数据库的标识用的,所以范围不会超过长整形的最大数.
predawning 2003-04-11
  • 打赏
  • 举报
回复
补充一句,这个字符串说到底是路径(数据存放的位置)
kicool 2003-04-10
  • 打赏
  • 举报
回复
详见<<数据结构与算法-面向对象的c++设计模式>>
kicool 2003-04-10
  • 打赏
  • 举报
回复
#include <string>
#include <iostream>
#include <cstdlib>

using namespace std;
typedef int HashValue ;
unsigned int const shift = 6;

HashValue const mask =~0U << (sizeof(HashValue)*8-shift);

HashValue Hash(string const& s)
{
HashValue result = 0;
for(unsigned int i = 0; s[i] !=0; ++i)
result = (result & mask) ^(result <<shift)^s[i];
return result;
};

int main()
{
cout <<Hash("Hash1")<<endl;
cout <<Hash("Hash2")<<endl;
cout <<Hash("Hash33")<<endl;
cout <<Hash("Hash444")<<endl;
cout <<Hash("Hash5555")<<endl;

system("pause");
}


zhoory 2003-04-10
  • 打赏
  • 举报
回复
关注
zhouzhaohan 2003-04-10
  • 打赏
  • 举报
回复
我想这应该是找一个哈希算法。你应该把字符串的特点再说的详细一点,整数的范围有多大等等,这样才有利于找到最有效的算法。我想也许再网上搜搜,又比较经典的算法。但愿这不会变成一个高深的数学问题。
practicaldoing 2003-04-10
  • 打赏
  • 举报
回复
我想,用c++标准程序库中的映射(map)类可以解决问题

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧