繁体   English   中英

对于复杂的问题解决练习(例如Graphs),这是一种更好的语言(C ++或Python)?

[英]which is a better language (C++ or Python) for complex problem solving exercises (ex. Graphs)?

我正在努力研究一些问题和算法。 我知道C ++,但是一位朋友告诉我,如果用Python完成它会更好。因为开发 速度快得多 花在编程细节上的时间也会少,实际上并没有任何解决方案。

编辑2 :我打算使用谷歌代码中的python-graph lib,如果您使用过,请提供示例代码。

编辑1更快 - 更少的时间和更少的工作来编写解决方案

谢谢大家的帮助 !

我认为你正在寻找Python,因为你可以:

  • 专注于算法本身而不必担心内存管理等其他细节。
  • 用更少的代码做更多事情
  • 语法几乎就像使用伪代码一样。
  • 对列表,元组,列表推导等有很好的内置语言支持......

但更具体地......

  • 如果better表示开发速度 ,那么选择Python
  • 如果better意思是纯粹的执行速度 ,那么选择C ++

您应该专注于可用的 ,而不是专注于语言。

C ++Python中已经有很多(读取,“太多”)可用时,你不应该编写自己的图形库。 [Stack Overflow有一个Python Graph包列表,其中包含您应该查看的建议 我没有找到与C ++相同的问题。 你可以开始一个。]此外,除非这是一个学术练习或研究真正新颖的图形算法,你应该浏览可用的库,看看它们是否已经实现了你感兴趣的那些算法。

使用库可以减轻Python更高级语言的使用,因为您不会使用原始C ++ 本身 ,而是使用C ++库。 由于Python语言具有非常小的核心,因此它容易学习,但是,它仍然需要时间。 如果您选择Python路线,那么在学习库的过程中需要考虑额外的时间因素,因此请务必在决策中权衡这一点。

因此,鉴于您已经了解C ++,您最终可能会发现使用C ++进行开发的速度更快,因为您只需要花费必要的时间来学习库,而不是库和新的 - 虽然易于学习的语言。

有点主观,但我投票支持python,因为它有很好的库,并且提取了许多你在使用c ++时必须要考虑的低级“细节”......

我用C ++在大学里完成了所有算法,因为我知道它。

如果我不得不同时学习一门语言,我最有可能选择Python。

我的印象是它真的取决于你的意思更快

开发更快:go python。 更快运行:去C ++。

但是python可以使用很多外部C库,因此处理时间的差异可能不相关,具体取决于实现的类型。

在我的大学,“算法和数据结构”课程中的500名学生可以选择他们想要的语言。

Python是迄今为止最受欢迎的选择,我个人很高兴我也选择了它,即使我已经知道C ++。

同意你的朋友 - 使用Python并将它们放在一个单元测试框架中。

我和科学家一起工作了很多年,他们用Python做了很多算法工作。

下面的例子显示了典型的测试(import语句用于测试的东西),有一些细节可能会为你节省一些时间。

保存和恢复sys.path的业务是让您可以将所有测试放在src目录旁边的目录中,而无需将源安装到主Python模块中。

编写此测试脚本,以便可以将其导入到更大的单元测试套件中,或者只使用python thisfile.py运行。

#!/usr/bin/python
"""
VRML Writer tests
"""

import unittest
import os
import sys

if __name__ == '__main__':
    global save_syspath
    save_syspath = sys.path
    sys.path = [os.path.abspath("../src/")] + sys.path

from cgtools.VizValueTools import *

if __name__ == '__main__':
    sys.path = save_syspath  # RESTORE SYS.PATH

# use some common constants to make tests easier
MINV = 0.002
MAXV = 12.789

class TestColdHotColorGeneration(unittest.TestCase):

    def testGeneratesLimitValues(self):
        assert generateColdHotColorValue(MINV, MAXV, MINV) == (0.0, 0.0, 1.0)
        assert generateColdHotColorValue(MINV, MAXV, MAXV) == (1.0, 0.0, 0.0)
        assert generateColdHotColorValue(0, 0, 0) == (1.0, 0.0, 0.0)  # cope with weird case where range is effectively one value, should be always top


    def testGeneratesLimitValuesWithClipping(self):
        assert generateColdHotColorValue(MINV, MAXV, MINV - 1.2) == (0.0, 0.0, 1.0)
        assert generateColdHotColorValue(MINV, MAXV, MAXV + 49) == (1.0, 0.0, 0.0)


    def testGeneratesMiddleValue(self):
        """
        Note to be careful picking values so your value IS in the middle,
        to generate pure green
        """
        assert generateColdHotColorValue(1.0, 3.0, 2.0) == (0.0, 1.0, 0.0)

if __name__ == '__main__':
    # When this module is executed from the command-line, run all its tests
    unittest.main()

我会去蟒蛇。 如果你真的需要性能,那么你总是可以编写C / C ++扩展并在python中使用它们。

算法在Python中很好(尽管由于全局锁定,你只能飞一个OS调度的python线程); 然而,当谈到数据结构+算法时,你需要固定的复杂性保证,这种情况下你将Python与C混合。

我想我所说的内容更适用于长时间运行的计算。 您可以在python hashmap原语的顶部模拟数据结构。

我也投票给python。 算法时,我们倾向于研究算法本身,而不是语言,低级细节。 基本上,我们在抽象层面上工作。 使用python,我们不太可能被侧面跟踪。 但如果您对C ++非常熟悉和熟悉并且可以自由地使用它来表达您的想法,那就使用它吧。

使用C ++,您有时会更多地关注语言问题,而不是问题本身,所以Python。 我甚至建议你用像Matlab这样的高级语言来做(尽管语言本身可能有点难看)。

如果使用C ++意味着STL是公平的游戏,我会说它值得认真考虑。 STL是一个很棒的库,结合了结构,迭代器和算法。 我喜欢Python的建议,但如果我能使用STL,我会重新考虑C ++。

请记住,Python被编译为字节码,然后在VM中进行解释。 因此,性能并不比C ++更好(更快)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM