Книжонка абсолютно ахуенно сделана и расписана так, что поймет чел с абсолютно любым мышлением, но в идеале иметь какие-то знания по программированию
Хотелось бы продолжить вести этот канал для 1 одного зрителя как мой собственный дневник больного, поэтому разберу с самого начала, что же я там начитал. Если периодически писать про прочитанные штуки, то , возможно, что-нибудь да запомню
🧑💻Итак, че это такое ваше Big(O)⁉️
0️⃣ Вообще, O это типо производительность нашего с вами алгоритма, скорость его выполнения (по мере увеличения входных данных), ‼️так как некоторые алгоритмы показывают свое превосходство именно при увеличении данных, которые мы подаем. ‼️
1️⃣🔗 В общем, есть некоторые разновидности этого самого Big(O).
Возьмем первые два вида и ахуе❌ный пример из книги.
3️⃣ Первый вид это конечно O(n). Это у нас линейное время, а используется для простого поиска (это вы запомните).
4️⃣ Второй вид это O(log n) - это как раз логарифмическое время (используется для бинарного поиска). Даже нашел вам первую попавшуюся картинку, кстати показано все
максимально наглядно. #Алгоритмы
0️⃣ Вообще, O это типо производительность нашего с вами алгоритма, скорость его выполнения (по мере увеличения входных данных), ‼️так как некоторые алгоритмы показывают свое превосходство именно при увеличении данных, которые мы подаем. ‼️
1️⃣🔗 В общем, есть некоторые разновидности этого самого Big(O).
Возьмем первые два вида и ахуе❌ный пример из книги.
3️⃣ Первый вид это конечно O(n). Это у нас линейное время, а используется для простого поиска (это вы запомните).
4️⃣ Второй вид это O(log n) - это как раз логарифмическое время (используется для бинарного поиска). Даже нашел вам первую попавшуюся картинку, кстати показано все
максимально наглядно. #Алгоритмы
5️⃣ Как мы можем заметить, O(1) и O(log n) работает одинаково хорошо. Давайте разберем каждый из них.
🖇 Первый это O(1), время выполнения не зависит от количества входных данных, алгоритм выполняет фиксированное количество операций независимо от того, насколько большими или малыми могут быть входные данные, а это значит что он супер эффективный.✅
🔗 К примеру:
У нас есть, значит, массив, допустим, набор цифр от 1 до 10. Выполнение алгоритма будет таким быстрым, потому что мы сразу имеем доступ к элементу этого массива.
⭕️ Хотим мы вывести 5 элемент массива и выводим.
6️⃣ Теперь O(log n). Как я уже сказал в прошлом посте, ‼️ такому алгоритму присущ бинарный поиск, ща мы его и рассмотрим, тут же рассмотрим O(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!!!!! (Это мы разницу разобрали между простым и бинарным поиском) #Бинарный_поиск
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!!!!! (Это мы разницу разобрали между простым и бинарным поиском) #Бинарный_поиск
Итак, подается 4 числа, нам нужно понять, имеют ли две клетки одинаковый цвет, или нет? #Шахматная_доска
🔗 Шахматная доска 5.1
Итак, начнем с того, что❗️сумма координат всех белых клеток всегда четное число, а вот черных наоборот - нечетное.
⭕️ Если сумма координат для первой клетки это четное и сумма координат для второй клетки это тоже четное число, то выводим ('YES').
🔗 Код:
Итак, начнем с того, что❗️сумма координат всех белых клеток всегда четное число, а вот черных наоборот - нечетное.
⭕️ Если сумма координат для первой клетки это четное и сумма координат для второй клетки это тоже четное число, то выводим ('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')
🔗 Римские цифры 5.1
Итак, вводим арабскую цифру, а программа нам выводит римскую.
⭕️ Для начала нам понадобится список римских цифр ['I', 'II', 'III', 'IV','V', 'VI', 'VII', 'VIII', 'IX', 'X'] - Кайф. Затем пишем решение #Римские_цифры
🔗 Код:
Итак, вводим арабскую цифру, а программа нам выводит римскую.
⭕️ Для начала нам понадобится список римских цифр ['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.
🔗 Код:
‼️ Если вспомним, то индексация начинается с 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.
Прикреплю также один из прекрасных наглядных комментариев. #Пересечение_отрезков
На вход программе подаются четыре целых числа a1, b1, a2, b2. ‼️
⭕️ Обязательное условие, что a1<b1, a2<b2.
Прикреплю также один из прекрасных наглядных комментариев. #Пересечение_отрезков
Итак, работаем, отталкиваясь, от подсказки.🧑💻Сначала, конечно же, вводим 4 int(input)-а.
0️⃣❗️Далее, разберем первый случай, когда общего пересечения нет (следующий скрин).
То есть, если один из двух случаев существует, значит общего пересечения нет.
0️⃣❗️Далее, разберем первый случай, когда общего пересечения нет (следующий скрин).
То есть, если один из двух случаев существует, значит общего пересечения нет.
🔗 Вот и сам код:🧑💻
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)