Я - студент информатики, и я собираюсь работать над проектом искусственного интеллекта, который составит музыкальную мелодию согласно исходным данным настроения и жанру. Алгоритмы должны использоваться для этого проекта, вероятно, чтобы очень использовать ресурс? Это имело бы какое-либо значение (с точки зрения скорости), если я принимаю решение пойти с Java, а не C++? (Отметьте: Я знаю только эти два языка, и я более доволен Java, чем C++.)
NB: Извините за мой плохой английский язык. Если кто-то может, очистите это сообщение везде, где необходимо. Спасибо.
На потребление ресурсов алгоритмический подход оказывает гораздо большее влияние, чем выбранный язык. Если вам удобно работать с Java, программируйте ваше приложение на этом языке - хотя реализация на Си++ может быть на 10% быстрее.
При этом вас может заинтересовать Искусственный интеллект API для Java.
Используйте Java, так как она вам удобнее. Это позволит вам сосредоточиться на решении проблемы, а не на программировании. Может быть, C ++ закончится более быстрой программой, а может и нет, но добраться туда будет медленнее, и вы категорически не заявляете, что программа должна быть невероятно быстрой.
Я бы использовал Common Lisp для такого проекта. Если вы не знаете Lisp, я бы выучил его для этого типа проекта. Это был бы отличный учебный опыт, и, поскольку вы студент CS, он вам только поможет. Лисп - это язык, который может по-настоящему открыть глаза.
В вашем случае строки и столбцы, вероятно, взаимозаменяемы, т.е. вопрос семантики, которая является. В этом случае можно создать столбцы, чтобы занять последовательность ячеек в списке data
, а затем обнулить их, используя только:
data[column_start:column_start+rows] = rows * [0]
-121--3213470- Во-первых, обратите внимание, что в объявлении оператора отсутствовало определение пространства имен для A:
NAME::A operator * (double lhs, const NAME::A& rhs)
и затем решающий трюк состоит в том, чтобы добавить круглые скобки в объявление друга, как это было предложено в вашем «псевдокоде»
friend A (::operator *) (double lhs, const A& rhs);
Чтобы все это скомпилировать, вам нужно несколько форвардных объявлений, приходя к этому:
namespace NAME
{
class A;
}
NAME::A operator * (double lhs, const NAME::A& rhs);
namespace NAME
{
class A {
public:
friend A (::operator *) (double lhs, const A& rhs);
private:
int private_var;
};
}
NAME::A operator * (double lhs, const NAME::A& rhs)
{
double x = rhs.private_var;
}
Александр прав, но, вероятно, следует объявить оператор в том же пространстве имен, что и его параметры.
-121--2681525-Я сделал аналогичный проект ИИ пару лет назад. Я не знаю, какое решение вы будете внедрять, но программы ИИ, как правило, потребляют много ресурсов и могут занять много времени, но, с другой стороны, вам понадобится язык, с которым вы знакомы, чтобы сделать это вовремя.
Поэтому мой совет состоит в том, что если вы чувствуете, что знаете C++ (или C), идите с одним из них. Если вы их не знаете, то внимательно подумайте о времени, которое вам нужно будет вложить в изучение нового языка, прежде чем выбирать.
Если ты начинаешь с нуля, используй все, что знаешь лучше всего. Если вы хотите использовать созданные библиотеки для ускорения разработки, то, возможно, сначала вы захотите изучить это - но Java наверняка имеет некоторые из них.
На вашем месте, я бы точно выбрал Java.
Мой совет - проектируйте все, что вам нужно в первую очередь, каждый ADT, каждый класс алгоритма, иерархию, все, что угодно. Такой проект/программирование может быть действительно сложно спроектировать в семействе языков Си/Си++, может быть, вы могли бы выбрать другой язык с философией менее строковых типов. Поэтому я рекомендую вам использовать язык, предназначенный для такого рода задач, лучше подходящий для вашего приложения, функциональная парадигма
ex: LISP, логическая парадигма
ex: PROLOG или что-то в этом роде.
Проблема, которую вы видите, вероятно, связана с отсутствием подходящего сетевого подключения к центральному хранилищу Maven по умолчанию.
После того, как вы разберете проблему с сетью, вам нужно будет ускорить работу с Maven и узнать, что она может сделать для вас. Для этого я бы предложил вам прочитать Лучшие сборки с Maven электронной книги . Он расскажет тебе все, что тебе нужно знать.
Один удобный наконечник во время начальной установки - это если вы разрабатываете на компьютере с несколькими пользовательскими профилями (т.е. вы входите в сеть, и ваш профиль синхронизируется при входе/выходе из сети), вы хотите сделать следующее:
1) Отредактируйте файл/.m2/settings.xml, чтобы локальный репозиторий находился вне вашего сетевого профиля, чтобы избежать перемещения данных каждый день. Пример конфигурации:
<settings>
<localRepository>/Users/Shared/Repository</localRepository>
</settings>
2) Рассмотрите возможность использования Artifaster для обеспечения центрального репозитория Maven в масштабах всей компании, который будет первым портом вызова для разрешения артефактов Maven, а repo1.maven.org/maven2 - вторым. Это означает, что ваш разработанный код остается в доме и любые специализированные артефакты, требующие лицензий (например, драйверы Oracle JDBC или материалы JTA), могут быть доступны без ручной установки.
Если вам нужна дополнительная помощь или совет, пожалуйста, свяжитесь со мной.
-121--3113814-Если вы хотите сделать это дальше, ознакомьтесь с продуктами для блокировки смарт-карт CoreStreet . Это их дело.
-121--3802299-Моим диссертационным проектом 3-го курса была реализация эвристики для распределения радиочастот сотовой сети. Я выбрал Java вместо C++, потому что это позволило мне визуализировать результаты гораздо проще, чем если бы я использовал C++. Я не верю, что производительность была бы значительно другой в C++ - фактор сложности вашего алгоса будет самым большим фактором, вероятно.
Мне кажется, что ты находишься на стадии доказывания концепции своего проекта. Я бы использовал любой язык, который тебе больше всего нравится. Хорошо написанный Java-код будет работать намного быстрее, чем плохо написанный C.
На мой взгляд, язык, в основном связанный с ИИ, - это Лисп.
См. Ответы на Почему Лисп используется для ИИ?
- в верхних голосах упоминается, что это было в 60-х и 70-х годах, но в наши дни используются динамические языки (ruby, python и т. Д.).