Algorithm 面向对象的算法vs PP

Algorithm 面向对象的算法vs PP,algorithm,oop,procedural-programming,Algorithm,Oop,Procedural Programming,哪种范式更适合算法的设计和分析? 哪个更快?因为我在大学里有一门叫做算法设计与分析的课程,而且课程有时间限制。OOP比过程编程慢吗?或者时间差不大?IMO算法与OO或PP问题分开存在 OO和PP都不是“慢”的,无论是在设计时还是在程序性能上,它们都是不同的方法 对于设计、分析和开发:绝对是面向对象的。它是为了设计者和开发者的利益而庄严地发明的。 对于程序运行时执行:有时PP效率更高,但编译器通常会将OOP简化为普通PP,使它们等效。差异(在执行时间上)充其量是微乎其微的 请注意,还有一个比纯粹的

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

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


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

对于设计、分析和开发:绝对是面向对象的。它是为了设计者和开发者的利益而庄严地发明的。 对于程序运行时执行:有时PP效率更高,但编译器通常会将OOP简化为普通PP,使它们等效。

差异(在执行时间上)充其量是微乎其微的

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

我认为这将产生更干净的算法实现

话虽如此,无论你采取什么方法,你都不应该看到太大的区别。算法可以用任何语言或开发范式表示

更新:(以下评论)


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

我想差异还不足以令人担心,时间限制应该允许使用较慢的语言,因为使用的算法才是最重要的。
时间限制的目的应该是让您避免在存在O(n log n)的情况下使用O(n3)算法。

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

  • 使编写和阅读(以及理解)程序更容易
  • 使程序更接近真实世界(因此更容易理解)
过程编程没有很多抽象,比如对象、方法、虚拟函数等

因此,谈到速度:一位经验丰富的专家,如果他知道面向对象系统的内部工作原理,他可以编写一个运行速度同样快的程序

也就是说,使用PP比OOP所取得的速度优势将非常有限。它归结为您可以舒适地编写程序的方式


编辑:

<> P>一个有趣的轶事在我脑海中出现:在微软基础类中,从一个对象传递到另一个对象的消息是使用看起来像NeXuxMeMaGeAxMax()和EnthMeAxaGeMax()的宏实现的,原因是它比使用虚拟函数快。
在这种情况下,库开发人员使用了OOP,但却有意避开了性能瓶颈。

薄弱环节在于您的知识-您最熟悉的语言和范例是什么。请注意,面向对象编程与算法并不特别相关。您将需要过程编程,但就算法而言,面向对象编程只是打包过程编程的另一种方式。您有方法而不是函数,有类而不是记录/结构,但唯一相关的区别是运行时分派,这只是一种声明性的方式来处理运行时决策,而运行时决策本可以通过其他方式处理


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

为了使编写代码更简单,更不容易出错,您需要支持泛型的语言,例如C++,带有java或java的Java集合框架。如果您要在截止日期前实现一个算法,您可以通过不为算法提供良好的O-O或通用接口来节省时间,从而使您自己编写的代码完全是程序化的

为了提高运行时效率,您可能最好使用过程C编写所有内容—例如,请参阅“编程实践”中的示例—但编写过程会花费更长的时间,而且您更容易出错。这还假设您需要的所有构建块都可以从程序C中获得最新、最高效的版本,这在当今是一个相当不错的假设。最有可能使用STL或JFC将在实践中节省cpu时间和开发时间


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

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

我曾经调整过字符串搜索算法,这样我就可以拥有一个对象,它一次接受一个字符,然后返回一个匹配/不匹配的matc