Algorithm 最适合计算和内存昂贵算法的语言

Algorithm 最适合计算和内存昂贵算法的语言,algorithm,data-structures,programming-languages,np,Algorithm,Data Structures,Programming Languages,Np,假设您必须实现一个工具来有效地解决NP难问题,不可避免地可能会出现内存使用爆炸(在某些情况下,输出大小与输入大小成指数关系),并且您特别关注该工具在运行时的性能。一旦了解了基础理论,源代码也必须是可读和可理解的,这一要求与工具本身的效率同样重要 我个人认为,3种语言可以适用于这三种要求:C++、Scala、java。 它们都提供了对数据类型的正确抽象,从而可以比较不同的结构或对不同的数据类型应用相同的算法(这一点也很重要) C++具有静态编译和优化的优势,通过函数内联(如果数据结构和算法设计得很

假设您必须实现一个工具来有效地解决NP难问题,不可避免地可能会出现内存使用爆炸(在某些情况下,输出大小与输入大小成指数关系),并且您特别关注该工具在运行时的性能。一旦了解了基础理论,源代码也必须是可读和可理解的,这一要求与工具本身的效率同样重要

我个人认为,3种语言可以适用于这三种要求:C++、Scala、java。 它们都提供了对数据类型的正确抽象,从而可以比较不同的结构或对不同的数据类型应用相同的算法(这一点也很重要)

C++具有静态编译和优化的优势,通过函数内联(如果数据结构和算法设计得很仔细)和其他优化技术,可以在保持相当好的可读性的同时实现接近纯C的性能。 如果您在数据表示方面也非常小心,则可以优化缓存性能,当缓存未命中率较低时,缓存性能可以获得数量级的速度

相反,Java是JIT编译的,它允许在运行时应用优化,在这类算法中,不同运行之间可能有不同的行为,这可能是一个优势。相反,我担心这种方法可能会受到垃圾收集器的影响,但是在这种算法中,经常会持续分配内存,java堆性能比C/C++好得多,如果您在语言中实现自己的内存管理器,甚至可以获得很好的效率。 相反,这种方法不能内联方法调用(这会导致巨大的性能损失),也不能让您控制缓存性能。在这些工具中,有一个比C++更优秀更干净的语法。 我对scala的关注或多或少与Java相同,另外一个事实是,除非我对编译器和标准库有深入的了解,否则我无法控制如何优化语言。但是:我得到了一个非常干净的语法:)


你对这个问题有什么看法?你已经处理好了吗?您会用这些语言中的任何一种实现具有这些属性和要求的算法,还是会提出其他建议?你怎么比较他们?

< P>我通常会说“C++”在心跳。秘诀在于C++只产生了需要管理的更少(内存)垃圾。 另一方面,你的观察表明

然而,在这种算法的情况下,通常会连续分配内存

这暗示Java/Scala实际上可能更适合。但是你也可以在C++中使用一个小的对象堆。Boost有一个使用标准
分配器的接口,如果内存可用的话

C++的另一个优点显然是通过模板不使用惩罚而使用抽象,即,您可以很容易地创建通用的算法组件,这些组件可以相互作用,而不会因为抽象而导致运行时开销。事实上,你注意到了

在保持相当好的可读性的同时,可以实现接近纯C的性能


–这是错误的看法:

你注意到的语言也是我的第一猜测

每种语言对于如何处理编译、内存管理和源代码等特定问题都有不同的看法,但从理论上讲,它们中的任何一种都应该适合您的问题

不可能分辨出哪一个是最好的,如果你对它们都足够熟悉,并能解决它们各自的怪癖,那么可能也没有什么大的区别

很明显,如果你真的发现需要优化(我不确定这是否是给定的),这在每种语言中都是可能的。较低级别的语言显然提供了更多的选择,但实际改进起来也(远)更复杂

关于C++与java的一个注释:这是一场圣战,如果你遵循了最近的发展,你可能会有自己的观点。一、 首先,通常认为Java提供了足够好的方面来弥补其缺陷

<>和最后一个关于C++与Vc的注释:根据我的知识,差异通常是足够低的百分比忽略这个。它对源代码没有什么影响,与C一起运行是很好的,如果C++可以使读代码更容易,那么就去C++。无论如何,选择是可以忽略不计的

最后,请记住,花在编程/优化上几个小时的钱也可以花在稍微高级的硬件上,以弥补遗漏的微小细节


这一切都归结为:只要你做对了(领域知识),你的任何选择都是好的。

< P> D可能值得一看,看看它是如何成为一个更好的C++。p>
    >P>从表面上看,它比C++更具有更好的源代码可读性,所以这是你的一个要点。p>
  • 它也有,这使得玩算法更容易一些

  • <> >比较C++与D

    的性能
我会使用一种语言,使算法的工作变得非常简单。如果算法正确,那么很容易就超过了微调错误算法的任何好处。不要害怕使用一种通常被认为执行速度很慢的语言,如果这种语言更容易表达算法思想的话。将正确的算法翻译成另一种语言通常比用执行速度最快的语言从错误的算法中找出最后的速度差要容易得多

所以,用一种你熟悉的语言来表达。你可能会惊奇地发现