Я программист Java, и я недавно начал конкурентоспособны кодирования (Codechef, Hackerearth, и т.д ..)Эффективная манипуляция бит в Java?
У меня есть ощущение, что немного манипуляции действительно очень медленно в Java, когда речь идет о очень больших входных значений. По моему опыту, тот же код на C/C++ (К тому же я имею в виду, если он был преобразован из java с одним и тем же алгоритмом, с той же стратегией и т. Д. Я не изменяю свою логику при преобразовании с Java на C/C++ или наоборот), который успешно запускает все тестовые примеры, генерирует предел времени в Java. Я знаю, что большинство конкурирующих сайтов программирования обеспечивают 2x времени выполнения для Java-программ, но все же оно пересекает ограничение по времени.
В таких языках, как C++, мы имеем такие функции, как __builtin_popcount
, которые могут очень быстро использовать встроенные функции процессора. Такие вещи недоступны на Java. Некоторые функции, такие как java.lang.Integer.bitCount()
, будут работать только для 32-битного int
.
Так что мы должны предпочесть переходить с C++ для таких проблем? Должны ли мы даже рассматривать проблемы с типом манипуляции с использованием Java? Если нет, то есть ли супер быстрый эффективный трюки, а не применение нашей собственной логики?
(Существует также тот факт, что различные архитектуры машина будет принимать разное количество времени, но позволяет игнорировать это. Мой вопрос в контексте конкурентного программирования)
Почему этот помеченный C++? Рекомендации по языку действительно не основаны на фактах, мы не можем дать ответ, который не только основан на мнениях. –
Бит-манипуляция не медленна в Java, а Java имеет побитовые операторы, похожие на C/C++. Возможно, вы делаете другие вещи, которые замедляют работу, например, бокс/распаковка. Не видя кода Java, мы не можем сказать, что заставляет его замедляться. – Jesper
В C++ нет '__builtin_popcount'. Если ваша программа не работает, это потому, что ваше решение неэффективно, а не из-за Java. Если вам нужно прибегнуть к встроенным скриптам компилятора, чтобы не наступать на C++, вы делаете что-то неправильно. – molbdnilo