求算法:大概6K个实例。每次能迅速查找到。求时间和空间最佳的的最优算法
具体描述如下:
大概6K个状态机。这个6K个状态机的ID是统一编码的。 现在接受到一个消息。我要迅速查找到是发给那一个状态机。 要求:时间、空间、以及实现方法易于实现型的最佳方案。
[解决办法]
用二分查找搜索不行吗?
[解决办法]
B树
[解决办法]
直接用或偷 STL 中的hashmap。
需要 6K / 0.72 个存储ID和指针的空间。以ID为关键字hash。时间复杂度为O(1)
[解决办法]
不懂,太难了
[解决办法]
有消息来就申请空间,状态机完成即释放空间???
楼主是这个意思吧??
[解决办法]
用hash表吧...
[解决办法]
hehe 反正 B树 的 是个外行 .
[解决办法]
如果能 哈西就哈西 ,不能就
指针数组+ 二分查找 ,插入也用 二分插入。
这个我觉得比较合理
[解决办法]
造表啊
一次内存寻址就找到了
最快,内存占用也不多,相对pc
不过如果你是嵌入式编程,那就另当别论
[解决办法]
你既不说 你应用环境的空间限制大小,也不说查询时间的可容忍程度,如何谈最佳方案?
> > 现在接受到一个消息。我要迅速查找到是发给那一个状态机。
消息的内容是什么,或者说消息如何和每个状态ID 关联? 这个对应关系是1对1的吗?
===下面是我的建议 ===
1) 如果你的系统内存足够大,用 hash . 查找效率极高,而且插入新节点的开销小;
下面情况假设你的内存有限制,无法使用 hash函数,或者使用 hash 内存开销过大,不经济。
2) 如果你的系统负载极其不均衡(且觉得 hash 表对内存开销太大),可以考虑 平衡二叉查找树。查找速度快,同二分查找;动态建立,不浪费内存;(AVL 或 红黑树都可以)
3) 如果你的系统经常性的接近满配(且内存有严格限制,无法将满配数据全部载入内存),那么学习一下操作系统的虚拟内存管理,构造缓冲机制,不经常用的放在磁盘上,以及合理的调度方法(很多方法,一般UNIX操作系统教材都讲到)。
[解决办法]
如果你要实现的这个不是“关键应用”(速度慢会成为系统瓶颈),那么一个很简单易实现,节约内存的方法是:
1)定义一个链表类型 ;
2)定义数组 A[128],数组元素是指向某个链表的指针;
3)根据行参数i,定位 A[i], 然后在链表中查找,直到列参数 j
比你直接申明大数组要节约内存,如果还是觉得内存紧张,把数组A也用链表定义;
===
如果是一个关键应用,HASH后者AVL。这个时候你需要重新定义你的参数,不要用2个参数行列,而是4K个数据ID统一编码
[解决办法]
有索引的话无非是hash,二分,快速收敛