社区
C#
帖子详情
各位大侠们觉得 在递归遍历中 要用到对比字符串 那种方式快呢
杨友山
博客专家认证
2011-08-13 04:13:03
递归遍历电脑所有磁盘找出 指定的文件夹和文件,
使用EndsWith,StartsWith,Equals,还有正则表达式
那种能快些呢?
...全文
110
14
打赏
收藏
各位大侠们觉得 在递归遍历中 要用到对比字符串 那种方式快呢
递归遍历电脑所有磁盘找出 指定的文件夹和文件, 使用EndsWith,StartsWith,Equals,还有正则表达式 那种能快些呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
threenewbee
2011-08-14
打赏
举报
回复
[Quote=引用 10 楼 phoebuswei 的回复:]
引用 7 楼 caozhy 的回复:
引用 6 楼 phoebuswei 的回复:
吧递归去掉就快了,递归属于指数增长的慢
典型的不求甚解,概念不清的人。
好好,我概念不清,:}我向您真心请教
楼主的问题是
递归,遍历,电脑所有磁盘,找出指定的文件夹和文件
要快。
因我电脑所有磁盘是有一定的深度和密度
这样就会遭成所空间消耗和一系列函数调用在传值的开销
所以我说要将……
[/Quote]
这里面有2个问题
一个是lz的问题。从工程学的角度来说,讨论度量一个事物,如果影响它的两个条件在数量级上相差很远,那么微小的那个可以忽略不计。
所谓哲学上行而上学的观点,是应该批判的。因为客观事物受很多条件影响,本身它的认知、度量、预测都是在一个范围内的,而不是无限精确的。以现在新闻里面在说的运动会为例,水的温度决定水的密度,水的密度影响游泳运动员的成绩。但是影响的量极小,小到什么程度呢?可能1/100的秒表分辨不出来。所以没有听说比赛之前先测量下水温再开始比赛的。
lz的问题就是这样一个问题,固然理论上什么contains、equals、startwith会有快慢之分。但是对于磁盘寻找文件来说,这就是一个可以忽略的问题。lz说不行,我们要精确。那么我告诉你,这时候可能网络接收到一个数据包,系统托盘更新下时间显示,鼠标指针移动了下,.NET在后台进行了一次垃圾回收,Windows往系统日志里面存了一条记录……这些都会干扰那微乎其微的性能差异,在这种情况下,光盯着一点,精确度没有任何改变。
还有一个是你的问题。你说到递归的算法复杂度是线性的,或者是指数的,这都是不对的。应该是具体情况具体分析。当然,还有一种极端的反证法可以立刻推翻你的结论。从数学的角度看,任何一个递归的算法,都可以写成非递归的版本;任何一个非递归的算法,无论是什么复杂度,都可以用递归实现。
csproj
2011-08-14
打赏
举报
回复
[Quote=引用 10 楼 phoebuswei 的回复:]
引用 7 楼 caozhy 的回复:
引用 6 楼 phoebuswei 的回复:
吧递归去掉就快了,递归属于指数增长的慢
典型的不求甚解,概念不清的人。
好好,我概念不清,:}我向您真心请教
楼主的问题是
递归,遍历,电脑所有磁盘,找出指定的文件夹和文件
要快。
因我电脑所有磁盘是有一定的深度和密度
这样就会遭成所空间消耗和一系列函数调用在传值的开销
所以我说要……
[/Quote]
递归和循环时间复杂度是一样的。
唯一的区别是递归多了对堆栈的维护
但这点差别其实很小,没有你说的“指数级别”的差距
一般能用循环的就用循环了.
但是如果递归实现更容易理解,还是选择递归好
有时候只能用递归,比如树状结构的遍历。
phoebuswei
2011-08-14
打赏
举报
回复
[Quote=引用 9 楼 caozhy 的回复:]
引用 8 楼 phoebuswei 的回复:
修正:是线的
不用修正了。复杂度和是否是递归没有关系。
[/Quote]
~~~~复杂度吗~~
~~~~~~~~~~
如果一个复杂度一样的话递归频度和空间一定是高的
这个不能说没关系吧~!
~这个问题上我向您两个真行求教了
phoebuswei
2011-08-14
打赏
举报
回复
[Quote=引用 7 楼 caozhy 的回复:]
引用 6 楼 phoebuswei 的回复:
吧递归去掉就快了,递归属于指数增长的慢
典型的不求甚解,概念不清的人。
[/Quote]
好好,我概念不清,:}我向您真心请教
楼主的问题是
递归,遍历,电脑所有磁盘,找出指定的文件夹和文件
要快。
因我电脑所有磁盘是有一定的深度和密度
这样就会遭成所空间消耗和一系列函数调用在传值的开销
所以我说要将他去掉
threenewbee
2011-08-14
打赏
举报
回复
[Quote=引用 8 楼 phoebuswei 的回复:]
修正:是线的
[/Quote]
不用修正了。复杂度和是否是递归没有关系。
phoebuswei
2011-08-14
打赏
举报
回复
修正:是线的
threenewbee
2011-08-14
打赏
举报
回复
[Quote=引用 6 楼 phoebuswei 的回复:]
吧递归去掉就快了,递归属于指数增长的慢
[/Quote]
典型的不求甚解,概念不清的人。
phoebuswei
2011-08-14
打赏
举报
回复
吧递归去掉就快了,递归属于指数增长的慢
杨友山
2011-08-14
打赏
举报
回复
这个查找文件,能对所有类型的盘符进行查找的话,好像也就用个递归比较通用点吧,其余的比如差磁盘的索引什么的,似乎对fat类型的盘还不支持。
既然都差不多,那我就随便用一个平常用的吧
threenewbee
2011-08-13
打赏
举报
回复
一样快。
因为这些操作比磁盘IO操作耗时小n个数量级。
如同站在山顶离太阳远呢,还是站在山脚离太阳远。
一个1kg的砝码下雨天(灰尘少)重还是沙尘天气重。
在火车上往车厢前面走能不能更早到达。
杨友山
2011-08-13
打赏
举报
回复
顶起来
杨友山
2011-08-13
打赏
举报
回复
还少写了个 Contains
心灵彩虹
2011-08-13
打赏
举报
回复
http://blog.csdn.net/zhangjiesoft/article/details/6597603
csnd唐长老
2011-08-13
打赏
举报
回复
遍历吗 执行的次数都一样 不过好像StartsWith 比较方法快一些吧
java 面试题 总结
assertion(断言)在软件开发
中
是一种常用的调试
方式
,很多开发语言
中
都支持这种机制。在实现
中
,assertion就是在程序
中
的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为...
java 面试宝典
一. Java基础部分........................................................................1、一个".java"源文件
中
是否可以包括多个类(不是内部类)?有什么限制?.....2 2、Java有没有goto?....................
递归
入门、
递归
遍历
、
递归
穷举算法
本课程带你从
递归
算法基础入手,课程是精讲大量实际项目
中
常
用到
的案例,课程深入浅出,包括
递归
入门,
递归
遍历
、弟归穷举算法及各种项目,适合算法爱好者一起学习,后附每堂课项目源码,感兴趣可以观注博客,不定期...
vue compile添加html,Vue
中
的compile操作
方式
这篇文章主要介绍了Vue
中
的compile操作方法,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。在 Vue 里,模板编译也是非常重要的一部分,里面也非常复杂,...
Java初级面试题
Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,...java
中
的保留字,现在没有在java
中
使用。 3、说说&和&&的区别。 &和&&都可以用作逻辑与的运算符,.
C#
110,534
社区成员
642,575
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章