METANIT.COM – Telegram
METANIT.COM
5.9K subscribers
1.68K photos
83 videos
9 files
1.05K links
Канал о программировании и разработке сайта metanit.com
Download Telegram
7 ключевых сложностей времени исполнения
👍144👏1
7 ключевых сложностей времени исполнения:
(описание к предыдущему посту)

1. O(1) — Постоянная сложность
- Время выполнения не зависит от размера входных данных.
- Пример: Доступ к элементу массива по индексу.

2. O(log n) — Логарифмическая сложность

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

3. O(n) — Линейная сложность

- Время выполнения растёт линейно вместе с размером входных данных.
- Пример: Поиск элемента в массиве путём последовательного перебора всех элементов.

4. O(n log n) — Линеаризованно-логарифмическая сложность
- Время выполнения возрастает чуть быстрее, чем линейно. Включает выполнение логарифмического числа операций для каждого элемента входных данных.
- Пример: Алгоритмы сортировки, такие как быстрая сортировка (quicksort) или сортировка слиянием (mergesort).

5. O(n²) — Квадратичная сложность
- Время выполнения пропорционально квадрату размера входных данных.
- Пример: Алгоритм пузырьковой сортировки, который сравнивает и потенциально меняет местами каждую пару элементов.

6. O(2ⁿ) — Экспоненциальная сложность
- Время выполнения удваивается с каждым добавлением нового элемента к входным данным. Такие алгоритмы становятся непрактичными для больших размеров входных данных.
- Пример: Генерация всех подмножеств множества.

7. O(n! ) — Факториальная сложность
- Время выполнения пропорционально факториалу размера входных данных.
- Пример: Генерация всех перестановок множества.
👍19🔥31👏1🙏1
Пользовательская база операционной системы Windows сократилась примерно на 400 миллионов пользователей за последние три года. Об этом свидетельствуют официальные заявления Microsoft. В 2022 году в годовом отчете компании указывалось, что Windows 10 и 11 использовались на более чем 1,4 миллиарда устройств, тогда как в недавнем посте исполнительного вице-президента Microsoft Юсуфа Мехди сообщается о «более чем одном миллиарде активных устройств» по состоянию на июнь 2025 года. Это указывает на значительное сокращение числа пользователей.
Основные причины сокращения:

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

- Конкуренция со стороны macOS и других систем: Хотя macOS (особенно после появления Apple Silicon) представляет угрозу, продажи Mac также снижаются (с 85% доходов Apple в прошлом до 7,7% в 2023 году). Это указывает на то, что пользователи не массово переходят на Mac, а скорее отказываются от ПК в пользу мобильных устройств.

- Агрессивное продвижение Windows 11: Microsoft активно побуждает пользователей переходить на Windows 11, так как поддержка Windows 10 прекратится в октябре 2025 года. Однако строгие аппаратные требования Windows 11 (например, необходимость TPM 2.0 и современных процессоров) ограничивают возможность обновления для многих устройств, что может способствовать оттоку пользователей.

Основные потребительские сегменты, продолжающие использовать Windows, — это геймеры и профессионалы, зависящие от специализированного ПО, доступного только на Windows. Тем не менее, даже в этих нишах наблюдается рост использования мобильных устройств и облачных решений, что снижает зависимость от традиционных ПК.

https://www.tomshardware.com/software/windows/windows-seemingly-lost-400-million-users-in-the-past-three-years-official-microsoft-statements-show-hints-of-a-shrinking-user-base

#вендекапец #windows
7🙉5🤔42🤩2🐳2
Спустя десятилетия это наконец случилось: в C++ была добавлена функция вывода в выходной поток - std::print, в том числе с применением форматирования. Правда, не все компиляторы полноценно поддерживают ее, либо степень поддержки может отличаться. Но тем не менее вскоре можно будет отправить std::cout на пенсию.
#cpp
24😢11😁7🤯4👎32😴2🎉1😐1
Из интервью Михаила Автухова, заместителя председателя правления Совкомбанка:
"ИИ действует как экзоскелет, многократно усиливая возможности сотрудников. Уже сейчас мы видим впечатляющие результаты:
Сотрудники без навыков программирования создают код с помощью ИИ"

https://finance.mail.ru/2025-06-30/bankir-avtuhov-bez-razvitiya-ii-banki-vstanut-66716644/

Если честно, стало страшно за Совкомбанк
🤣46😁152👍1
Агенты ИИ выполняют офисные задачи неправильно примерно в 70% случаев, и многие из них вообще не являются ИИ
Для проверки реальности исследователи разработали эталон для оценки того, как агенты ИИ выполняют общие рабочие задачи, такие как просмотр веб-страниц, написание кода, запуск приложений и общение с коллегами - среду моделирования, разработанную для имитации небольшой компании-разработчика программного обеспечения и ее бизнес-операций.

Исследователи проверили следующие модели и оценили их на основе показателей успешности выполнения задач. Результаты оказались неутешительными.
В ходе экспериментов обнаружилось, что самая производительная модель Gemini 2.5 Pro смогла автономно выполнить 30,3% предоставленных тестов до конца. Весь рейтинг протестированных ИИ-моделей:

Gemini-2.5-Pro ​​(30,3%)
Claude-3.7-Sonnet (26,3%)
Claude-3.5-Sonnet (24%)
Gemini-2.0-Flash (11,4%)
GPT-4o (8,6%)
o3-mini (4,0%)
Gemini-1.5-Pro ​​(3,4%)
Amazon-Nova-Pro-v1 (1,7%)
Llama-3.1-405b (7,4%)
Llama-3.3-70b (6,9%)
Qwen-2.5-72b (5,7%)
Llama-3.1-70b (1,7%)
Qwen-2-72b (1,1%)

https://www.theregister.com/2025/06/29/ai_agents_fail_a_lot/
😁175👍3👏2🔥1🤮1💯1
Асинхронная коммуникация и потеря данных
Асинхронная коммуникация и потеря данных
(описание к предыдущему посту)

Асинхронная коммуникация масштабируема, слабо связана и устойчива. Но и она может столкнуться с проблемами. Одна из них - потеря данных.
Событийно управляемые системы выглядят простыми на первый взгляд: вы отправляете событие, другой сервис его получает и обрабатывает.
Где теряются данные:

1. Издатель отправляет событие, потом падает перед тем, как брокер подтвердит получение

2. Потребитель берет сообщени, потом падает перед обработкой

3. Потребитель обрабатывает сообщение, но запись в базу данных проходит неудачно без какого-нибудь уведомления

Как это предотвратить?

1. Постоянные очереди + синхронная отправка
Брокер сохраняет сообщение на диске перед подтверждением.
А издатель ждет подтверждения перед продолжением.

2. Режим подтверждения клиентом
Потребитель подтверждает сообщение только после успешной обработки.
Если потребитель упадет посередине процесса, сообщение останется в очереди для повторной попытки.

3. Поддержка последнего участника
Сообщение считается выполненным только тогда, когда данные надежно записаны.
Если вызов базы данных потерпел неудачу, подтверждение не отправляется.
👍3
К слову о "смерти" PHP - по некоторой статистике PHP используют более 74% веб-сайтов #php
🤣56👍7🤮7🤡2
This media is not supported in your browser
VIEW IN TELEGRAM
Сегментация памяти в программе на C/C++
👍12🔥1🥰1
В руководство по языку Си добавлена статья про Макрос перебора списков в стиле for-each
https://metanit.com/c/tutorial/12.5.php
#c_ansi
👍15🔥3👏1
Пример организации памяти программы на примере программы на Си
👍11🤔6👏1😁1
Организация памяти программы на C и структура сегментов (описание к картинке из предыдущего поста)

Структура памяти программы на языке C имеет чётко определённое устройство, которое организует различные типы данных и кода в отдельные сегменты в адресном пространстве процесса.

Каждый сегмент выполняет определённую функцию и обладает уникальными характеристиками, которые определяют, как происходит распределение, доступ и управление памятью во время выполнения программы.

Сегмент стека располагается в верхней части структуры памяти и растёт вниз при вызовах функций и создании локальных переменных. Этот сегмент содержит все локальные переменные, параметры функций и адреса возврата. При каждом вызове функции создаётся новый фрейм стека, который хранит её локальные данные.

В данном примере (картинка из предыдущего поста) сегмент стека хранит локальный массив x, содержащий значения {1, 7, 3}, а также такие переменные, как result, f и q, которые существуют в области видимости соответствующих функций.

Стек работает по принципу last-in-first-out (последним пришёл — первым ушёл), автоматически управляя выделением и освобождением памяти при вызовах и возврате функций. Когда выполняется функция main, она создаёт пространство для массива x и переменной result, в то время как функция f создаёт собственный фрейм стека, содержащий локальную переменную q, инициализированную значением 7.0.

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

Сегмент динамической памяти (heap) предоставляет возможности динамического распределения памяти, хотя в этом простом примере он не используется. Расположенный между стеком и нижними сегментами памяти, heap растёт вверх и позволяет программам запрашивать память во время выполнения с помощью функций malloc() и free().

Сегмент констант и глобальных переменных
хранит переменные, которые существуют на протяжении всего выполнения программы, например, глобальную переменную size со значением 3. Этот сегмент обычно содержит инициализированные глобальные переменные, статические переменные и строковые литералы, которые должны оставаться доступными из нескольких функций или на протяжении всего времени существования программы.

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

Функция f (картинка из предыдущего поста) демонстрирует простую реализацию, которая всегда возвращает значение 7.0 с помощью локальной переменной q, в то время как функция main организует поток программы, инициализируя массив, вызывая функцию f и сохраняя возвращённое значение.

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

https://metanit.com/c/tutorial/5.18.php
👍85👏1
Media is too big
VIEW IN TELEGRAM
Играть в футбол роботы пока не готовы
😁272🤮1
Шпаргалка по работе с f-строками в языке Python #python
👍7🔥5🤨2👏1🤮1
Разработчик из Amazon пожаловался, что уже год работает 30 минут в день. Он рассказывает, что уже год фактически не выполняет никакой реальной работы. Его команда полностью состоит из индийских инженеров, и, по его словам, они систематически избегают поручать ему серьезные задачи. Сначала он был раздражён и хотел перевестись в другую команду, но позже решил смириться и просто «сидеть на попе ровно», выполняя минимальный объём работы - примерно 30 минут в день, при этом продолжая получать полную зарплату.
https://www.teamblind.com/post/havent-done-any-work-in-a-year-at-amazon-ey2vyajr/46747093

Всем бы такие проблемы...
👍27🤣127🤯5😭3🤔2