какой язык лучше (C ++ или Python) для сложных задач по решению проблем (например, графики)? - PullRequest
4 голосов
/ 01 декабря 2009

Я пытаюсь работать над некоторыми проблемами и алгоритмами. Я знаю C ++, но мой друг сказал мне, что было бы лучше, если бы это было сделано с Python. Поскольку было бы намного быстрее разработать , и меньше времени тратится на детали программирования, которые на самом деле не заработай что-нибудь мудрое решение.

РЕДАКТИРОВАТЬ 2 : Я планирую использовать python-graph lib из Google-кодов. Пожалуйста, предоставьте примеры кодов, если вы их использовали.

РЕДАКТИРОВАТЬ 1 : быстрее - меньше времени и меньше работы для кодирования решения

Спасибо всем за помощь!

Ответы [ 13 ]

23 голосов
/ 01 декабря 2009

Я думаю, что вы ищете Python, потому что вы можете:

  • Сосредоточьтесь на самих алгоритмах и не нужно беспокоиться о других деталях, таких как управление памятью.
  • Делай больше с меньшим количеством кода
  • Синтаксис похож на работу с псевдокодом.
  • Существует великолепная встроенная языковая поддержка для списков, кортежей, списков и т.д. ...

Но точнее ...

  • Если под better вы подразумеваете скорость разработки , то выбрали Python .
  • Если под better вы подразумеваете явную скорость выполнения , то выберите C ++ .
9 голосов
/ 01 декабря 2009

Вместо того, чтобы сосредоточиться на языке, вы должны сосредоточиться на библиотеках , доступных вам.

Вы не должны писать свою собственную библиотеку графов, когда их уже достаточно (читай, «слишком много»), как в C ++ , так и в Python . [Переполнение стека имеет список пакетов Python Graph с рекомендациями , которые вы должны проверить. Я не нашел эквивалентный вопрос для C ++. Вы могли бы начать один.] Кроме того, если это не академическое упражнение или исследование действительно новых алгоритмов графов, вы должны просмотреть доступные библиотеки, чтобы увидеть, реализует ли какой-либо из них те алгоритмы, которые вас интересуют.

Использование библиотек ослабляет усиление языка Python более высокого уровня, поскольку вы не будете работать с необработанным C ++ как таковым , а с библиотекой C ++. Так как язык Python имеет очень маленькое ядро, его довольно просто выучить , однако это все же требует времени. Вам понадобится учесть это дополнительное время в дополнение к изучению библиотеки, если вы выберете маршрут Python, поэтому обязательно учтите это в своем решении.

Таким образом, с учетом того, что вы уже знаете C ++, вы, в конечном счете, можете найти его более быстрым для разработки на C ++, поскольку вам нужно только выделить время, необходимое для изучения библиотеки, а не библиотеки плюс новый & mdash; хотя и простой для изучения & mdash; язык.

8 голосов
/ 01 декабря 2009

Немного субъективно, но я бы проголосовал за python, потому что он имеет хорошие библиотеки и абстрагирует множество «подробностей» низкого уровня, которые вы должны учитывать при использовании c ++ ...

6 голосов
/ 01 декабря 2009

У меня сложилось впечатление, что это действительно зависит от того, что вы подразумеваете под быстрее .

Быстрее развиваться: иди на питон. Быстрее бегать: иди C ++.

Однако Python может использовать множество внешних библиотек C, поэтому разница во времени обработки может быть не такой существенной, в зависимости от типа реализации.

6 голосов
/ 01 декабря 2009

Все мои алгоритмы работали в колледже на C ++, потому что я это знал.

Если бы мне пришлось учить язык одновременно, я бы выбрал Python, скорее всего.

5 голосов
/ 01 декабря 2009

В моем университете 500 студентов в классе "Алгоритмы и структуры данных" выбирают нужный язык.

Python - безусловно самый популярный выбор там, и лично я счастлив, что я также выбрал это, хотя я уже знал C ++.

4 голосов
/ 01 декабря 2009

Я бы пошел на питона. А если вам действительно нужна производительность, то вы всегда можете написать расширения C / C ++ и использовать их в python.

4 голосов
/ 01 декабря 2009

Согласитесь со своим другом - используйте Python и поместите их в рамки модульного тестирования.

Я несколько лет работал с учеными, которые проделали большую часть своей алгоритмической работы на Python.

В приведенном ниже примере показаны типичные тесты (оператор импорта предназначен для тестируемого материала) с несколькими тонкостями, которые могут сэкономить вам время.

Бизнес с сохранением и восстановлением 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()
3 голосов
/ 01 декабря 2009

Алгоритмы хороши в Python (хотя вы можете использовать только один запланированный поток Python для ОС из-за глобальной блокировки); однако, когда дело доходит до структур данных + алгоритмы, вам нужны фиксированные гарантии сложности, и в этом случае вы смешиваете Python с C.

Полагаю, то, что я сказал, относится больше к долгосрочным вычислениям. Вы можете эмулировать структуры данных поверх примитива Python hashmap.

2 голосов
/ 01 декабря 2009

С C ++ вы иногда концентрируетесь больше на языковых проблемах, чем на самой проблеме, поэтому Python. Я бы даже рекомендовал вам сделать это на языке более высокого уровня, таком как Matlab (хотя сам язык может быть немного уродливым).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...