⚙️ Навигация по алгоритмам: (книга Адитьи Бхаргавы 'Грокаем Алгоритмы'): big(O), Tsp, а также разбор интересных тем, например, почему 0.1 + 0.1 != 0.2...Ниже также будут посты с подтемами.
🧑💻(Большой материал):
🔗Связанные списки и массивы (отдельный пост)🔗
🖇 Big(O) и бинарный поиск 🖇
🌶 TSP - Задача про коммивояжера 🌶
🟰Проблема чисел с плавающей точкой🟰
⚙️ Алгоритм сортировки выбором ⚙️
__________________________________
🟰Н А В И Г А Ц И Я🟰
🧑💻(Большой материал):
🔗Связанные списки и массивы (отдельный пост)🔗
🖇 Big(O) и бинарный поиск 🖇
🌶 TSP - Задача про коммивояжера 🌶
🟰Проблема чисел с плавающей точкой🟰
⚙️ Алгоритм сортировки выбором ⚙️
__________________________________
🟰Н А В И Г А Ц И Я🟰
Я вам закинул гига чед навигацию, теперь можете искать свои любимые и нелюбимые задания и темы по ссылкам, в крайнем случае можете искать по хештегам или через набор в поиске, желаю удачного прочтения, скоро тут будет выходить Machine learning, в этом я еще полный 0, но всему свое время, щас будет 6.2 на Stepik
‼️Навигация‼️
‼️Навигация‼️
👨💻1
Строковый тип данных мы уже с вами разбирали, но давайте повторим:
⭕️мы можем найти длину строки с помощью ❗️len()
⭕️можем сложить их, это называется ❗️конкатенацией,
⭕️ также мы можем воспользоваться sep() - это разделитель, к примеру, аргумент \n в разделителе sep() нужен для переноса строки. В целом sep это это аргумент функции print(), который определяет, что будет вставлено между элементами‼️
⭕️Аргумент end задает то, что будет добавлено в конце строки после вывода всех элементов.
‼️По умолчанию end='\n', что означает перенос строки. Если вы хотите, чтобы после вывода не было переноса строки, а, например, стояла запятая, то можно указать end=','
‼️Разница этих двух только в том, что sep — это разделитесь между элементами вывода, а end — это разделитесь самих выводов разных функций print().
✅Вот наглядная разница:
#sep #end #len
end()
len()
конкатенация строк
⭕️мы можем найти длину строки с помощью ❗️len()
fruits = ['Bananas', 'Apples', 'Mangoes', 'Pear']
print(len(fruits)) #Вывод- 4
⭕️можем сложить их, это называется ❗️конкатенацией,
string1 = "Hello "
string2 = "world!"
print(string1 + string2) #Вывод:Hello world!
⭕️ также мы можем воспользоваться sep() - это разделитель, к примеру, аргумент \n в разделителе sep() нужен для переноса строки. В целом sep это это аргумент функции print(), который определяет, что будет вставлено между элементами‼️
print('a', 'b', 'c', 'd', sep='\n') # \n перенесет каждое слово на новую строкуprint('a', 'b', 'c', 'd', sep=', ') #Вывод: a, b, c, d⭕️Аргумент end задает то, что будет добавлено в конце строки после вывода всех элементов.
‼️По умолчанию end='\n', что означает перенос строки. Если вы хотите, чтобы после вывода не было переноса строки, а, например, стояла запятая, то можно указать end=','
print('Hello', end=', ')
print('world') #Вывод: Hello, world‼️Разница этих двух только в том, что sep — это разделитесь между элементами вывода, а end — это разделитесь самих выводов разных функций print().
✅Вот наглядная разница:
print('A', 'B', 'C', sep='-', end='$')
print('D') #Вывод: A-B-C$D#sep #end #len
end()
len()
конкатенация строк
Это дополнительная навигация, та, что в закрепе, никак не отличается, просто решил фотку классную добавить
https://stepik.org/course/58852/syllabus — КУРС, КОТОРЫЙ МЫ ПРОХОДИМ
🔗 Python: "Поколение Python": курс для начинающих.
🔗 Python: "Поколение Python": курс для начинающих (часть 2).
⚙️ Python (Базовые знания)
🖇 Алгоритмы
🌶 Machine learning
📁 Язык C
💲 Пост с навигацией на всякий
🔗 Важные ссылки
🐍 Разбор кода на Python
🧑💻ЕГЭ (Информатика): Решение задач на Python
https://stepik.org/course/58852/syllabus — КУРС, КОТОРЫЙ МЫ ПРОХОДИМ
🔗 Python: "Поколение Python": курс для начинающих.
🔗 Python: "Поколение Python": курс для начинающих (часть 2).
⚙️ Python (Базовые знания)
🖇 Алгоритмы
🌶 Machine learning
📁 Язык C
💲 Пост с навигацией на всякий
🔗 Важные ссылки
🐍 Разбор кода на Python
🧑💻ЕГЭ (Информатика): Решение задач на Python
👨💻1
print('"Python is a great language!"' + ', ' + 'said Fred. ' + '''"I don't ever remember having this much fun before."''')⭕️При конкатенации можем заметить использовании тех самых тройных кавычек, то есть, используем, когда нам нужно показать двойные или одинарные кавычки. #Конкатенация_строк🧑💻
🤯1
#Футбольная_команда 6.2. Давайте решим задачу через f строки. Внутри f-строки в паре фигурных скобок указываются имена переменных, которые надо подставить:
✅Для начала посмотрите пример:
‼️То есть, создаем две переменные (ip) и (mask), в функции print мы пишем литерал строки " с буквой f перед ним. Внутри f-строки в паре фигурных скобок указываются имена переменных, которые надо подставить.
⭕️F-строка сразу выполняется, и в нее подставляются значения переменных, которые должны быть определены ранее.
⭕️Если необходимо подставить другие значения, надо создать новые переменные (с теми же именами) и снова написать f-строку.
🔗Решение задачи:
✅Для начала посмотрите пример:
‼️То есть, создаем две переменные (ip) и (mask), в функции print мы пишем литерал строки " с буквой f перед ним. Внутри f-строки в паре фигурных скобок указываются имена переменных, которые надо подставить.
ip = '10.1.1.1'
mask = 24
print(f"IP: {ip}, mask: {mask}") #Вывод: IP: 10.1.1.1, mask: 24
⭕️F-строка сразу выполняется, и в нее подставляются значения переменных, которые должны быть определены ранее.
⭕️Если необходимо подставить другие значения, надо создать новые переменные (с теми же именами) и снова написать f-строку.
🔗Решение задачи:
num = input()
dlina = len(num)
print(f'Футбольная команда {num} имеет длину {dlina} символов')
👨💻1
Разбираем задание также в разделе 6.2 #Три_города.
0️⃣ Для начала, введем переменные для всех трех городов:
1️⃣❗️ Сравним минимальную длину одного из введенных городов с каждым из городов, если, к примеру, из всех трех, самое короткое слово это название первого города - то его и выводим:
2️⃣❗️ Аналогично с максимальной длиной среди всех городов:
0️⃣ Для начала, введем переменные для всех трех городов:
first = input()
second = input()
third = input()
1️⃣❗️ Сравним минимальную длину одного из введенных городов с каждым из городов, если, к примеру, из всех трех, самое короткое слово это название первого города - то его и выводим:
if min (len(first), len(second), len(third)) == len(first):
print(first)
elif min (len(first), len(second), len(third)) == len(second):
print(second)
else:
print(third)
2️⃣❗️ Аналогично с максимальной длиной среди всех городов:
if max (len(first), len(second), len(third)) == len(first):
print(first)
elif max (len(first), len(second), len(third)) == len(second):
print(second)
else:
print(third)
👨💻2
CodeLab
👨💻 Иииитак, вчера я ничего не делал, щас буду рассказывать про хранение памяти в компьютере, как раз это свяжем с проблемой чисел с плавающей точкой, поэтому постарайтесь все внимательно прочитать‼️ ⭕️ Для хранения одной ячейки информации в памяти используется…
Итак, я уже рассказывал на базовом уровне как работает память, хотя можно будет как-нибудь сделать об этом отдельный пост. В чем же суть?
🧑💻 Речь пойдет про сортировку выбором, а про память мы еще поговорим. Я вам уже говорил что память можно представить в виде ячеек памяти. В книге, автор говорит о памяти, как о гардеробе, в каждую ячейку которого, помещается ровно один предмет, для хранения трех вещей, нам потребуется выделить три ящика. Каждая такая ячейка имеет свой уникальный адрес, про это я уже рассказывал. Когда мы хотим сохранить какую-нибудь темку, мы запрашиваем у компьютера место в памяти и он нам выдает адрес для сохранения, а если мы захотим сохранить несколько элементов, это можно сделать с помощью связанных списков или массивов. #Память #Связанные_списки #Массивы
🧑💻 Речь пойдет про сортировку выбором, а про память мы еще поговорим. Я вам уже говорил что память можно представить в виде ячеек памяти. В книге, автор говорит о памяти, как о гардеробе, в каждую ячейку которого, помещается ровно один предмет, для хранения трех вещей, нам потребуется выделить три ящика. Каждая такая ячейка имеет свой уникальный адрес, про это я уже рассказывал. Когда мы хотим сохранить какую-нибудь темку, мы запрашиваем у компьютера место в памяти и он нам выдает адрес для сохранения, а если мы захотим сохранить несколько элементов, это можно сделать с помощью связанных списков или массивов. #Память #Связанные_списки #Массивы
Допустим, мы хотим сохранить список дел на сегодня, сначала попробуем сохранить наши, допустим, 3 задачи в массиве.
Ща вам расскажу в чем суть массива.
Итак, в массиве все задачи хранятся в памяти непрерывно, то есть, у нас есть структура данных (Массив), состоящая из фиксированного числа элементов, а расположены элементы в смежных ячейках (Идут друг за другом), периодически буду приводить примеры из книги. Также стоит сказать, что элементы массива имеют индекс, по которому к ним можно быстро получить доступ, об этом еще поговорим. #Память #Связанные_списки #Массивы
Ща вам расскажу в чем суть массива.
Итак, в массиве все задачи хранятся в памяти непрерывно, то есть, у нас есть структура данных (Массив), состоящая из фиксированного числа элементов, а расположены элементы в смежных ячейках (Идут друг за другом), периодически буду приводить примеры из книги. Также стоит сказать, что элементы массива имеют индекс, по которому к ним можно быстро получить доступ, об этом еще поговорим. #Память #Связанные_списки #Массивы
🥰2
Дак вот, возвращаемся к списку дел. У нас есть пока что три темки, чем мы можем заняться, для них компьютер уже выделил память (как раз три ячейки), но вдруг у нас появляется четвертая задача, а следующая ячейка памяти уже занята! Что нам теперь делать??? В таком случае, нам придется запросить новый блок памяти, где будет сразу 4 свободных ячейки памяти, которые идут друг за другом, а затем переместить наши 4 задачи туда. Но как вы уже поняли, это достаточно медленно, типо прикиньте у нас всегда будет появляться новая задача, а места под нее хватать не будет, и нам придется всегда искать в компьютере другой блок памяти. ⚙️ #Память #Связанные_списки #Массивы
🥰2
✅Простейшим решением будет бронирование (резервирование) места в массиве.
Вместо того, чтобы выделять память ровно под необходимое количество элементов, выделяется больше памяти, чем нужно в данный момент. Это позволяет добавлять новые элементы в массив, не перевыделяя память каждый раз. То есть, если у нас пока что 4 задачи, но мы не уверены что это конечное число, просто резервируем сразу 7-8 мест и не паримся. Конечно же, есть недостатки.
⁉️Первое, забронировав 8 мест, не факт, что все они будут использоваться, следовательно память будет расходоваться неэффективно. И мы ее не используем и никто другой.
‼️Второе, если количество задач выйдет за 8, то перемещать все ровно придется. Теперь разберем связанные списки... #Память #Связанные_списки #Массивы
Вместо того, чтобы выделять память ровно под необходимое количество элементов, выделяется больше памяти, чем нужно в данный момент. Это позволяет добавлять новые элементы в массив, не перевыделяя память каждый раз. То есть, если у нас пока что 4 задачи, но мы не уверены что это конечное число, просто резервируем сразу 7-8 мест и не паримся. Конечно же, есть недостатки.
⁉️Первое, забронировав 8 мест, не факт, что все они будут использоваться, следовательно память будет расходоваться неэффективно. И мы ее не используем и никто другой.
‼️Второе, если количество задач выйдет за 8, то перемещать все ровно придется. Теперь разберем связанные списки... #Память #Связанные_списки #Массивы
🥰2👍1
А, хотя подождите, сначала про недостатки массивов, а затем сразу к связанным спискам!
❌1. Это конечно же проблема с выделением памяти. Когда мы сохраняем задачи в массиве, нам нужен фиксированный и непрерывный участок памяти, это где элементы идут друг за другом. Если у нас всего три свободных ячейки памяти и вдруг понадобилась четвертая, но она занята, нам придется запросить новый блок памяти. Есть конечно резервирование ячеек, но про их минусы я также написал. 💻
❌2. Трудности с вставкой и удалением элементов (об этом еще поговорим позже). Вставка или удаление элемента в середине массива требует сдвига всех последующих элементов, что занимает линейное время O(n), если вы не шарите в этой теме, я об этом писал, можете смотреть в навигации. Это если че достаточно медленный алгоритм.
❌3. Фиксированный размер, нам придется задавать размер массива при создании. Большие массивы могут вызывать проблемы, особенно если нам не хватает ячеек памяти.
❌4. Наверное. это все-таки минус - однородность элементов в массиве. То есть, мы можем хранить только элементы одного типа
❌1. Это конечно же проблема с выделением памяти. Когда мы сохраняем задачи в массиве, нам нужен фиксированный и непрерывный участок памяти, это где элементы идут друг за другом. Если у нас всего три свободных ячейки памяти и вдруг понадобилась четвертая, но она занята, нам придется запросить новый блок памяти. Есть конечно резервирование ячеек, но про их минусы я также написал. 💻
❌2. Трудности с вставкой и удалением элементов (об этом еще поговорим позже). Вставка или удаление элемента в середине массива требует сдвига всех последующих элементов, что занимает линейное время O(n), если вы не шарите в этой теме, я об этом писал, можете смотреть в навигации. Это если че достаточно медленный алгоритм.
❌3. Фиксированный размер, нам придется задавать размер массива при создании. Большие массивы могут вызывать проблемы, особенно если нам не хватает ячеек памяти.
❌4. Наверное. это все-таки минус - однородность элементов в массиве. То есть, мы можем хранить только элементы одного типа
🥰2
Ииитак, о преимуществах массивов говорить нам нельзя пока что, мы еще связанные списки не рассмотрели.
‼️ Первое, что вы сразу могли заметить, наши задачи размещаются где угодно в памяти, в каждом элементе хранится адрес следующего элемента списка. А вот набор произвольных адресов памяти объединяется в цепочку. Я немного об этом подробнее почитал, вот вам рассказываю. Каждая такая 'задача' это узел.
‼️ Первое, что вы сразу могли заметить, наши задачи размещаются где угодно в памяти, в каждом элементе хранится адрес следующего элемента списка. А вот набор произвольных адресов памяти объединяется в цепочку. Я немного об этом подробнее почитал, вот вам рассказываю. Каждая такая 'задача' это узел.
🥰1