寻找离散数学知识有用的例子

时间:2009-11-13 16:55:29

标签: discrete-mathematics

在看了Michael Feather的SCNA演讲“Self-Education and the Craftsman”后受到启发,我很想知道软件开发中的实际例子,其中离散数学证明是有帮助的。

6 个答案:

答案 0 :(得分:4)

离散数学已经涉及软件开发的各个方面,因为软件开发是以计算机科学为核心的。

http://en.wikipedia.org/wiki/Discrete_math

阅读该链接。你会看到有很多实际的应用,虽然这个维基百科条目主要是在理论上说。

答案 1 :(得分:2)

我在大学的离散数学课程中学到的技巧对雷顿教授的游戏提供了很多帮助。

这很有帮助......对吧?

除了彩色地图之外,还有很多现实生活中的地图着色算法很有用。我的期末考试的问题与六路交叉口的交通灯编程有关。

答案 2 :(得分:2)

正如San Jacinto指出的那样,编程的基本原理在离散数学中非常重要。而且,“离散数学”是一个非常广泛的术语。这些事情可能会让人更难以挑选出具体的例子。我可以拿出一把,但还有很多很多。

编译器实现是一个很好的例子来源:显然那里有自动/正式语言理论;寄存器分配可以用图形着色表示;优化编译器中使用的经典数据流分析可以用类似于格子的代数结构的函数来表示。

一个简单的例子,有向图的使用是在一个构建系统中,它通过执行拓扑排序来获取各个任务中涉及的依赖关系。我怀疑如果你试图在没有有向图的概念的情况下解决这个问题,那么你可能最终会试图通过整齐的簿记代码跟踪整个构建中的依赖关系(然后发现你的处理循环依赖不是优雅的。)

显然,大多数程序员不会编写自己的优化编译器或构建系统,因此我将根据自己的经验选择一个示例。有一家公司为卫星导航系统提供道路数据。他们希望对数据进行自动完整性检查,其中之一是网络应该全部连接起来,即应该可以从任何起点到达任何地方。通过尝试在所有位置对之间找到路线来检查数据是不切实际的。但是,可以从道路网络数据中导出有向图(以编码诸如转弯限制之类的东西的方式),以便将问题减少到找到图的强连通分量 - 标准图 - 通过有效算法求解的理论概念。

答案 3 :(得分:1)

我一直在学习软件测试课程,其中3个讲座专门用于评估与测试相关的离散数学。用这些术语考虑测试计划似乎真的有助于提高测试效率。

特别是对集合论的理解对于数据库开发尤为重要。

我确信还有很多其他应用程序,但这些是我想到的两个。

答案 4 :(得分:1)

只是很多人中的一个......

在构建系统中,使用拓扑排序工作很受欢迎。

通过构建系统,我指的是我们必须管理具有依赖关系的作业的任何系统。

它可以编译程序,生成文档,建筑物,组织会议 - 因此在任务管理工具,协作工具等中都有应用。

答案 5 :(得分:1)

我认为测试本身正确地从modus tollens开始,这是命题逻辑的概念(因此也是离散的数学),modus tollens是:

P => Q。 !Q,因此!P。

如果您插入“如果功能正常,则测试将通过”P => Q,然后按!Q给出(“测试未通过”),然后,如果所有这些语句事实上是正确的,你有一个有效的,合理的基础来返回修复功能。相比之下,许多,也许大多数测试人员遵循的原则是:

“如果程序运行正常,测试将通过。测试通过,因此程序运行正常。”

这可以写成:P => Q.问,因此P.

但这是“肯定结果”的谬误,并没有显示测试人员认为它显示的内容。也就是说,他们错误地认为该功能已经过“验证”并且可以发货。当给出Q时,P实际上可能是真的,或者对于P => Q可能是不真实的,并且这可以用真值表来显示。

Modus tollens是Karl Popper将科学视为伪造的核心,测试应该以同样的方式进行。我们试图伪造这个特征总是在每一个明确和隐含的情况下都能运作的说法,而不是试图证明它在狭义上是有效的,它可以以某种被禁的方式运作。