社区
数据结构与算法
帖子详情
寻求速度最快的查找算法
andyzheung
2011-01-24 10:08:17
把圆周(0-360实数范围)任意分为16个区域,任意给定某个0-360之间的某个数,如何查找其位于哪个区域.
除了循环地挨个查找,哪位大侠有更好的想法.寻求效率(主要指速度)最高的算法.
先谢过了...
...全文
1076
16
打赏
收藏
寻求速度最快的查找算法
把圆周(0-360实数范围)任意分为16个区域,任意给定某个0-360之间的某个数,如何查找其位于哪个区域. 除了循环地挨个查找,哪位大侠有更好的想法.寻求效率(主要指速度)最高的算法. 先谢过了...
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
andyzheung
2011-01-25
打赏
举报
回复
多谢大家,最后还是没换该算法,在其他的部分作了处理。
感觉目前算法这块自己还是太弱了,经验又少。
以后有算法方面的问题,希望能得到大家更多的帮助。。
networkwx
2011-01-25
打赏
举报
回复
9楼的不错,把所有元素的值看成区域, 这样给定下标就可以访问,即简单还高效。
a[200] = 1;//说明200在区域1
booksoon
2011-01-24
打赏
举报
回复
数据规模这么小,什么样的算法都可以~~~
cnmhx
2011-01-24
打赏
举报
回复
再补充一点:
记住,延拓后的第0个区域和第16个区域是同一个区域。
另外,为了简单,你可将第一次寻找的地址置为中间的第8个。这样就保证了最大二分搜索次数正好<4。
平均搜索效率提高4倍。(2/8)
cnmhx
2011-01-24
打赏
举报
回复
我猜想的,你的区域在2:[290-340],3:[340-10],。。。第三个区域查找时,上界就小于下界了。所以要变通一下下。将第三个区域变为两个[340-370],[-20-10],一个放在第16个地址,一个放在第0个地址。这样就构成了上下界都严格满足单调递增的17个区域。
再用上述的二分法查找,最多需要4次二分查找,就可找到你的答案。和你的遍历搜索效率比较是log16,和16的关系。
好运!
andyzheung
2011-01-24
打赏
举报
回复
LS的,先谢谢了。
先做出18个区域(边界延拓,为了在0和360所在的区域特殊处理),----这段没看明白.
恩,区域是连续的.就是把整个圆周分为16分(不一定是均分),然后给定一个0-360的某个数,去找位于哪个区间.
开始是用循环一个一个找,太慢了,达不到我们的要求.
后来也想过用折半查找或者哈希查找.但是,这个不完全有序.或者说是"循环有序".
比如: 1:[260-290],2[290-340],3:[340-10],4.......16..
我这个东西是跑在嵌入式处理器的,主频很低,速度慢,而我这个东西又要求很快,所以需要最快的定位区域的方法.
cnmhx
2011-01-24
打赏
举报
回复
搜索问题中的区域是连续的吧?
可以考虑用带上下界的二分搜索。
最简明的,先做出18个区域(边界延拓,为了在0和360所在的区域特殊处理),连续单调递增。
读入一个数,随即地和一个区域的地址上下界比较,若大于上界,则将此地址置为新搜索的下界地址。反之亦然。
。。。然后用二分法再搜索,直到找到读入数在某个区域的地址的上下界之间,或者只剩一个地址为止。
andyzheung
2011-01-24
打赏
举报
回复
没人帮忙啊.
andyzheung
2011-01-24
打赏
举报
回复
自己先顶一个.
mj5757
2011-01-24
打赏
举报
回复
呜呜。。都看不懂。。
绿色夹克衫
2011-01-24
打赏
举报
回复
二分吧,不过16个的话,个人感觉循环找就挺快的,应该比二分还快一些。
实数范围分360个怎么够呢!
超级大笨狼
2011-01-24
打赏
举报
回复
0-360实数范围
这点范围,用360个长的数组,直接找下标都可以了。
aliezeng77
2011-01-24
打赏
举报
回复
楼主:建议将跨360区间比如(350,20)拆成两个区间(0,20),(350,360),这样再用二分查找
,如果查找结果属于(0,20),(350,360),则属于区间(350,20)
丈八涯
2011-01-24
打赏
举报
回复
[Quote=引用 9 楼 icessl 的回复:]
可考虑用映射表.
如果圆周的范围是 0到360,不考虑小数点,可用一个数组表示某一点在哪个区间,如
int a[361];
系统初始化时,把 a[i]置上j,表示i在区间 j 里.
以后查找时,只要取下标就可以了,速度很快.
如果考虑1位小数,我们就把它乘以10,这样,范围就是0到3600,数组多开10倍就可以了.
[/Quote]
跟俺的想法一样。
不过嵌入式的话,内存往往更珍贵。
icessl
2011-01-24
打赏
举报
回复
可考虑用映射表.
如果圆周的范围是 0到360,不考虑小数点,可用一个数组表示某一点在哪个区间,如
int a[361];
系统初始化时,把 a[i]置上j,表示i在区间 j 里.
以后查找时,只要取下标就可以了,速度很快.
如果考虑1位小数,我们就把它乘以10,这样,范围就是0到3600,数组多开10倍就可以了.
zhanglei8893
2011-01-24
打赏
举报
回复
使用区间树即可,操作为log(n)的时间复杂度
数据结构+
算法
综合资料库
-
查找
算法
:学习如何在数据中快速定位特定元素。 - 树形结构操作:包括二叉树的遍历、平衡调整、
查找
和插入等。 - 图
算法
:如Dijkstra
算法
、Floyd
算法
等,解决最短路径问题。 - 动态规划:解决多阶段决策问题,如...
Android 智能问答机器人的实现
最后,对于遇到的问题,开发者可以在博客中留言
寻求
帮助,也可以参考其他开源项目和社区资源,如Stack Overflow和GitHub,来解决问题或获取灵感。通过不断学习和实践,我们可以创建出更智能、更贴近用户需求的问答...
几种优化(求最优解)
算法
的比较
遗传
算法
:优点是能很好的处理约束,能很好的跳出局部最优,最终得到全局最优解,全局搜索能力强;缺点是收敛较慢,局部搜索能力较弱,运行时间长,且容易受参数的影响。 遗传
算法
适合求解离散问题,具备数学理论...
优化二分
查找
算法
,开启高效编程新时代
标题:优化二分
查找
算法
,开启高效编程新时代 在现代软件开发中,
算法
的效率和性能是至关重要的。对于开发者来说,掌握高效的
算法
不仅可以提高程序的运行
速度
,还能显著减少资源消耗。今天,我们将深入探讨一种经典...
《图
算法
》第四章 路径
查找
和图搜索
算法
-2
原文链接:《图
算法
》第四章-2 路径
查找
和图搜索
算法
最短路径变体:A* A*最短路径
算法
改进Dijkstra的
算法
,它更快一些,因为它在确定下一个探索路径时可用的额外信息都包含进来,将这些额外信息作为启发式函数的一...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章