提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2011-08-01 17:55:28.000|阅读 2777 次
概述:利用List或者数组存储数据,希望以此改善你的程序,可以对List或者数组的BinarySearch方法进行评估。如果是一个可变数量的元素集合,Binary搜索是针对集合中的值进行排序的一种“令人吃惊的”算法,其算法复杂度为O(log n),与C#中其它排序方法相比,它具备更高的效率。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
利用List或者数组存储数据,希望以此改善你的程序,可以对List或者数组的BinarySearch方法进行评估。如果是一个可变数量的元素集合,Binary搜索是针对集合中的值进行排序的一种“令人吃惊的”算法,其算法复杂度为O(log n),与C#中其它排序方法相比,它具备更高的效率。
示例:
下面是一个对List类型使用BinarySearch方法的示例。你必须为List中所使用的类型提供一个值,这样该方法才能通过编译。程序中通常使用字符串,这里也就使用string类型。
BinarySearch方法示例代码:
1 using System; 2 using System.Collections.Generic; 3 4 class Program 5 { 6 static void Main() 7 { 8 List<string> l = new List<string>(); 9 l.Add("acorn"); // 0 10 l.Add("apple"); // 1 11 l.Add("banana"); // 2 12 l.Add("cantaloupe"); // 3 13 l.Add("lettuce"); // 4 14 l.Add("onion"); // 5 15 l.Add("peach"); // 6 16 l.Add("pepper"); // 7 17 l.Add("squash"); // 8 18 l.Add("tangerine"); // 9 19 20 // This returns the index of "peach". 21 int i = l.BinarySearch("peach"); 22 Console.WriteLine(i); 23 24 // This returns the index of "banana". 25 i = l.BinarySearch("banana"); 26 Console.WriteLine(i); 27 28 // This returns the index of "apple". 29 i = l.BinarySearch("apple"); 30 Console.WriteLine(i); 31 32 Console.ReadKey(); 33 } 34 }
输出:
6 2 1
描述。上述程序从List中找出了“peach”、“banana”,和“apple”这三个字符串的位置的值。注意List中的项是按照字母顺序排列的。如果List或者数组没有经过排序,使用BinarySearch方法将会得不到正确结果。至于是按照数值大小、字母顺序,或者ASCII来排序,都是可以的。
比较基准
在针对一个较大的集合进行搜索时,binary搜索比linear搜索的效率要高很多,对于元素个数小于100的集合,BinarySearch较慢,可能是执行时的资源消耗导致的。
理解BinarySearch
我们注意到Wikipedia对binary搜索的陈述:“makes progressively better guesses, and closes in on the location of the sought value by selecting the middle element in the pan.”参见Wikipedia的文章“Binary Search Algorithm”。MSDN对List的BinarySearch方法作了如下陈述:“返回元素基于0的索引值”。然而,必须使用一个排序过的List。
字典是什么?
这里我们提到字典是恒定的查找时间哈希表。对于我所用到的数据,不管List采用哪种排序算法都没有字典高效快速。一个显然的情况是,你必须为大多数的方案挑选字典。参见上述比较基准,随着集合元素的增加,BinarySearch方法比linear搜索更高效。
对于非常较大的集合,比如有着上百万的元素,建立起一个字典将会消耗掉由查找操作所节省下来的时间。然而,我发现这种情况并不常见。
总结
这篇文章讲述了在什么样的情况下可以使用List类型的BinarySearch方法。针对大集合,BinarySearch使用了一个比迭代 搜索更好的算法,但是对于小集合,其效率又通常低于字典。我建议你在每一次考虑BinarySearch方法时做一个性能监测。你可以从Array.BinarySearch方法这篇文章中了解.NET Framework内部的Array.BinarySearch的信息。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢