Алгоритмы и структуры данных
8.48K subscribers
282 photos
8 links
По всем вопросам: @altmainf

Уважаемый менеджер: @altaiface
Download Telegram
Вычисление деления по модулю для степени двойки без оператора деления

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

Пример использования:
Если n = 29 и s = 3, то делитель d = 8:
- В двоичной системе n=11101
- Маска d−1=7 или 0111
- m = 11101 & 0111 = 0101 (5 в десятичной системе)
Таким образом, 29 % 8 = 5.
Как восстановить базу PostgreSQL на конкретный момент времени

Можно ли вернуть базу данных к жизни после сбоя или случайного удаления данных? На открытом вебинаре курса OTUS PostgreSQL. Advanced Виктор Коробков покажет, как работает восстановление PostgreSQL до конкретного момента времени (Point-in-Time Recovery, PITR) и как правильно настраивать систему бэкапов, чтобы не потерять ни байта данных.

→ 23 декабря, 20:00

Как восстановить базу PostgreSQL на конкретный момент времени
— роль WAL-журналов и как их использовать для архивации
— настройка файлового резервного копирования PostgreSQL
— пошаговое восстановление базы данных до нужного времени
— принципы PITR и применение в облачных инфраструктурах
— типичные ошибки при восстановлении и способы их избежать

Вебинар будет полезен администраторам баз данных, DevOps- и Cloud-инженерам, а также всем, кто хочет уверенно управлять бэкапами и защитой данных PostgreSQL.

→ Зарегистрируйтесь: https://otus.pw/xe6kk/

Реклама. ООО «Отус онлайн‑образование», ОГРН 1177746618576
Вычисление деления по модулю для числа вида (1 << s) - 1 без оператора деления

Для деления по модулю числа на значение, равное одной меньше степени двойки (например, 1, 3, 7, 15 и т.д.), можно использовать метод, который не требует оператора деления. Вместо этого используется серия побитовых операций и циклов.

Пример использования:
Если n = 29 и s = 3:
- Делитель d = 7.
- В цикле вычисляются промежуточные значения m, пока n не станет меньше или равно d.
- Результат m = 29 % 7 = 1.
👨‍💻Задачи точного покрытия — фундамент для многих алгоритмических подходов. Но пока теория лежит на полке, она мало что меняет в вашем инженерном мышлении

На открытом уроке мы разберем Dancing Links через практику: соберем пентамино на столе, представим фигуры в виде строк матрицы и разберемся, как работает поиск с возвратом. Когда алгоритм становится наглядным, вы начинаете понимать, что на самом деле происходит внутри.

Если вы хотите развивать алгоритмическое мышление, системно улучшать свои решения и уверенно чувствовать себя в задачах уровня middle+, такие разборы — обязательная часть роста.

📆 Встречаемся 22 декабря в 20:00 МСК в преддверие старта курса «Алгоритмы и структуры данных», регистрация открыта: https://otus.pw/eq4Y/?erid=2VtzqvhDroC

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Подсчет количества замыкающих нулевых битов справа с использованием деления по модулю и таблицы поиска

Этот метод позволяет быстро найти количество замыкающих нулевых битов в 32-битном числе, используя деление по модулю и таблицу поиска. Метод основан на уникальном соответствии значений остатка от деления на 37 позициям битов.

Преимущества метода
- Эффективность: Метод требует всего 4 операции, что делает его быстрым.
- Компактность: Использование небольшой таблицы позволяет значительно ускорить вычисления по сравнению с линейным методом.

Недостатки метода
- Ограниченность: Метод предназначен для 32-битных чисел и требует адаптации для чисел другой разрядности.
Произведения всех элементов массива, кроме текущего

Проблема:
Дан целочисленный массив nums. Необходимо реализовать алгоритм, который вернет массив, где i-ый элемент является произведением всех элементов nums, кроме nums[i] (каждое произведение гарантированно умещается в 32-битное целое число).

Для решения задачи без использования операции деления и за O(n) времени, можно использовать метод предварительного вычисления произведений. Идея заключается в том, чтобы использовать два прохода по массиву: один для вычисления произведений слева от текущего элемента и другой для вычисления произведений справа от текущего элемента.

Пример:
Input: nums = [-1,0,1,2,3]
Output:
[0,-6,0,0,0]