有1000万个随机的整数中想实现尽可能快的查找,有什么高效的算法?(平均查找时间要近可能的快,单个数据查找最坏比较次数不能超过12次。内存使用不能超过512M)
解决方案 »
- SSH连接情况下获取本机IP得到127.0.0.1?
- VC6.0添加文件到工程,出现编辑器停止运行问题?请问如何解决?
- C++有没有类似如下C#的功能?
- RegOpenKey
- TextOut的调用怎么会出错?(vs2005下)
- 怎么才能让ActiveMovie Window不显示
- 关于 文件读写
- 问一个directx的问题
- 关于CSplitterWnd的问题,俺实在是不会了,求求各位帮忙吧!
- 怎样用WINDOWSAPI函数取消打印属性当中的使用脱机打印这个属性
- 大虾帮忙,数据传出出错,200分一并给出
- 求OpenGL 1.4或者1.5,2.0版本的的gl.h, glu.h, opengl32.lib, glu32.lib文件,还有新版本的glext.h
Quick sort排序1000万个数?
并且即便是已经排序了,使用折半查找,也无法算法楼主的最多12次比较的要求呀。
void Init()
{
for(UINT i=0;i<COUNT;i++)
{
UINT Row = ValueArray[i]/(64K);
UINT Col = ValueArray[i]%(64K); SetCellValue(Row, Col, 1);
}
}//查找,把欲查找的值转化成坐标,取得矩阵中的值
bool Find(DWORD dwValue)
{
UINT Row=dwValue/(64K);
UINT Col=dwValue%(64K);
return GetCellValue(Row, Col)==1;
}关于稀疏矩阵的知识,请参考相关资料。
不要做梦了。
《计算机程序设计艺术》
第3卷《排序与查找》
第5章《排序》
5.2节《内部排序》引理M:
任何以比较元素对偶为基础的在n个元素中寻找极大者的算法,必须至少做n-1次比较。即使是已经排好序的数,最快的折半查找,1000万的数据,也要比较24次。
#define CT_HASH_TABLE_SIZE 1000000typedef CMap<int, int, int, int> Int2IntMAP;
Int2IntMAP m_map;map.RemoveAll();
map.InitHashTable();
....
m_mapCT.Lookup(index, sVal);