Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Пройдите все испытания в игре кальмара второго сезона

Игра в кальмара 2: новые испытания

Аркады, Казуальные, Для мальчиков

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Учусь в Python

981 пост сначала свежее
12
hypo69
hypo69
4 месяца назад
Лига программистов
Серия 101 игра на python. Шпаргалки

Сложность алгоритмов простыми словами⁠⁠

В программировании существует множество способов решения одной и той же задачи. Однако, не все решения одинаково эффективны. Один из ключевых аспектов, который следует учитывать при разработке алгоритмов, – это их сложность. Понимание сложности алгоритма позволяет оценить, как быстро он будет работать и сколько ресурсов (например, памяти) потребуется для его выполнения, особенно при увеличении объема входных данных. Понимание сложности алгоритмов – фундаментальный навык, который позволяет писать более эффективный код.

Что такое сложность алгоритма?

Представьте, что у вас есть задача: найти конкретное имя в телефонной книге.

  • Простой способ (линейный поиск): Вы берете книгу и начинаете листать страницу за страницей, пока не найдете нужное имя. Если имя в самом конце книги, вам придется перелистать всю книгу.

  • Умный способ (бинарный поиск): Вы открываете книгу посередине. Если имя, которое вы ищете, идет раньше имени на этой странице, вы закрываете вторую половину книги и ищете в первой половине. Если имя идет позже, вы ищете во второй половине. И так повторяете, пока не найдете нужное имя. При каждом шаге вы отбрасываете половину книги.

Сложность алгоритма – это способ описать, сколько "времени" (или ресурсов, например памяти) потребуется алгоритму, чтобы выполнить свою задачу, в зависимости от того, насколько "большая" эта задача.

  • Линейный поиск: Если в книге 10 страниц, вам может потребоваться пролистать 10 страниц. Если в книге 100 страниц, вам может потребоваться пролистать 100 страниц. Количество работы растет линейно с размером задачи. Это называется O(n), где 'n' – это размер задачи (количество страниц в книге).

  • Бинарный поиск: Если в книге 16 страниц, вам потребуется максимум 4 шага, чтобы найти имя. Если в книге 32 страницы, вам потребуется максимум 5 шагов. Количество работы растет гораздо медленнее, чем размер задачи. Это называется O(log n) (читается "о от логарифма эн").

  • Алгоритм O(n) становится медленнее прямо пропорционально увеличению размера задачи.

  • Алгоритм O(log n) становится медленнее гораздо медленнее, чем растет размер задачи.

Представьте, что вы разрабатываете поисковую систему. Если вы используете алгоритм O(n) для поиска в интернете (который содержит миллиарды веб-страниц), это займет невероятно много времени! А алгоритм O(log n) справится с этой задачей гораздо быстрее.

Основные типы сложности алгоритмов

Вот некоторые наиболее распространенные типы сложности:

  • O(1) – Константная сложность: Время выполнения всегда одинаковое, независимо от размера задачи. Например, взять первый элемент из списка.

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • O(log n) – Логарифмическая сложность: Время выполнения растет очень медленно с ростом размера задачи. Отличный пример – бинарный поиск.

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • O(n) – Линейная сложность: Время выполнения растет прямо пропорционально размеру задачи. Например, пройти по каждому элементу в списке.

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • O(n log n) – Линейно-логарифмическая сложность: Часто встречается в эффективных алгоритмах сортировки, таких как Merge Sort и Quick Sort.

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост

O(n^2) – Квадратичная сложность: Время выполнения растет в квадрате от размера задачи. Например, сравнить каждый элемент в списке с каждым другим элементом в этом же списке.

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • O(2^n) – Экспоненциальная сложность: Время выполнения растет очень быстро с ростом размера задачи. Обычно встречается в алгоритмах, использующих полный перебор.

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • O(n!) – Факториальная сложность: Самый медленный тип сложности. Встречается при переборе всех возможных перестановок элементов.

Примеры задач и алгоритмов с разной сложностью

Рассмотрим несколько примеров задач и различных алгоритмов для их решения, чтобы увидеть, как сложность влияет на производительность.

1. Сортировка списка:

  • Задача: Отсортировать список элементов в определенном порядке (например, по возрастанию).

  • Алгоритмы :

    • Bubble Sort:

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • Merge Sort:

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • Вывод: Для больших списков элементов алгоритмы с O(n log n) (Merge Sort) предпочтительнее алгоритмов с O(n^2) (Bubble Sort).

2. Поиск кратчайшего пути в графе:

  • Задача: Найти кратчайший путь между двумя вершинами в графе (например, между двумя городами на карте).

  • Алгоритмы:

    • Алгоритм Дейкстры (Dijkstra's Algorithm):

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • Вывод: Выбор алгоритма зависит от типа графа (взвешенный/невзвешенный, наличие отрицательных весов) и размера графа. Алгоритм Дейкстры эффективен для графов с неотрицательными весами.

3. Поиск подстроки в строке:

  • Задача: Найти все вхождения определенной подстроки в большей строке.

  • Алгоритмы:

    • Наивный поиск (Naive String Search):

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • Вывод: Для частого поиска подстрок в больших строках, существуют более эффективные алгоритмы, такие как КМП.

4. Задача о рюкзаке (Knapsack Problem):

  • Задача: У вас есть рюкзак определенной вместимости и набор предметов с разным весом и ценностью. Нужно выбрать предметы, которые максимизируют общую ценность, не превышая вместимость рюкзака.

  • Алгоритмы:

    • Динамическое программирование (Dynamic Programming):

Сложность алгоритмов простыми словами Python, Программирование, Гайд, Инструкция, Алгоритм, Длиннопост
  • Выбор алгоритма зависит от размера задачи и требований к точности решения.

O-нотация: упрощение сложности

Обычно сложность описывается с использованием "большой буквы O" (O-нотация). Она показывает, как быстро растет время выполнения алгоритма с ростом размера задачи, асимптотически, то есть для очень больших значений n. Мелкие константы и детали реализации обычно игнорируются. Например, алгоритм, который делает 2n + 5 операций, все равно считается O(n).

В худшем случае, среднем случае, лучшем случае

Сложность алгоритма может зависеть от входных данных. Обычно говорят о сложности в худшем случае – это максимальное количество времени или ресурсов, которое может потребоваться алгоритму. Иногда также анализируют сложность в среднем случае и лучшем случае.

Статья на github 👉 https://github.com/hypo69/1001-python-ru/blob/master/articles/slozhnost_algoritmov_prostymi_slovami_python/slozhnost_algoritmov_prostymi_slovami_python.md

Показать полностью 12
[моё] Python Программирование Гайд Инструкция Алгоритм Длиннопост
1
Fishrish
Fishrish
4 месяца назад

Код на Ритме: Люди Воплощают Программистский Стиль⁠⁠

Музыка Программирование Программист IT юмор Python IT Windows Программа Видео Вертикальное видео Короткие видео
0
Fishrish
Fishrish
4 месяца назад

Взломанный Хайп: Когда Люди Представляют Программистов⁠⁠

Музыка Программирование Программист IT юмор Python IT Windows Программа Видео Вертикальное видео Короткие видео
1
2
Anasych
Anasych
4 месяца назад
Лига программистов
Серия «От нуля до кода»

Пост № 3. Алгоритмы и структуры данных⁠⁠

Продолжая серию постов об обучении на backend-разработчика, расскажу про следующий тематический блок: основы алгоритмов. Выяснил, почему они важны для программиста. Ведь от правильного выбора алгоритма зависит скорость работы программы даже при большом объёме данных!

Разобрал несколько популярных алгоритмов:

- Линейный поиск (перебираем элементы массивы один за другим);

- Бинарный поиск (сравниваем целевой элемент с серединой отсортированного массива);

- Сортировка пузырьком (элементы как бы "всплывают" вверх по мере сортировки массива).

Выяснил, что такое «сложность алгоритма». Оценивали её по двум параметрам: времени выполнения и потребляемой памяти. Это помогло лучше понять, какие алгоритмы работают быстрее и эффективнее.

Также познакомился с понятием «структуры данных», которое описывает способы хранения информации. Узнал, насколько важно учитывать типы данных при выборе алгоритмов.

Изучил популярные методы решения задач:

- «Наивный» подход: просто делаем так, чтобы работало;

- Метод двух указателей: позволяет сразу отбрасывать неподходящие варианты;

- Метод скользящего окна: работаем с частью массива, постепенно перемещаясь по нему.

Заключительное задание блока — задача службы доставки. Нужно было написать программу для марсохода, который перевозит роботов-исследователей. У каждого робота свой вес, а платформа имеет ограниченную грузоподъемность. Требовалось найти минимальное число платформ для транспортировки всех роботов.

Задача оказалась интересной и сложной, но я справился! Блок завершён успешно. :)

Предыдущие посты серии здесь:

Пост № 1. Знакомство
Пост № 2. Python

Показать полностью
[моё] Python Программирование IT Учеба Разработка Текст
0
9
hypo69
hypo69
4 месяца назад
Программирование на python
Серия 101 игра на python. Шпаргалки

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт⁠⁠

Что такое TinyTroupe?

TinyTroupe — это экспериментальная Python-библиотека от Microsoft, предназначенная для моделирования людей с определёнными личностными характеристиками, интересами и целями. Эти искусственные агенты, называемые «TinyPerson», могут взаимодействовать между собой и с окружающей средой, имитируя реалистичное поведение.

Что такое TinyPerson?

В основе TinyTroupe лежит класс TinyPerson. TinyPerson - это основной строительный блок для создания сложных, управляемых LLM агентов.
Экспериментируйте с различными промптами, конфигурациями памяти и ментальными способностями, чтобы раскрыть весь потенциал моделирования человеческого поведения.

Представьте его как чертеж для смоделированной личности. Каждая TinyPerson обладает:

  • Имя: Уникальный идентификатор.

  • Когнитивные состояния: Внутренние переменные, представляющие внимание, эмоции, цели и другие ментальные аспекты, влияющие на поведение.

  • Память: Разделенная на episodic_memory (конкретные события) и semantic_memory (общие знания), отражая структуру человеческой памяти.

  • Поведенческие абстракции: Методы listen() и act() имеют решающее значение для взаимодействия, моделируя циклы стимул-реакция.

Установка

  • В папке ваших проектов выполните команды

git clone https://github.com/microsoft/TinyTroupe.git
cd TinyTroupe
python -m venv venv
venv\Scripts\activate
pip install git+https://github.com/microsoft/TinyTroupe.git@main

код 👉 MyTinyTroupe/tiny_troupe.md at master · hypo69/MyTinyTroupe · GitHub

  • Переименуйте файл .env.example в .env и добавьте в него свой ключ OpenAI API.

Примеры использования

1. Создание TinyPerson

Внутри директории examples создайте файл my_person.py и добавьте следующий код:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

код 👉 https://github.com/hypo69/MyTinyTroupe/blob/master/examples/tiny_person.py

Этот пример создаёт агента, задаёт его характеристики, инициирует взаимодействие и показывает историю взаимодействия.

2. Методы взаимодействия

  • act(): Определяет поведение агента, запрашивая у LLM действие на основе памяти и когнитивного состояния.

  • listen(): Моделирует получение сообщения от другого агента или среды, сохраняя информацию в памяти.

  • _observe(): Записывает стимулы (события, ощущения) во внутреннюю память агента.

3. Управление памятью

TinyPerson использует episodic_memory и semantic_memory:

  • episodic_memory: Хранит конкретные события, организует их по времени и ограничивает количество используемых записей.

  • semantic_memory: Хранит общие знания, индексируя текстовые документы с помощью llama_index.

4. Внутреннее состояние и конфигурация

  • _update_cognitive_state(): Изменяет цели, внимание, эмоции и другие внутренние переменные.

  • define(): Устанавливает или обновляет параметры конфигурации агента.

  • reset_prompt(): Пересоздаёт системный промпт для LLM на основе текущей конфигурации и памяти агента.

Управление акторами и средой

5. Создание и управление мирами

В TinyTroupe среда моделируется с помощью TinyWorld, а социальные связи — через TinySocialNetwork.

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

Метод make_everyone_accessible() позволяет всем агентам взаимодействовать друг с другом.

6. Управление акторами в комнате

Если акторы уже определены, но вам нужно их обновить или заменить, можно использовать:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

7. Запуск симуляции

Для моделирования взаимодействий используется run():

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

8. Управление взаимодействиями

Если вам нужно контролировать диалоги между агентами:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

Этот код инициирует разговор и генерирует ответ агента.

9. Создание социальных сетей

TinySocialNetwork позволяет моделировать социальные связи и группы:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

Пример простого чата с общением на русском языке:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

функция установки языка акторов

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост


Часть словарей характеристики актора:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

Словари большие. Целиком здесь 👇
MyTinyTroupe/examples/agents/Lila.agent.json at master · hypo69/MyTinyTroupe · GitHub
MyTinyTroupe/examples/agents/Oscar.agent.json at master · hypo69/MyTinyTroupe · GitHub

код чата:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост

Этот код создает двух агентов (lila и oscar), загружает их спецификации, переводит их язык общения на русский, помещает их в общий мир (world), делает всех участников доступными друг для друга и запускает взаимодействие между ними.

Разбор кода по шагам:

  1. Загрузка агентов из спецификаций:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост
  • Создаются два агента: lila и oscar.

  • Они загружаются из спецификаций lila_spec и oscar_spec, которые, содержат их характеристики (возраст, профессия, интересы и т. д.).

  1. Настройка языка общения:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост
  • configure_language устанавливает русский язык для агентов.

  • Это также пересоздает их системный промпт, чтобы они отвечали на русском.

  1. Создание мира и размещение агентов:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост
  • Создается виртуальный мир TinyWorld с названием "Chat Room".

  • В этот мир добавляются lila и oscar, что позволяет им взаимодействовать.

  1. Делаем всех доступными друг для друга:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост
  • Убеждаемся, что агенты могут "видеть" и "слышать" друг друга.

  • Без этого метода агент мог бы не знать, что другой агент существует в том же мире.

  1. Инициирование общения:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост
  • lila получает фразу "Начинает разговор с Оскаром, чтобы узнать о нем больше".

  • Это стимулирует ее к действию (например, задать вопросы Оскару).

  1. Запуск симуляции взаимодействий:

Создание интеллектуальных агентов с TinyTroupe: Быстрый старт Программирование, Python, Openai, IT, Гайд, Разработка, Длиннопост
  • world.run(4) запускает симуляцию на 4 цикла, в течение которых агенты будут:

    • Воспринимать информацию (listen()).

    • Действовать (act()).

    • Обновлять память (что они узнали, какие эмоции испытали).

Ожидаемое поведение

  • lila попытается поговорить с oscar, задавая вопросы на русском.

  • oscar ответит, используя информацию из своей памяти и спецификации.

  • world.run(4) заставит их несколько раз обменяться репликами.

  • После выполнения кода в памяти агентов появятся новые знания о собеседнике.

💡 Совет: Если агенты не разговаривают, попробуйте добавить world.step() после lila.listen(), чтобы проверить их реакцию перед запуском полного цикла run(4).

Пример в Google Colab
код на гитхабе

Тебя может заинтересовать также LangChain и Browser-Use: Создание ИИ-агентов для работы с веб-браузером. Быстрый старт

Удачи!

Показать полностью 16
[моё] Программирование Python Openai IT Гайд Разработка Длиннопост
7
2
user10362568
4 месяца назад

Почему я выбрал Python?⁠⁠

Вчера я опубликовал свой первый пост о моем пути в IT. Многие его не поняли. Но цель поста была не рассказать обо всём, что я знаю и умею, а лишь поделиться своей историей знакомства с Python.

Сегодня я хочу рассказать свою историю заново — но уже подробнее. А пост про все мои Soft и Hard skills будет позже.

Начало

Моё знакомство с Python началось в 2021 году. В те времена я был обычным школьником, который днями зависал в интернете и играл на планшете. Но уже тогда меня начало увлекать, как устроены Telegram-боты.

Мой первый бот был создан с помощью ManyBot — это был примитивный "собеседник", который просто отвечал по заранее заданным комбинациям.

Погружение в Python

Через месяц я узнал, что ботов можно создавать без ManyBot, используя Python. И тогда я наткнулся на первое видео с канала Howdy Ho. Благодаря этому ролику я написал своего первого эхо-бота.

С этого момента у меня проснулся азарт программирования. Я начал смотреть все видео Howdy Ho, включая его знаменитый "1 час Python с нуля".

P.S. Никого не призываю смотреть его ролики, просто делюсь своим опытом. Сейчас я получаю знания через ресёрч.

Опыт с aiogram

Все эти годы я разрабатывал Telegram-ботов исключительно на Telebot, но сейчас активно изучаю aiogram 2.x. В будущем у меня даже есть мечта — создать свою библиотеку, которая упростит разработку ботов.

Пока это только мечты, но кто знает, что будет дальше?

Итоги

За три года работы с Python я освоил:

  • Telebot

  • SQLite

  • Немного поработал с MongoDB

  • Нашел единомышленников, интересующихся программированием

В этом году я хочу поступить на обучение в Skillbox колледж, а затем стать full-time фрилансером.

Это только начало.

Дисклеймер

Мы все люди — в праве ошибаться. Прошу вас не хейтить меня, а наоборот, давать советы. Ко всем добрым людям я буду прислушиваться. Я добрый, а не злой :)

Показать полностью
[моё] Программирование Программист Python IT Текст
17
Fishrish
Fishrish
4 месяца назад
Лига программистов

Выбор Кринжа: Ваш Голос за Самого Кринжового Айтишника⁠⁠

Программа Программист IT IT юмор Windows Python Музыка Видео Вертикальное видео Короткие видео
5
Партнёрский материал Реклама
specials
specials

Сколько нужно времени, чтобы уложить теплый пол?⁠⁠

Точно не скажем, но в нашем проекте с этим можно справиться буквально за минуту одной левой!

Попробовать

Ремонт Теплый пол Текст
Fishrish
Fishrish
4 месяца назад
Лига программистов

Двоичный Хит: Люди в Жанре IT Под Песню Ай Ти⁠⁠

Музыка Программирование Программист IT юмор Python IT Windows Программа Видео Вертикальное видео Короткие видео
2
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии