8

哪种范式更适合算法的设计和分析?哪个更快?因为我在大学有一门叫做算法设计和分析的科目,并且有时间限制。OOP 比过程编程慢吗?还是时差不大?

4

11 回答 11

8

面向对象的编程与算法并不是特别相关。您将需要过程式编程,但就算法而言,面向对象编程只是打包过程式编程的另一种方式。你有方法而不是函数和类而不是记录/结构,但唯一相关的区别是运行时调度,这只是处理运行时决策的一种声明性方式,本可以通过其他方式处理。

面向对象的编程与更大规模的设计模式等更相关,而算法与涉及少量(通常只有一个)过程的更小规模更相关。

于 2010-03-18T09:37:33.933 回答
5

IMO 算法与 OO 或 PP 问题分开存在。

OO 或 PP 都不是“慢”的,无论是设计时还是程序性能,它们都是不同的方法。

于 2010-03-18T09:24:51.567 回答
4

我认为函数式编程会产生更清晰的算法实现。

话虽如此,无论您采取何种方法,您都不应该看到太大的不同。算法可以用任何语言或开发范式来表达。

更新:(以下评论)

显然,函数式编程并不我想象的那样适合实现算法。它还有其他优点,为了完整起见,我主要提到它,因为问题只提到了 OOP(面向对象编程)和 PP(过程编程)。

于 2010-03-18T09:25:57.080 回答
1

薄弱环节很可能是您的知识-您最熟悉哪种语言和范式。用那个

于 2010-03-18T09:34:38.377 回答
0

我曾经修改过Knuth-Morris-Pratt字符串搜索算法,这样我就可以有一个对象,一次取一个字符并返回匹配/不匹配状态。这不是一个直截了当的翻译。

于 2010-03-19T22:17:31.917 回答
0

对于设计、分析和开发:绝对是 OOP。它是为了设计师和开发人员的利益而庄严发明的。对于程序运行时执行:有时 PP 效率更高,但 OOP 通常被编译器简化为纯 PP,使它们等效。

于 2010-03-18T09:25:13.507 回答
0

差异(执行时间)充其量是微不足道的。

请注意,还有一个比纯粹的性能更重要的因素:OOP 为程序员提供了更好的方法来组织他的代码,从而使程序结构良好、易于理解且更可靠(错误更少)。

于 2010-03-18T09:25:34.133 回答
0

Steve314 说得很好。OOP 更多的是关于大型应用程序的设计模式和组织。它还可以让您更好地处理未知数,这对于用户应用程序来说非常有用。但是,对于分析算法,您很可能会从功能上考虑您想要做什么。在这种情况下,当您关心算法时,我会坚持使用更简单的 PP,而不是尝试创建完全 OO 设计。我想使用 C 或 Matlab(取决于算法的数学密集程度)。只是我对此的看法。

于 2010-03-18T19:03:32.617 回答
0

我的猜测是差异不足以担心,时间限制应该允许使用较慢的语言,因为使用的算法才是最重要的。IMO 的时间限制的目的应该是让您避免在存在 O(n log n) 时使用例如 O(n 3 ) 算法

于 2010-03-18T09:28:14.010 回答
0

面向对象编程从程序员那里抽象出许多低级细节。它的设计目标是

  • 使编写和阅读(和理解)程序更容易
  • 使程序看起来更接近现实世界(因此更容易理解)。

过程式编程没有很多抽象,如对象、方法、虚函数等。

所以,谈到速度:一个熟悉面向对象系统内部原理的经验丰富的专家可以编写一个运行速度同样快的程序。

话虽如此,使用 PP 而不是 OOP 所获得的速度优势将非常微不足道。它归结为您可以舒适地编写程序的方式。


编辑:

我想到了一个有趣的轶事:在 Microsoft 基础类中,从一个对象到另一个对象的消息传递是使用类似于 BEGIN_MESSAGE_MAP() 和 END_MESSAGE_MAP() 的宏实现的,原因是它比使用虚拟函数更快。

这是库开发人员使用 OOP 但有意回避性能瓶颈的一种情况。

于 2010-03-18T09:28:41.477 回答
0

为了使编写代码更容易且不易出错,您需要一种支持泛型的语言 - 例如带有 STL 的 C++ 或带有 Java Collections Framework 的 Java。如果您要在截止日期前实现算法,则可以通过不为算法提供良好的 OO 或 Generic 接口来节省时间,从而使您自己编写的代码完全程序化。

为提高运行时效率,最好用过程式 C 编写所有内容——参见“编程实践”中的示例——但编写时间会更长,而且你更容易出错。这还假设您需要的所有构建块都可以在程序 C 中以最新和最有效的形式提供,这在当今是一个相当大的假设。在实践中,最有可能使用 STL 或 JFC 将节省您的 CPU 时间和开发时间。

至于函数式语言,我记得听到函数式编程爱好者指出他们的语言比竞争对手更容易使用,然后观察到那些选择函数式语言的班级成员仍然在挣扎,而那些用 Fortran 77 编写的人已经完成并继续绘制他们程序的性能图表。我看到函数式编程社区的主张没有改变。我不知道潜在的现实是否有。

于 2010-03-18T18:43:35.227 回答