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

时间:2009-12-01 01:08:55

标签: c++ python algorithm graph

我正在尝试处理一些问题和算法。我知道C ++,但是一位朋友告诉我,如果用Python完成它会更好。因为开发会更强更快 并且编程细节花费的时间更少实际上没有任何解决方案。

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

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

谢谢大家的帮助!

11 个答案:

答案 0 :(得分:23)

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

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

但更具体地说......

  • 如果better表示开发速度,则选择 Python
  • 如果better表示纯粹的执行速度,则选择 C ++

答案 1 :(得分:8)

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

答案 2 :(得分:6)

我的所有算法都是用C ++在大学里工作的,因为我知道它。

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

答案 3 :(得分:6)

我的印象是它真的取决于更快的含义。

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

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

答案 4 :(得分:5)

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

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

答案 5 :(得分:4)

与您的朋友达成一致 - 使用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()

答案 6 :(得分:4)

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

答案 7 :(得分:3)

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

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

答案 8 :(得分:2)

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

答案 9 :(得分:1)

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

答案 10 :(得分:0)

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