Вы абсолютно правы! Сейчас как раз над этим голову ломаю. К несчастью не часто работаю с O(), поэтому не имею опыта оценки сложности. Если есть что подсказать или есть полезные ссылки, поделитесь. Буду признателен. В принципе сложность добавления/поиска зависит от выбранного основания, ну а основание зависит от числа, которое требуется закодировать.
И конечно с самого начала у меня в голове засела эта операция — взятие остатка. Логика подсказывает, что операция эта достаточно трудоемкая. Но здесь я тоже не эксперт. Быть может все таки есть оптимизированные варианты взятия остатка?
Отличается в первую очередь тем, что не требуется постоянная балансировка дерева, оно изначально сбалансировано. К тому же растет это дерево более равномерно. А на хранение остатков действительно потребуется несколько больше памяти, тут не поспоришь. Хотя если посидеть подумать, можно немного оптимизировать это дело
Я думаю, что получить список простых чисел не такая большая проблема, если говорить о вообразимых размерах данных. Тут не требуется найти самое большое простое число
Все зависит от выбранных оснований. Для того, чтобы закодировать числе 7, 12, 14 необходимым и достаточным будет основание (2,3,5). Максимальное количество чисел, которое можно закодировать при таком основании — 30 (2*3*5)
7%2 = 1, 7%3 = 1, 7%5 = 2. Маршрут в дереве 1 1 2
12%2 = 0, 12%3 = 0, 12%5 = 2. Маршрут в дереве 0 0 2
14%2 = 0, 14%3 = 2, 14%5 = 4. Маршрут в дереве 0 2 4
Я так понимаю можно хранить большие объемы данных и быстро по ним искать. Кроме того, отличительное свойство данной структуры в том, что в любом узле дерева мы знаем куда идти дальше, просто получив остаток от деления. Отсюда простор для парралельных вычислений.
Где-то это описано в документации? Я так понимаю в строку преобразует метод Double.toString