• 神代码


        黄可嵩的程序遍历整个Microsoft Visual Studio 11.0目录耗时不到5秒,秒杀了所有人,如愿以偿的获得了个人项目的满分。再想想自己的程序,扫描同样的目录根本不知道何时才能结束,简直弱爆了。几乎所有人都在揣测,嵩神的作业到底用了何种高级的算法和数据结构,因此在提交完个人项目之后,我便向室友索要了他的程序,想一探究竟。我不仅是把他的这段代码当做学习的样品,更是当做一种艺术品来收藏,因为他给出了一种在别人看来不可能的神之解。在我看来,同一个问题只有一个解,那就是最优的那个,我不管做什么事都在努力寻找一种最优的解。
        今天,根据代码复审的要求,我再次看了这个程序,比第一次看有了更多的收获

    优点:

    1性能与效率简直无与伦比,原因在于使用.net frame work中的Dictionary类,该类使用的是关键字当索引,虽然我用了C++中的map与此类似,但是他们内部实现的结构有所不同,map使用的是红黑树,而Dictionary使用的是哈希表,所以Dictionary要快得多。
    2.逻辑清晰,类的划分很合理。
    与程序运行的性能相比,其他优点已经不再是有点了,所以不再赘述。


    虽然这个程序已近乎完美,但是还有很多小地方如果再完善一下的话就十全十美了。以下是一些

    不好的地方:

    1.对于fileanalysis分析单词和词组的文件,可以考虑增加几个函数来实现代码复用,这样不仅能让代码显得更加精简避免冗长,而且有利于维护;
    2.作者当时没有考虑到扩展的大小写,所以不能识别诸如1.TXT这样的文件;
    改进方案,在equals方法中添加参数StringComparison.CurrentCultureIgnoreCase以实现忽略大小的比较
    原来的代码:

    if (substr.Equals(".txt") || substr.Equals(".cpp") || substr.Equals(".h") || substr.Equals(".cs"))

    修改后的代码:

    if (substr.Equals(".txt", StringComparison.CurrentCultureIgnoreCase) || substr.Equals(".cpp", StringComparison.CurrentCultureIgnoreCase) || substr.Equals(".h", 
    StringComparison.CurrentCultureIgnoreCase) || substr.Equals(".cs", StringComparison.CurrentCultureIgnoreCase))


    3.C#提供了一个ICompare的实现类StringCompare,可以用它来作为orderBy的参数实现单词按ASCII排序,
    原来的代码:

    var dicsorts = dic.OrderByDescending(sort => sort.Value.getfreq()).ThenBy(sort => sort.Value.getword(), cpr);


    修改后如下:

    var dicsorts = dic.OrderByDescending(sort => sort.Value.getfreq()).ThenBy(sort => sort.Value.getword(), StringComparer.Ordinal);


    4.整个程序没有一行注释,建议以后在代码中养成写注释的习惯,便于别人和自己今后能够读懂。

    完结。

  • 相关阅读:
    unittest(生成 HTMLTestRunner 模块)
    unittest(discover 批量执行用例)
    SAP SD 基础知识之定价配置(Pricing Configuration)
    SAP SD基础知识之凭证流(Document Flow)
    SAP SD 基础知识之行项目类别(Item Category)
    pjd-fstest The test suite checks POSIX compliance
    网络上一些有趣的项目和文章
    博士生传给硕士生的经验
    man -k, man -f : nothing appropriate ; 更新 whatis 数据库
    supervisor 工具使用
  • 原文地址:https://www.cnblogs.com/yxr1993/p/4047224.html
Copyright © 2020-2023  润新知