`
zuroc
  • 浏览: 1307801 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

[转载]编程的核心是数据结构,而不是算法

阅读更多
Rob Pike, 最伟大的 C 语言大师之一 , 在《 Notes on C Programming 》中从另一个稍微不同的角度表述了 Unix 的哲学:

   1. 你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。
   2. 估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。
   3. 花哨的算法在 n 很小时通常很慢,而 n 通常很小。花哨算法的常数复杂度很大。除非你确定 n 总是很大,否则不要用花哨算法(即使 n 很大,也优先考虑原则 2 )。
   4. 花哨的算法比简单算法更容易出 bug 、更难实现。尽量使用简单的算法配合简单的数据结构。
   5. 数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织得井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法。
   6. 没有原则 6 。

Ken Thompson —— Unix 最初版本的设计者和实现者,禅宗偈语般地对 Pike 的原则4 作了强调:
拿不准就穷举
分享到:
评论

相关推荐

    微软数据结构算法面试题

    根据提供的文档信息,本文将详细解析“微软数据结构算法面试题”中的几个核心知识点,包括题目背景、具体的面试题目解析等内容。 ### 背景介绍 文档标题为“微软数据结构算法面试题”,描述提到这是一个关于微软等...

    数据结构微软面试100道题

    微软面试100道题系列是一套针对IT行业内应聘微软等知名科技公司的面试题集,它主要包括三个部分:数据结构、算法和海量数据处理。这些内容是程序员面试中非常重要的三个考察方向。 数据结构是计算机存储、组织数据...

    [转载]迭代算法 1.0

    4. 数据结构:如堆、图、树等,它们的操作常包含迭代过程。 五、注意事项 1. 终止条件:合理设置迭代终止条件至关重要,以防止无限循环。 2. 精度要求:对于数值计算,需要考虑迭代解的精度,防止过度迭代导致资源...

    c语言数据结构字符串模式匹配算法.zip

    KMP算法的核心思想是利用已经得到的部分匹配信息来进行后面的匹配过程。看前面的例子。为什么T[5]==’d’的模式函数值等于2(next[5]=2),其实这个2表示T[5]==’d’的前面有2个字符和开始的两个字符相同,且T[5]==...

    排序算法总结(转载)

    堆排序利用了堆这种数据结构,将待排序序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,再调整堆,重复此过程直到所有元素都在正确位置。堆排序的时间复杂度为O(n log n),且是原地排序,不需额外空间...

    求数组的子数组之和的最大值,转载自:黑梦楠的日志

    这些文档可能涵盖了各种编程语言、数据结构、算法和软件工程的相关问题,对于求职者来说是宝贵的参考资料。 总的来说,“求数组的子数组之和的最大值”是计算机科学中的一个重要问题,通过动态规划和Kadane's ...

    游戏开发的入门教程-游戏编程指南

    游戏编程涉及的领域广泛,包括图形渲染、碰撞检测、AI算法、音效处理、网络通信等。在掌握了基础语言知识后,接下来的学习可能会涵盖DirectX编程、游戏引擎使用(如Unity、Unreal Engine)、以及物理模拟和AI设计。...

    C++的学习方法及书籍推荐 (转载).doc

    STL(Standard Template Library,标准模板库)就是泛型编程的典型应用,它包含容器(如vector、list)、算法和迭代器,为C++程序员提供了强大的工具集。 在学习C++的过程中,选择合适的书籍也非常重要。《C++程序...

    长整数计算器的设计与实现C++

    总的来说,这个课程设计涵盖了编程、数据结构、算法、用户界面设计等多个方面的知识,旨在提升学生在实际项目中的综合能力。通过这个项目,不仅可以深入理解C++语言,还能锻炼到问题解决和项目管理的技巧。

    els.rar_gui vc

    开发者可能通过C++的数据结构和算法来实现这些功能。例如,他们可能使用二维数组来表示游戏板,用枚举类型表示不同的方块形状,通过递归或栈等数据结构实现形状的旋转等。 对于初学者,这样的源码是一个很好的学习...

    第十三届蓝桥杯嵌入式模拟题

    7. **算法与数据结构**:尽管是嵌入式系统,但基础的算法和数据结构依然重要,如排序、搜索、图论等可能在解决问题时派上用场。 8. **电路设计**:虽然不一定是本次模拟题的重点,但基本的电路原理和PCB设计知识有...

    [转载]+[C#]+加强型音乐播放器+代码类

    总的来说,这个加强型音乐播放器项目涵盖了C#编程、音频处理、UI设计、数据结构、多线程、设计模式等多个IT领域的知识点,对于学习和提升C#开发技能是非常有价值的。通过深入研究和理解这个项目的源代码,开发者不仅...

    爱心源码(保存一下给自己使用)

    4. **C语言编程**:项目代码将展示如何用C语言实现这些算法,包括数据结构的选择、内存管理、函数接口设计等。 5. **软件架构**:项目的整体架构设计,如模块划分、接口设计、错误处理和调试机制,对于理解代码的...

    c++ 学习经典教材 ————易学C++

    C++不仅在软件开发领域广泛使用,也是许多数据结构、编译原理等高级课程的基础。 - **描述**:通过重复“非常好的书籍”,该描述突出了这本书在C++学习中的价值,暗示它能够提供易于理解和实践的C++知识。 ### 2. ...

    c语言课程设计汇本~汽车会员管理系统(转载).doc

    而【详细设计】将深入探讨每个模块的具体实现,包括数据结构的选择(如使用结构体数组)、文件操作(读写成员信息)、用户交互界面的设计以及各种操作的实现算法。 通过这个课程设计,学生不仅可以提升C语言编程...

    C#连连看源代码(转载)

    4. **数据结构**:为了存储和操作盘面状态,开发者可能会使用二维数组或自定义的类来表示图案。这有助于执行查找、消除和更新盘面的操作。 5. **多线程**:为了实现游戏计时器或者防止用户在游戏进行时进行其他操作...

Global site tag (gtag.js) - Google Analytics