各位大侠们觉得 在递归遍历中 要用到对比字符串 那种方式快呢

杨友山
博客专家认证
2011-08-13 04:13:03
递归遍历电脑所有磁盘找出 指定的文件夹和文件,
使用EndsWith,StartsWith,Equals,还有正则表达式
那种能快些呢?
...全文
110 14 打赏 收藏 转发到动态 举报
写回复
用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 比较方法快一些吧

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧