社区
数据结构与算法
帖子详情
请教一个算法
xiongzm
2002-05-11 04:26:08
一系列空间点(x,y,z),怎么查找给定的点(x0,y0,z0)在这个系列中?怎样做,效率才高,谢谢!可能是很简单。但我还是不会,做出来效率很低。例如:每次要从5000个点中查找一个点,现在要产生1000000组这样的数据,计算一组的可忍耐时间能有多少?我才能在几天内做出来。(这些点是随机产生的)
...全文
27
11
打赏
收藏
请教一个算法
一系列空间点(x,y,z),怎么查找给定的点(x0,y0,z0)在这个系列中?怎样做,效率才高,谢谢!可能是很简单。但我还是不会,做出来效率很低。例如:每次要从5000个点中查找一个点,现在要产生1000000组这样的数据,计算一组的可忍耐时间能有多少?我才能在几天内做出来。(这些点是随机产生的)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
crazy_lazy_pig
2002-05-16
打赏
举报
回复
这样的模型用MATLAB来做的话,应该很简单。不是说位置是有最大范围的吗,
你可以建立一个三维矩阵,记为“T”,矩阵元素T(x,y,z)表示点(x,y,z)是否已经走过,T可以这样初始化:T=zeros(maxX,maxY,maxZ),其中maxX、maxY、maxZ表示位置的最大范围(当然若位置可能出现负坐标的,你还要自己做一下转化),这就表示一开始所有的点都没走过。每随机走过一步,先判断此坐标位的T矩阵元素是否为“1”,不为“1”就可以走到这里,同时标记T的此坐标位为“1”,若是“1”,则另寻他路。
此方法我没有试验过,你自己试一下吧,有两个地方可能会出问题:第一,走每一步都要用到循环,这无疑会降低运算速度;第二,矩阵T不能做的很大,有内存和MATLAB自身系统的限制。再研究吧,此问题值得讨论。
xiongzm
2002-05-14
打赏
举报
回复
感谢大家。小弟很菜,数据结构这个学期正自学着,看了一些书,但实践很少,很多算法没做过;小弟没什么分,只能从内心感谢大家,所有帮助过我的人,我都会表示的。
谢谢 crazy_lazy_pig(疯狂懒猪):我原来做的效率比你的低,也是用的find(),但没有你的这两行好:x=ones(5000,1)*b; %将这个向量扩展成5000行 xx=find(abs(x-a)*ones(3,1)==0);%寻找这个随机点
虽然变量空间增大了些。(真的,matlab 中尽可能不要用循环)。
谢谢 melice(melice): 我正在考虑你的方法。
谢谢 alexanderyu(alex) ( ) 你的程序在我机器上(c533)用了28s,(TC2编译),我的机器怎么这么慢?
我是学化学的(现在大三),有个模型:自避行走。想模拟一下,自避行走不是无规行走,在空间中从一点(如(0,0,0))出发走N(例如N=2000)步(每步长不妨设为1),这N步每步的落点不可重复。即在晶格模型中,每步不可交叉,当然就不回退了,每步最多可向5个随机方向行走(当然,随机方向是6个),产生这样的行走路径,(画出路径)。这样,我先前问的问题就或许简单了一些。(不是每步都要在N-1个点中查找,点的位置变量也是整型的,位置也是有最大范围的。)弄了几天,我都做出来了,满足模型,在改进中效率也有提高。加上其他相关变量,状态函数,能量等等,做出来运行,时间消耗还是不乐观(在我的机器上,用matlab模拟N=2000计算一次要5~6s)。我认为在产生行走路径上效率还可以通过更好的算法提高。
欢迎大家帮我讨论讨论。如果有对该问题的算法感兴趣的,请做一做,告诉我一声您的结果如何,谢谢。
(PS:sorry,I posted this question on C/C++ & Data Algorithm two board.one may communicate with each other)
xiongzm
2002-05-14
打赏
举报
回复
感谢大家。小弟很菜,数据结构这个学期正自学着,看了一些书,但实践很少,很多算法没做过;小弟没什么分,只能从内心感谢大家,所有帮助过我的人,我都会表示的。
谢谢 crazy_lazy_pig(疯狂懒猪):我原来做的效率比你的低,也是用的find(),但没有你的这两行好:x=ones(5000,1)*b; %将这个向量扩展成5000行 xx=find(abs(x-a)*ones(3,1)==0);%寻找这个随机点
虽然变量空间增大了些。(真的,matlab 中尽可能不要用循环)。
谢谢 melice(melice): 我正在考虑你的方法。
谢谢 alexanderyu(alex) ( ) 你的程序在我机器上(c533)用了28s,(TC2编译),我的机器怎么这么慢?
我是学化学的(现在大三),有个模型:自避行走。想模拟一下,自避行走不是无规行走,在空间中从一点(如(0,0,0))出发走N(例如N=2000)步(每步长不妨设为1),这N步每步的落点不可重复。即在晶格模型中,每步不可交叉,当然就不回退了,每步最多可向5个随机方向行走(当然,随机方向是6个),产生这样的行走路径,(画出路径)。这样,我先前问的问题就或许简单了一些。(不是每步都要在N-1个点中查找,点的位置变量也是整型的,位置也是有最大范围的。)弄了几天,我都做出来了,满足模型,在改进中效率也有提高。加上其他相关变量,状态函数,能量等等,做出来运行,时间消耗还是不乐观(在我的机器上,用matlab模拟N=2000计算一次要5~6s)。我认为在产生行走路径上效率还可以通过更好的算法提高。
欢迎大家帮我讨论讨论。如果有对该问题的算法感兴趣的,请做一做,告诉我一声您的结果如何,谢谢。
(PS:sorry,I posted this question on C/C++ & Data Algorithm two board.one may communicate with each other)
xiongzm
2002-05-14
打赏
举报
回复
感谢大家。小弟很菜,数据结构这个学期正自学着,看了一些书,但实践很少,很多算法没做过;小弟没什么分,只能从内心感谢大家,所有帮助过我的人,我都会表示的。
谢谢 crazy_lazy_pig(疯狂懒猪):我原来做的效率比你的低,也是用的find(),但没有你的这两行好:x=ones(5000,1)*b; %将这个向量扩展成5000行 xx=find(abs(x-a)*ones(3,1)==0);%寻找这个随机点
虽然变量空间增大了些。(真的,matlab 中尽可能不要用循环)。
谢谢 melice(melice): 我正在考虑你的方法。
谢谢 alexanderyu(alex) ( ) 你的程序在我机器上(c533)用了28s,(TC2编译),我的机器怎么这么慢?
我是学化学的(现在大三),有个模型:自避行走。想模拟一下,自避行走不是无规行走,在空间中从一点(如(0,0,0))出发走N(例如N=2000)步(每步长不妨设为1),这N步每步的落点不可重复。即在晶格模型中,每步不可交叉,当然就不回退了,每步最多可向5个随机方向行走(当然,随机方向是6个),产生这样的行走路径,(画出路径)。这样,我先前问的问题就或许简单了一些。(不是每步都要在N-1个点中查找,点的位置变量也是整型的,位置也是有最大范围的。)弄了几天,我都做出来了,满足模型,在改进中效率也有提高。加上其他相关变量,状态函数,能量等等,做出来运行,时间消耗还是不乐观(在我的机器上,用matlab模拟N=2000计算一次要5~6s)。我认为在产生行走路径上效率还可以通过更好的算法提高。
欢迎大家帮我讨论讨论。如果有对该问题的算法感兴趣的,请做一做,告诉我一声您的结果如何,谢谢。
(PS:sorry,I posted this question on C/C++ & Data Algorithm two board.one may communicate with each other)
zzwu
2002-05-13
打赏
举报
回复
1天有24*60*60=86400秒,
如果每秒解决一组问题,1000,000组大约要化12天的时间,
如果半秒解决一组问题,1000,000组大约要化6天的时间,
...
如果希望1天解决1000,000组问题,则必须12问题/sec.,近似0.1sec/问题
melice
2002-05-13
打赏
举报
回复
方法1:先根据你的(x,y,z)的分布规律,使用hash table大概划分数据区域。然后每个区域的点的数据使用8quadr-tree记录。这样查找的时候,消耗的时间是极小的。
2:或者,用一个简单的函数f来表征p(x,y,z),(例如,设f=x+y+z),用f的值作为权来排序所有的点,这样,查找相同的权值,再在里面来找点,速度也是不慢的。
xiongzm
2002-05-12
打赏
举报
回复
我用了matlab和C.但是效率很差,我作出来1次好象时间是 半秒,太慢了,可能是我程序中其他方面所牵连的。谢谢crazy_lazy_pig(疯狂懒猪) ,能否列出你的matlab 程序。
crazy_lazy_pig
2002-05-12
打赏
举报
回复
设a是已知的5000个点(也可以:a=rand(5000,3);)
b=rand(1,3); %随机产生一个三维向量
x=ones(5000,1)*b; %将这个向量扩展成5000行
xx=find(abs(x-a)*ones(3,1)==0);%寻找这个随机点
if(xx==[])
%your code
end
将上面的程序用for循环做你需要的次数就可以了
crazy_lazy_pig
2002-05-11
打赏
举报
回复
我也愿意抽两三个小时帮你算一下(用MATLAB),当然若是用C自己编程做,我就不会了,至少保证不了这么短的时间里能做出来。要么你就借一下MATLAB的数学函数库吧
crazy_lazy_pig
2002-05-11
打赏
举报
回复
你是要做什么事情,如果仅需要结果的话,不妨用MATLAB做一下。我用MATLAB
试了1000次判断的情形(其中5000个点和每次判断用的点都是随机的),只需10秒。
one_add_one
2002-05-11
打赏
举报
回复
用hash试试
一个
牛人提供的GIS源码(很好)
一个
牛人提供的GIS源码(很好 下面文字非本人所写,文件提到的下载的东西我全部放包里了。 最后的礼物:校园多媒体系统和校园WEBGIS系统 为什么说是最后的礼物,大概是因为我突然想这个blog不更新了。为什么呢?...
java通过坐标划分区域_
请教
一个
超级
算法
难题——java根据定位坐标计算区域问题!...
问题详情
请教
一个
超级
算法
难题——java根据定位坐标计算区域问题!
请教
一个
超级难题——java根据定位坐标计算区域问题!这些大概数据GIS方面的知识。问题描述:在
一个
房间里(以房间一角做原点(0,0,0))1. 使用定位...
java多级反馈队列进程调度,多级队列反馈调度
算法
请教
多级反馈队列调度
算法
...
请教
多级反馈队列调度
算法
????????????在某一操作系统中对进程调度采用多级反馈队列调度
算法
。现设定采用三级分数给小编了,小编来 0时刻A到达,进入I队列,执行2个时间段后,转向队列II,再执行了3个时间段后,B...
最短路
算法
——Dijkstra
它是一种“单源”最短路径
算法
,一次计算能得到从
一个
起点 s 到其他所有点的最短距离长度、最短路径的途径点。 一、Dijkstra的
算法
思想 Dijkstra 的模型例如多米诺骨牌,你可以想象下面的场景: 在图中所有的边上...
2021-01-03
请教
一下水卡校验
算法
请教
一下水卡校验
算法
卡原始: 0区块:000026A2000000000000000000002B0C 1区块:000026A2000000000000000000002B0C 刷过以后 0区块:000025F6000000000000000000003B39 1区块:000025F...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章