Какая сложность операции на Java 7 BigInteger?

Какая сложность методы multiply, divide и pow в BigInteger в настоящее время? Нет никакого упоминания о вычислительной сложности в документации (ни больше нигде).

8
задан 28 January 2010 в 11:33
поделиться

3 ответа

Если вы посмотрите на код для BIGINTEGER (снабжены JDK), это кажется мне, что Умножным (..) имеет o (n ^ 2) (на самом деле метод MultiLyTolen (..) ). Код для других методов немного сложнее, но вы можете увидеть себя.

Примечание: это для Java 6. Я предполагаю, что он не будет отличаться в Java 7.

4
ответ дан 5 December 2019 в 21:19
поделиться
$("input .button-example").click(function(){
//do something with $(this) var
});

PS: у вас есть jQuery, управляющий $ var? В противном случае вы должны сделать это:

jQuery.noConflict();
jQuery(document).ready(function(){
    jQuery("input .button-example").click(function(){
    //do something with jQuery(this) var
       alert(jQuery(this));
    });
});

если вы не хотите контролировать событие (форма отправить)

$(document).ready(function(){
    $("#formid").submit(function() {
          alert('Handler for .submit() called.');
          return false;
    });
});

скажите мне что-то, если это сработало;)

-121--3515960-

Использование механизма кэширования. Обычно никогда не следует полагаться на = = , всегда используйте равно для проверки равенства.

-121--3545962-

Измерить его. Выполните операции с линейно увеличивающимися операндами и нарисуйте время на диаграмме. Не забудьте разогреть JVM (несколько прогонов), чтобы получить достоверные результаты теста.

Если операции линейные O (n), квадратичные O (n ^ 2), многочлены или экспоненциальные должны быть очевидны.

EDIT: Хотя вы можете дать алгоритмы теоретических границ, они могут быть не так полезны на практике. В первую очередь сложность не дает фактора. Некоторые линейные или субквадратические алгоритмы просто не полезны, потому что они едят столько времени и ресурсов, что они не достаточны для решения проблемы (например, умножение матрицы Копперсмита-Винограда). Тогда в ваших расчетах могут быть все клюджи, которые вы можете обнаружить только экспериментально. Существуют готовящие алгоритмы, которые не делают ничего для решения проблемы, кроме ускорения реального решателя (матричное кондиционирование). Существуют неоптимальные реализации. При большей длине скорость может резко снизиться (отсутствует кэш, память перемещается и т.д.). Поэтому в практических целях я советую экспериментировать.

Лучше всего удваивать каждый раз длину ввода и сравнивать время. И да, вы выясните, имеет ли алгоритм n ^ 1,5 или n ^ 1,8 сложность. Просто четверной длина ввода и требуется только половина времени для 1.5 вместо 2. Вы снова получите почти половину времени для 1.8, если умножить длину 256 раз.

1
ответ дан 5 December 2019 в 21:19
поделиться

Появился новый «лучший» класс BigInteger, который не используется sun jdk из-за консервативности и отсутствия полезных регрессионных тестов (огромные наборы данных). Парень, который разработал лучшие алгоритмы, возможно, обсуждал старый BigInteger в комментариях.

Вот http://futureboy.us/temp/BigInteger.java

2
ответ дан 5 December 2019 в 21:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: