Ответы пользователя по тегу Алгоритмы
  • Алгоритм нахождения чисел без пар из большого потока данных?

    Arktos
    @Arktos
    Нам нужно будет считать этот массив 2 или 3 раза. Сначала будем хранить эти числа по модулю 10^5. Заведем bool-массив из 10^5 элементов — сколько раз каждый модуль встречался. Рассмотрим 2 варианта
    1) Искомые числа по модулю 10^5 различные. Тогда у нас будут 2 ненулевые ячейки. Мы знаем модули искомых чисел по 10^5. Задача свелась к следующей — найти из массива чисел одно число, не имеющее себе пары. Решается xor-ом. Считываем снова массив и вычисляем 2 xor-а для найденных модулей.
    2) Искомые числа равны по модулю 10^5 (все ячейки нулевые). Тогда они не равны по модулю 10^5+1.
    Ответ написан
  • Решение задачи «Гирлянды», ДонНУ?

    Arktos
    @Arktos
    Некорректно обсуждать задачу до окончания олимпиады
    Ответ написан
    1 комментарий
  • Алгоритм выравнивания последовательностей

    Arktos
    @Arktos
    Для алгоритма для 2 мы имеем 2 указателя (или индекса) — где мы находимся на первой строке и где на второй. Здесь же будем хранить n (или 10) указателей и делать тоже самое (то есть перебирать выбираемый символ и смещать указатели при совпадении). Понятно, что массивом это делать неудобно как для случая из 2 строк, поэтому я бы завел струкуру, хранящую указатели, и поместил бы ответы не в массив, а в map. Если непонятно, могу быстро написать код — это несложно (C++ или Java)
    Ответ написан
    Комментировать
  • Алгоритмы и Программирование?

    Arktos
    @Arktos
    Для начинающего по алгоритмам посоветую Иванов «Дискретная математика»
    Ответ написан
    Комментировать
  • Алгоритм присвоения номера квартиры соседа снизу для нескольких квартир сразу

    Arktos
    @Arktos
    Вместо массива можно использовать дерево отрезков. Тогда нахождение/обновление номера по id будет выполняться за O(log(n)), уменьшение всего хвоста на 1 за O(log(n)), нахождение id по номеру за O(log(n)^2) (посредством бинарного поиска). Можно вместо дерева отрезков использовать множество объединенных квартир — будет та же ассимптотика, но тогда множество должно поддерживать операцию «Сколько элементов левее данной»
    Ответ написан
    Комментировать
  • Лучшая первая книга об алгоритмах?

    Arktos
    @Arktos
    Кормен слишком большой. Это скорее справочник, чем книга для свободного чтения. Я бы порекомендовал для начала Иванов «Дискретная математика»
    Ответ написан
    Комментировать
  • Как оптимизировать алгоритм сортировки файла?

    Arktos
    @Arktos
    1. Сортировать данные по индексу и второму столбцу
    2. MergeSort использует в 2 раза больше оперативной памяти, нежели действительно требуется. В оперативной лучше сортировать по QuickSort (сортировка по умолчанию Arrays.sort()), тогда можно сортировать в 2 раза больше данных.
    3. Так как дата представляется целым числом, можно использовать поразрядную сортировку (которая производит несколько сортировок подсчетом). Она еще быстрее. То есть, если дата представляется числом < 10^18, то сортировку можно произвести всего лишь тремя сортировками подсчетом (по разряду 10^6), которые выполняются за линейное время
    4. ArrayList работает долго. Используйте массив
    5. Не понял, как именно вы сливаете файлы. Их надо сливать по аналогии с MergeSort. То есть не последовательно, а также логарифмически
    Ответ написан
    1 комментарий
  • Как определить суперпозицию двух геометрических тел?

    Arktos
    @Arktos
    1. Проверить все отрезки на пересечение. Найдем, пересекаются ли фигуры. Осталось найти, вложены ли фигуры. Одна фигура вложена в другую, если все точки фигуры вложены в другую (задача сводится к определению, находится ли точка внутри многоугольника)
    2. Алгоритм сканирующей прямой. В качестве событий: вершины многоугольников, точки пересечения отрезков (есть подозрение, что можно обойтись без них). Во множестве храним стороны многоугольников, пока перемещаем прямую, их положение по вертикали меняется, но взаимное расположение не должно меняться
    Ответ написан
    Комментировать
  • Как синхронизировать большие таблицы?

    Arktos
    @Arktos
    1. Загрузить данные в массив и отсортировать массив (если нужна сортировка?). Будет и быстрее, и меньше памяти
    2. А зачем вообще грузить весь файл, а потом вести синхронизацию? Загрузили одну строчку, провели синхронизацию, загрузили вторую, снова провели. Если вам кажется, что это будет дольше работать, объясните тогда, как вы быстро синхронизируете таблицу БД с хеш-таблицей в памяти?
    Ответ написан
    8 комментариев
  • A* алгоритм на java

    Arktos
    @Arktos
    5 минут написать самим. Отсилу 10
    Ответ написан
    3 комментария