精易论坛

标题: 求一个算法优化 [打印本页]

作者: 李靖武    时间: 2025-2-16 11:34
标题: 求一个算法优化
这个算法能计算出最短路径,但是在坐标很多的时候,计算效率大大降低,实测2500个坐标的时候,启动时间基本在40多秒。如果是2W个坐标,估计就没法用了。所以想请教下大佬们,怎么优化这个算法,或者怎么增加多线程同时计算

BFS寻路算法.e

955.24 KB, 下载次数: 17

售价: 1 枚 精币  [记录]

寻路算法


作者: 笨来无一悟    时间: 2025-2-16 11:34
懒得生成数据进行测速 所以我也不知道速度有没有变快

没有测速 按道理会快一些.png (43.44 KB, 下载次数: 0)

没有测速 按道理会快一些.png

三维坐标寻路轻度优化.e

964.14 KB, 下载次数: 2


作者: 凌哥    时间: 2025-2-16 11:55
得重写            
作者: lzh613101    时间: 2025-2-16 13:15
1111111111111111111111111111111111
作者: 算法艺术家    时间: 2025-2-16 14:25
没猜错的话 最耗时的地方应该不是计算吧,应该是 是否存在于数组()这个函数再循环里被调用,建议用哈希表来解决,这样你的cha询速度就可以起飞了
作者: 李靖武    时间: 2025-2-16 14:29
算法艺术家 发表于 2025-2-16 14:25
没猜错的话 最耗时的地方应该不是计算吧,应该是 是否存在于数组()这个函数再循环里被调用,建议用哈希 ...

我测试了也是,3000个坐标,这一轮cha询要16MS。外面还有个3000个节点,就是3*16 = 48秒了
作者: 李靖武    时间: 2025-2-16 14:29
算法艺术家 发表于 2025-2-16 14:25
没猜错的话 最耗时的地方应该不是计算吧,应该是 是否存在于数组()这个函数再循环里被调用,建议用哈希 ...

有没有例子呢
作者: 算法艺术家    时间: 2025-2-16 14:34
李靖武 发表于 2025-2-16 14:29
有没有例子呢

我只是猜测,具体哪个环节最耗时,需要你自己多多测试,然后针对性优化,如果真是cha询的环节耗时,那就用哈希表来提速
作者: 算法艺术家    时间: 2025-2-16 14:36
李靖武 发表于 2025-2-16 14:29
有没有例子呢

还有你说的几千几万的坐标数据 是怎么传进来的 ,是一个文件,还是什么,包括加入成员这个命令 也不如直接赋值速度快
作者: 李靖武    时间: 2025-2-16 14:53
算法艺术家 发表于 2025-2-16 14:36
还有你说的几千几万的坐标数据 是怎么传进来的 ,是一个文件,还是什么,包括加入成员这个命令 也不如直 ...

读文本,一开始就缓存了,那里不消耗时间
作者: 李靖武    时间: 2025-2-16 15:16
算法艺术家 发表于 2025-2-16 14:36
还有你说的几千几万的坐标数据 是怎么传进来的 ,是一个文件,还是什么,包括加入成员这个命令 也不如直 ...

测试出来了,是加入成员这个命令耗时太久,有没有优化的方法哇
作者: 代码人生    时间: 2025-2-16 16:06
众所周知易语言的循环是很拉胯的 可以考虑使用节点 或者哈希表 自己去重写吧
作者: 算法艺术家    时间: 2025-2-16 16:37
李靖武 发表于 2025-2-16 15:16
测试出来了,是加入成员这个命令耗时太久,有没有优化的方法哇

加入成员肯定慢,但是你必须提前知道一共有多少个成员,假设有两万个成员,重定义数组 (数组, 假, 20000)
数组[1]=坐标1,数组[2]=坐标2,这样直接赋值
作者: 算法艺术家    时间: 2025-2-16 16:41
李靖武 发表于 2025-2-16 14:53
读文本,一开始就缓存了,那里不消耗时间

读文本,也就是说一开始是文本文件,你是分割成数组的?就算这么做,也有更快的方法,比如用快速文本对象去加载文本文件,然后用快速文本对象去分割数组
作者: a13149057125    时间: 2025-2-16 16:48
帮你优化还要购买你的源码才能下载?
作者: 李靖武    时间: 2025-2-16 17:30
a13149057125 发表于 2025-2-16 16:48
帮你优化还要购买你的源码才能下载?

第一次上传,不知道怎么设置,它显示要填金币数量。。
作者: 李靖武    时间: 2025-2-16 17:33
算法艺术家 发表于 2025-2-16 16:37
加入成员肯定慢,但是你必须提前知道一共有多少个成员,假设有两万个成员,重定义数组 (数组, 假, 20000) ...

但是那个已访问节点,是不知道数量的
作者: 笨来无一悟    时间: 2025-2-16 17:36
【蠢新学汇编】三维坐标测距
https://125.confly.eu.org/forum.php?mod=viewthread&tid=14826012
(出处: 精易论坛)
你的测距算法太慢了
作者: 笨来无一悟    时间: 2025-2-16 17:40
还有 你的坐标应该用整数保存 这样就避免了分割和到整数

XYZ坐标测距.e

960.04 KB, 下载次数: 4


作者: 李靖武    时间: 2025-2-16 21:27
笨来无一悟 发表于 2025-2-16 17:40
还有 你的坐标应该用整数保存 这样就避免了分割和到整数

感谢,但是我试了,还是速度慢,我发现了,就是是否存在于数组那里,消耗太多时间
作者: 李靖武    时间: 2025-2-16 21:27
算法艺术家 发表于 2025-2-16 16:41
读文本,也就是说一开始是文本文件,你是分割成数组的?就算这么做,也有更快的方法,比如用快速文本对象 ...

我又试了下,发现是否存在于数组,会消耗大量时间
作者: 李靖武    时间: 2025-2-16 22:07
李靖武 发表于 2025-2-16 21:27
感谢,但是我试了,还是速度慢,我发现了,就是是否存在于数组那里,消耗太多时间 ...

有无例子下载,上万坐标不求3秒了,10秒内都能接受了
作者: 算法艺术家    时间: 2025-2-17 00:32
李靖武 发表于 2025-2-16 21:27
我又试了下,发现是否存在于数组,会消耗大量时间

那我一开始猜测的就是对的,用哈希表来解决cha询的问题吧,你的循环历遍的写法 太初级了,数据量大的化 速度完全不行的
作者: 李靖武    时间: 2025-2-17 00:46
笨来无一悟 发表于 2025-2-16 23:40
懒得生成数据进行测速 所以我也不知道速度有没有变快

我单独试了下你这个计算距离和我写的对比,1千亿次循环下,确实会快8倍多,但是代码按照你图中这样改过的,他速度慢的原因不是计算这一步  ,因为上面有个判断,判断是否在当前数组,不在的话才会计算,应该是那里导致了变慢




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4