CodeLab
145 subscribers
538 photos
20 videos
159 links
Говорим просто о сложном

Обсуждение, новости, материал и сплетни — все здесь https://t.me/CodeLabMLChat
Download Telegram
5️⃣ Как мы можем заметить, O(1) и O(log n) работает одинаково хорошо. Давайте разберем каждый из них.

🖇 Первый это O(1), время выполнения не зависит от количества входных данных, алгоритм выполняет фиксированное количество операций независимо от того, насколько большими или малыми могут быть входные данные, а это значит что он супер эффективный.

🔗 К примеру:

У нас есть, значит, массив, допустим, набор цифр от 1 до 10. Выполнение алгоритма будет таким быстрым, потому что мы сразу имеем доступ к элементу этого массива.

⭕️ Хотим мы вывести 5 элемент массива и выводим.

6️⃣ Теперь O(log n)
. Как я уже сказал в прошлом посте, ‼️ такому алгоритму присущ бинарный поиск, ща мы его и рассмотрим, тут же рассмотрим O(n), также из прошлого поста (Просто их проще сравнивать). #Бинарный_поиск
7️⃣ Берем пример из книги, есть у вас 128 имен (отсортированных ес че). Хотите вы найти определенное имя, пусть оно будет под номером 🟰12🟰. Что же бя делать?

8️⃣ Первое, что можно сделать, это тупо перебрать, как раз это у нас и есть O(n) - простой поиск.❗️ Но обычный перебор 128 имен это как-то слишком скучно, давайте быстрее. Тут выходит ферзь O(log n),‼️ Именно это Big(O) отвечает за бинарный поиск. 🔝Скорость этого алгоритма растет логарифмически с ростом размером данных (Типа чем больше данных, тем круче он будет по сравнению с O(n), ща объясню).

🔗Вернемся к 128 именам. Вместо того, чтобы как дауничи перебирать сидеть, разделяем 128 на 2 и спрашиваем, находится ли число, которое мы ищем, посередине??

9️⃣⭕️ Если нет, то сравниваем 12 и 64. Оказывается, что 12 меньше 64 (ахеть), а значит перемещаемся в диапазон от 1 до 64, теперь у нас 64 имени, та половина нам больше не нужна.

1️⃣0️⃣ Дальше делим 64 на 2 и смотрим, посередине ли находится наше искомое имя? Если нет, то снова сравниваем, 12 < 32, значит идем в диапазон от 1 до 32.

1️⃣1️⃣ Тоже самое делаем при последующем делении на 2, сначала получаем 16, потом 8. попадаем в диапазон от 8 до 16. Мы почти близко... ИИ того у нас получается каких то 5 шагов вместо 128!!!!!
(Это мы разницу разобрали между простым и бинарным поиском) #Бинарный_поиск
ну и двумя видами Big(O) ‼️
Итак, подается 4 числа, нам нужно понять, имеют ли две клетки одинаковый цвет, или нет? #Шахматная_доска
🔗 Шахматная доска 5.1

Итак, начнем с того, что❗️сумма координат всех белых клеток всегда четное число, а вот черных наоборот - нечетное.

⭕️ Если сумма координат для первой клетки это четное и сумма координат для второй клетки это тоже четное число, то выводим ('YES').

🔗 Код:

x1, y1, x2, y2 = int(input()), int(input()), int(input()), int(input())
if (x1 + y1) % 2 == (x2 + y2) % 2:
print('YES')
else:
print('NO')
⭕️ Абсолютно также можем проверить с разностью координат, ничего не поменяется.

🔗 Код:

x1, y1, x2, y2 = int(input()), int(input()), int(input()), int(input())
if (x1 - y1) % 2 == (x2 - y2) % 2:
print('YES')
else:
print('NO')
🔗 Римские цифры 5.1

Итак, вводим арабскую цифру, а программа нам выводит римскую.

⭕️ Для начала нам понадобится список римских цифр ['I', 'II', 'III', 'IV','V', 'VI', 'VII', 'VIII', 'IX', 'X'] - Кайф. Затем пишем решение #Римские_цифры

🔗 Код:

num = int(input())
num -= 1
a = ['I', 'II', 'III', 'IV','V', 'VI', 'VII', 'VIII', 'IX', 'X']
if -1 < num <= 10:
print(a[num])
else:
print('ошибка')
🧑‍💻 С первой строчкой все понятно, разберем вторую:

‼️ Если вспомним, то индексация начинается с 0. Как раз для этого и нужна 2 строчка. Допустим, вводится число 7, вторая строка отнимает 1 и получаем 6. Как раз 6 индекс это VII.

🔗 Код:

num = int(input())
num -= 1
a = ['I', 'II', 'III', 'IV','V', 'VI', 'VII', 'VIII', 'IX', 'X']
if -1 < num <= 10:
print(a[num])
else:
print('ошибка')
🌶🌶Разберем босса с 2 перчиками.

На вход программе подаются четыре целых числа a1, b1, a2, b2. ‼️

⭕️ Обязательное условие, что a1<b1, a2<b2.

Прикреплю также один из прекрасных наглядных комментариев. #Пересечение_отрезков
Итак, работаем, отталкиваясь, от подсказки.🧑‍💻Сначала, конечно же, вводим 4 int(input)-а.

0️⃣❗️Далее, разберем первый случай, когда общего пересечения нет (следующий скрин).

То есть, если один из двух случаев существует, значит общего пересечения нет.
Дальше, прописываем много много elif.

1️⃣ Значит так, если b1 == a2, значит пересечением будет точка a2.‼️АНАЛОГИЧНО‼️ будет и наоборот, если мы отрезки поставим, грубо говоря, наоборот, про это тоже не забываем

⭕️ То есть, пересечением второго отрезка будет точка a1
2️⃣ Идем дальше. ЕСЛИ a2 > a1 AND b1 < b2, то отрезок a2;b1 будет пересечением, и также наоборот по аналогии.
3️⃣ Ну и последний отрезок
🔗 Вот и сам код:🧑‍💻

a1, b1 = int(input()), int(input())
a2, b2 = int(input()), int(input())

if b1 < a2 or b2 < a1:
print('пустое множество')
elif b1 == a2:
print(a2)
elif b2 == a1:
print(a1)
elif a2 > a1 and b1 < b2:
print(a2, b1)
elif a2 < a1 and b1 > b2:
print(a1, b2)
elif a1 >= a2 and b2 >= b1:
print(a1,b1)
elif a2 >= a1 and b1 >= b2:
print(a2, b2)
Итак, дальше будут тесты 👇🏿
#1