社区
数据结构与算法
帖子详情
递归的效率为什么这么低?
NewJerryj
2009-08-04 03:11:45
我用递归做了一个文件搜索程序,在遍历某个路径树时,如果路径下文件过多,树的深度大,则效率太低,很长时间才能搜索完。
有没有其他效率高的好办法?
...全文
789
31
打赏
收藏
递归的效率为什么这么低?
我用递归做了一个文件搜索程序,在遍历某个路径树时,如果路径下文件过多,树的深度大,则效率太低,很长时间才能搜索完。 有没有其他效率高的好办法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
31 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
donkey301
2009-08-05
打赏
举报
回复
[Quote=引用 11 楼 fireseed 的回复:]
给楼主介绍一个本地文件搜索软件:Everything。
它不是“强大”,也不是“超级”……
我只能用一个很普通的词来形容:光速!
http://xbeta.info/everything/index.htm
[/Quote]
试了一下,的确超级快速,就是不知道怎么选择要搜索的路径,默认只能搜索C:盘
wizard2215
2009-08-05
打赏
举报
回复
类似于fireseed 发的那款软件,如果加上文件夹大小的功能,用什么算法效率最高?
NewJerryj
2009-08-05
打赏
举报
回复
我现在改进了一下,使用多线程进行搜索: 当每次搜索到文件夹目录的时候,则创建一个新的线程去搜索这个子目录......直到最后搜索完成。
这样确实提高了速度,但是出现了一个问题:每次创建一个新线程后,我必须得加个sleep延时一下,否则会出现某个线程参数被丢弃的情况。这是为什么?
JavaerRobertLi
2009-08-05
打赏
举报
回复
速递慢和递归没关系吧。递归会消耗更多的内存是真的,至于速度慢,应该是算法的问题。
就算改成循环解决了,速度也好不到哪里去。时间和你文件的数量成正比
fire_woods
2009-08-05
打赏
举报
回复
整个硬盘文件索引的话,应该直接读取文件分配表和目录分配表是最快的方式.
kingork
2009-08-05
打赏
举报
回复
递归是因为要存储很多临时变量,不断地读取栈内容,,
所以慢吧
fire_woods
2009-08-05
打赏
举报
回复
用tree命令导出所有目录, 顺发,无法测试时间.
fire_woods
2009-08-05
打赏
举报
回复
用dir命令花了将近30s, 一共70000+文件.
NewJerryj
2009-08-05
打赏
举报
回复
恩,不过它遍历整个磁盘的速度令人惊叹,不知如何做到的?
[Quote=引用 26 楼 fireseed 的回复:]
引用 25 楼 NewJerryj 的回复:
刚才试用了一下,我的观点是:
Everything 在启动的时候就遍历了磁盘上所有的文件,所以当我们再进行搜索时速度就超级快了。
这个家伙运行时占用了十几M的内存空间,可见很多用于存放文件列表了。
很显然它是基于索引数据库的。在我的机子上,他一共占了15M的物理内存。对于目前的主流内存来说,毛毛雨。
[/Quote]
fireseed
2009-08-05
打赏
举报
回复
[Quote=引用 25 楼 NewJerryj 的回复:]
刚才试用了一下,我的观点是:
Everything 在启动的时候就遍历了磁盘上所有的文件,所以当我们再进行搜索时速度就超级快了。
这个家伙运行时占用了十几M的内存空间,可见很多用于存放文件列表了。
[/Quote]
很显然它是基于索引数据库的。在我的机子上,他一共占了15M的物理内存。对于目前的主流内存来说,毛毛雨。
NewJerryj
2009-08-05
打赏
举报
回复
刚才试用了一下,我的观点是:
Everything 在启动的时候就遍历了磁盘上所有的文件,所以当我们再进行搜索时速度就超级快了。
这个家伙运行时占用了十几M的内存空间,可见很多用于存放文件列表了。
[Quote=引用 11 楼 fireseed 的回复:]
给楼主介绍一个本地文件搜索软件:Everything。
它不是“强大”,也不是“超级”……
我只能用一个很普通的词来形容:光速!
http://xbeta.info/everything/index.htm
[/Quote]
sailortobeno1
2009-08-05
打赏
举报
回复
你可真有意思啊!不过我支持!用循环都能执行啊!
ckc
2009-08-05
打赏
举报
回复
感觉你的问题并不是递归的问题
多半是你的算法问题
或者是读目录用了不适当的方法
Victor_Dinho
2009-08-05
打赏
举报
回复
感觉广度搜索比深度搜索效率会高些~~~
bacel5902
2009-08-05
打赏
举报
回复
[Quote=引用 6 楼 zhangchaokun 的回复:]
用广搜还是好些,毕竟一般用户需要查找的文件都在不足3层的文件夹中
[/Quote]
深度不行就广度
ahjoe
2009-08-04
打赏
举报
回复
磁盘文件搜索你别想能有多快。
leizhe
2009-08-04
打赏
举报
回复
递归慢是应为 循环的调用函数本身,
函数调用的时候 ,每次调用都在内存中会分配空间
局部变量,形参 调用函数地址 返回值。
递归调用N次 就要分配N*局部变量,N*形参 N*调用函数地址 N*返回值
fireseed
2009-08-04
打赏
举报
回复
[Quote=引用 9 楼 superspring 的回复:]
引用 1 楼 fireseed 的回复:
递归本来就很慢,但任何的递归都可以用循环来实现,认为不可以的我愿意在这里奉陪口水战。
有得必须跟栈配合吧
[/Quote]
没错
对于程序来讲,就算没有循环也可以递归,只要有goto就行了
fireseed
2009-08-04
打赏
举报
回复
[Quote=引用 12 楼 superspring 的回复:]
这个是不是类似于google desktop之类东西?
不是你做的吧?
[/Quote]
和google desktop完全不一样,它是基于文件名查寻的。它非常小,绝对轻量级,免费软件,有官方zip版,就一个可执行文件。
当然不是我写的,我要有这本事,我也不在中国混了
superspring
2009-08-04
打赏
举报
回复
[Quote=引用 11 楼 fireseed 的回复:]
给楼主介绍一个本地文件搜索软件:Everything。
它不是“强大”,也不是“超级”……
我只能用一个很普通的词来形容:光速!
http://xbeta.info/everything/index.htm
[/Quote]
这个是不是类似于google desktop之类东西?
不是你做的吧?
加载更多回复(11)
递归
入门、
递归
遍历、
递归
穷举算法
本课程带你从
递归
算法基础入手,课程是精讲大量实际项目中常用到的案例,课程深入浅出,包括
递归
入门,
递归
遍历、弟归穷举算法及各种项目,适合算法爱好者一起学习,后附每堂课项目源码,感兴趣可以观注博客,不定期...
递归
效率
为什么差?
一下为转载内容,谈
递归
效率
低
得问题,还是比较明确的,值得参考!
递归
在解决某些问题的时候使得我们思考的方式得以简化,代码也更加精炼,容易阅读。那么既然
递归
有这么多的优点,我们是不是什么问题都要用
递归
来...
为什么
递归
效率
低
?
二、使用
递归
,会进行很深层次的调用函数,所以需要调用很多函数,需要建立许多的访问链和控制链,占用大量内存,而且调用时传递参数,申请空间,返回时恢复现场,都有时间的花销,所以
递归
效率
低
。三、内存的栈当作...
计算机在执行
递归
算法时
效率
低
为什么,
递归
为什么那么慢?
递归
的改进算法...
1.所谓的
递归
慢到底是什么原因呢?大家都知道
递归
的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个...2.用循环
效率
会比
递归
效率
高吗?
递归
与循环是两种不同的解决问...
什么是
递归
,
递归
有哪些优点和缺点?
什么是
递归
,
递归
有哪些优点和缺点?
递归
: 直接或间接调用自身算法的过程 使用
递归
的条件: 子问题为同类事物,且更简单 必须有个出口 优点: 代码简洁 符合思维习惯,容易理解 缺点:
效率
较
低
递归
层次...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章