📘 The Elements of Computing Systems.zip
26.1 MB
📘 The Elements of Computing Systems: Building a Modern Computer from First Principles [2005 + 2021] Noam Nisan and Shimon Schocken
Лучший способ понять, как работают компьютеры - это создать один с нуля, и этот учебник проводит читателей через двенадцать глав и проектов, которые постепенно создают аппаратную платформу и иерархию программного обеспечения для простой, но мощной компьютерной системы. В процессе читатели получают практические знания об аппаратном обеспечении, архитектуре, операционных системах, языках программирования, компиляторах, структурах данных и алгоритмах, а также о разработке программного обеспечения.
Достоинства:
➕Хорошая структурированность;
➕Оригинальный авторский подход.
☕️ Для тех, кто захочет задонать на кофе:
ВТБ:
#программирование #низкоуровневое_программирование #архитектура #computer_science #assembler #cpp #C
💡 Physics.Math.Code // @physics_lib
Лучший способ понять, как работают компьютеры - это создать один с нуля, и этот учебник проводит читателей через двенадцать глав и проектов, которые постепенно создают аппаратную платформу и иерархию программного обеспечения для простой, но мощной компьютерной системы. В процессе читатели получают практические знания об аппаратном обеспечении, архитектуре, операционных системах, языках программирования, компиляторах, структурах данных и алгоритмах, а также о разработке программного обеспечения.
Достоинства:
➕Хорошая структурированность;
➕Оригинальный авторский подход.
☕️ Для тех, кто захочет задонать на кофе:
ВТБ:
+79616572047 (СБП) ЮMoney: 410012169999048#программирование #низкоуровневое_программирование #архитектура #computer_science #assembler #cpp #C
💡 Physics.Math.Code // @physics_lib
1❤41👍30🔥10👨💻2🤩1🗿1
📗 Прикладное машинное обучение и искусственный интеллект для инженеров [2024] Джеф Просиз
📙 Applied Machine Learning and AI for Engineers Solve Business Problems That Can't Be Solved Algorithmically [2022] Jeff Prosise
💾 Скачать книги RU + EN
Сейчас такой литературы полно, но у этой книги есть ряд преимуществ:
▫️1) она написана с точки зрения прямого прикладного применения ML-моделей и при этом содержит в себе очень большой обзор и очень много полезных примеров
▫️2) книга написана увлекательно и очень понятным языком
▫️3) книга переведена на русский язык и перевод качественный
▫️4) здесь есть даже инструкции, как внедрять облачные сервисы с ИИ в свои собственные приложения по API, и много подобных практически полезных вещей
Книга состоит из двух частей:
▪️ ЧАСТЬ 1. МАШИННОЕ ОБУЧЕНИЕ С ПОМОЩЬЮ SCIКIT-LEARN
▪️ ЧАСТЬ 2. ГЛУБОКОЕ ОБУЧЕНИЕ С ПОМОЩЬЮ КERAS И TENSORFLOW
В каждой части по 7 глав, где рассмотрены основные модели и как ими пользоваться, как внедрять и применять, много примеров прикладных задач присутствует в каждой главе. #AI #ИИ #машинное_обучение #python #искусственный_интеллект #математика #computer_science
💡 Physics.Math.Code // @physics_lib
📙 Applied Machine Learning and AI for Engineers Solve Business Problems That Can't Be Solved Algorithmically [2022] Jeff Prosise
💾 Скачать книги RU + EN
Сейчас такой литературы полно, но у этой книги есть ряд преимуществ:
▫️1) она написана с точки зрения прямого прикладного применения ML-моделей и при этом содержит в себе очень большой обзор и очень много полезных примеров
▫️2) книга написана увлекательно и очень понятным языком
▫️3) книга переведена на русский язык и перевод качественный
▫️4) здесь есть даже инструкции, как внедрять облачные сервисы с ИИ в свои собственные приложения по API, и много подобных практически полезных вещей
Книга состоит из двух частей:
▪️ ЧАСТЬ 1. МАШИННОЕ ОБУЧЕНИЕ С ПОМОЩЬЮ SCIКIT-LEARN
▪️ ЧАСТЬ 2. ГЛУБОКОЕ ОБУЧЕНИЕ С ПОМОЩЬЮ КERAS И TENSORFLOW
В каждой части по 7 глав, где рассмотрены основные модели и как ими пользоваться, как внедрять и применять, много примеров прикладных задач присутствует в каждой главе. #AI #ИИ #машинное_обучение #python #искусственный_интеллект #математика #computer_science
💡 Physics.Math.Code // @physics_lib
👍34❤18🔥13❤🔥2👨💻2😍1🗿1
Прикладное_машинное_обучение_и_искусственный_интеллект_для_инженеров.zip
56.3 MB
📗 Прикладное машинное обучение и искусственный интеллект для инженеров [2024] Джеф Просиз
📙 Applied Machine Learning and AI for Engineers Solve Business Problems That Can't Be Solved Algorithmically [2022] Jeff Prosise
Книга рассказывает о применении искусственного интеллекта и машинного обучения в бизнесе и инженерной практике. Подробно описаны популярные алгоритмы машинного обучения и разъяснено, когда их целесообразно использовать. Приведены примеры построения моделей машинного обучения на языке Python с помощью библиотеки Scikit-Learn, а также создания нейронных сетей посредством библиотек Keras и TensorFlow. Изложены базовые принципы и способы оценки регрессионных моделей, моделей бинарной и многоклассовой классификации. Показаны примеры создания модели распознавания лиц и обнаружения объектов, языковых моделей, отвечающих на естественно-языковые вопросы и переводящих текст на другие языки. Рассмотрено использование набора облачных API Cognitive Services для внедрения ИИ в различные приложения. #AI #ИИ #машинное_обучение #python #искусственный_интеллект #математика #computer_science
💡 Physics.Math.Code // @physics_lib
📙 Applied Machine Learning and AI for Engineers Solve Business Problems That Can't Be Solved Algorithmically [2022] Jeff Prosise
Книга рассказывает о применении искусственного интеллекта и машинного обучения в бизнесе и инженерной практике. Подробно описаны популярные алгоритмы машинного обучения и разъяснено, когда их целесообразно использовать. Приведены примеры построения моделей машинного обучения на языке Python с помощью библиотеки Scikit-Learn, а также создания нейронных сетей посредством библиотек Keras и TensorFlow. Изложены базовые принципы и способы оценки регрессионных моделей, моделей бинарной и многоклассовой классификации. Показаны примеры создания модели распознавания лиц и обнаружения объектов, языковых моделей, отвечающих на естественно-языковые вопросы и переводящих текст на другие языки. Рассмотрено использование набора облачных API Cognitive Services для внедрения ИИ в различные приложения. #AI #ИИ #машинное_обучение #python #искусственный_интеллект #математика #computer_science
💡 Physics.Math.Code // @physics_lib
👍52🔥20❤13⚡7💯4🥰2🗿1
Очевидно, что есть два способа, если исключаем одноканал: Способ 1 (4x8 ГБ) vs Способ 2 (2x16 ГБ). Однозначно лучше и эффективнее: Способ 2 — 2 планки по 16 ГБ. Вот почему это так, особенно для современных платформ (AMD AM5 и Intel LGA 1700/1851):
▪️ 1. Меньшая нагрузка на контроллер памяти (IMC). Контроллеру памяти внутри процессора значительно проще работать с двумя планками, чем с четырьмя. Это повышает стабильность системы, особенно при работе на высоких частотах с низкими таймингами.
▪️ 2. Более высокий шанс запуска на заявленной высокой частоте. Память DDR5 особенно чувствительна к количеству модулей. Сборка из 2 планок с большой вероятностью заработает на своей штатной частоте (например, 6000 МГц) с включенным EXPO/XMP. Сборка из 4 планок почти всегда потребует ручного понижения частоты (например, до 5200-5600 МГц) или увеличения таймингов для стабильной работы.
⚠️ Потеря в производительности от более низкой частоты часто перевешивает гипотетический выигрыш от четырёхканального доступа.
▪️ 3. Возможность будущего апгрейда. У вас останутся два свободных слота на материнской плате. Если вам вдруг позарез понадобится 64 ГБ (для монтажа, работы с AI и т.д.), вы просто докупите еще два модуля по 16 ГБ. В варианте с 4x8 ГБ апгрейд возможен только полной заменой всех планок на 4 новых.
▪️ 4. Совместимость и стабильность. Комплекты из двух планок протестированы производителем и гарантированно работают вместе. Сборка из четырёх планок — это всегда лотерея, даже если вы покупаете два одинаковых комплекта по 2x8 ГБ.
Краткий итог: Для 99% пользователей, особенно геймеров, конфигурация 2 модуля по 16 ГБ является золотым стандартом и оптимальным выбором.
Нужно ли 64 ГБ для игрового компьютера? На данный момент (2025 год) для чисто игрового компьютера 64 ГБ — это избыточно. И вот почему:
▪️ Подавляющее большинство игр комфортно себя чувствуют в рамках 16-32 ГБ оперативной памяти. Даже такие современные и требовательные тайтлы, как Cyberpunk 2077 с патчейми, Alan Wake 2, Star Citizen, могут потреблять до 20-24 ГБ ОЗУ, но это включает в себя и саму ОС, и фоновые приложения.
▪️ 32 ГБ — это идеальный и достаточный объем на ближайшие 2-3 года для любых игр с запасом. Вы полностью исключите любые подтормаживания, связанные с нехваткой ОЗУ, и сможете держать открытым браузер, дискорд и другие приложения во время игры.
▫️1. Параллельная работа с "тяжелыми" приложениями: Если вы одновременно с игрой занимается стримингом (через OBS Studio), монтажом видео, рендерингом или работаете с виртуальными машинами.
▫️2. Очень специфичные игры и моды: Некоторые симуляторы (например, Microsoft Flight Simulator 2024 с огромным количеством модов на высоких настройках) или моды для игр вроде Cities: Skylines II могут "съедать" гигантские объемы памяти.
▫️3. Работа с ИИ (AI): Локальное использование нейросетей (генерация изображений, работа с LLM-моделями) требует огромных объемов ОЗУ.
▫️4. Профессиональные задачи: Видеомонтаж в 4K/8K, работа с большими базами данных, 3D-моделирование сложных сцен.
Останавливайтесь на объеме 32 ГБ. Этого более чем достаточно для игр и многозадачности. Вкладывайте сэкономленный бюджет (от не покупки 64 ГБ) в более важные компоненты: например, в более мощную видеокарту или более быстрый накопитель. Это даст гораздо более заметный прирост производительности в играх. Если в будущем вы поймете, что 64 ГБ вам реально нужны, вы всегда сможете докупить второй идентичный комплект из 2x16 ГБ и получить в сумме 64 ГБ. Но будьте готовы к тому, что для стабильной работы системе, возможно, придется сбросить частоту памяти. #hardware #железо #техника #программирование #разработка #development #computer_science
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥66❤36👍24❤🔥6🗿4💯3🤔2⚡1👨💻1
Разработка позволяет блокировать нелегальное использование моделей. Уже обученную нейросеть, внедренную в продукт, постфактум защитить обычно невозможно из-за отсутствия механизмов и дорогого переобучения. Обычно разработчики интегрируют защиту прямо в обучение. Новое решение от ученых — встроенные нейроны-детекторы.
▪️Принцип прост: в модель добавляют нейрон, который никак не реагируют на обычные изображения, но активируется только при появлении секретного ключа — например, мини-узора 4х4
▪️Эффект: по этому срабатыванию и можно доказать авторство модели, даже если весы кто-то скопировал.
▪️Расширение метода: если добавить “нейроны-нарушители”, модель будет работать только при наличии ключа. Без него — сознательно вносит помехи.
▪️Финал: защита встраивается уже в обученную сеть без повторного обучения и затрат, а вероятность ложного срабатывания — менее 0,01%
Главный плюс подхода — он превращает любую готовую модель CV в защищенный от пиратства продукт без пересборки и долгих циклов.
#наука #AI #ИИ #искусственный_интеллект #computer_science
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤45👍25🔥15😨9🤷♂4😢3🌚2🫡1
📚 Искусство программирования / The Art of Computer Programming
💾 Скачать книги
Поскольку Кнут всегда считал «Искусство программирования» основным проектом своей жизни, в 1993 году он вышел на пенсию с намерением полностью сконцентрироваться на написании недостающих частей и приведении в порядок существующих. Он полагал, что на завершение работы потребуется 20 лет.
«Искусство программирования» (англ. The Art of Computer Programming) — фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвященная рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.
Основной чертой монографии Кнута, выгодно отличающей её от других книг, посвящённых программированию, является исключительно высоко поднятая планка качества материала и академичности изложения, а также глубина анализа рассматриваемых вопросов. Благодаря этому она стала настоящим бестселлером и настольной книгой каждого профессионального программиста.
🖥 1. Нужен ли уровень Тьюринга?
Страх перед формулами — главный барьер. Да, математика там есть, и серьезная: комбинаторика, теория вероятностей, анализ алгоритмов. Кнут не бросает читателя в омут. Он постепенно вводит понятия, обильно сопровождая их примерами и упражнениями (с решениями!). Это не учебник для разгона с нуля, но для человека с базовой университетской подготовкой (или с высокой мотивацией и готовностью гуглить термины) — она доступна. Это математика компьютерной эры, а не абстрактная.
💻 2. А на работе-то пригодится?
Прямой ответ: в повседневной разработке CRUD-приложений вы вряд ли будете вручную выводить сложность сортировки слиянием.
Но косвенно — бесценно. Чтение Кнута — это:
▫️Качка для ума: перестраивает мышление на глубокое понимание почему одна операция быстрее другой.
▫️Фундамент: вы перестаете быть «пользователем» структур данных и алгоритмов, а становитесь тем, кто понимает их изнутри. Это уровень уверенности, который не купишь курсом по «паттернам».
▫️Культурный код: вы начинаете видеть элегантность и красоту в эффективных решениях. Это как разница между ремесленником и архитектором.
🕰 3. А в 2026-то это еще актуально?
Ядро книги — фундаментальные алгоритмы и принципы. Сортировки, поиски, хеширование, работа с деревьями — это «таблица умножения» нашей профессии. Меняются языки, фреймворки, парадигмы, но эти основы — нет.
Более того, в эпоху big data, AI и высоконагруженных систем понимание сложности алгоритмов важнее, чем когда-либо. Кнут учит мыслить эффективно в ресурсоограниченной среде — а это и есть суть программирования.
Это не книга, чтобы «подтянуть JS перед собеседованием». Это — инвестиция в интеллектуальный капитал. Для:
▪️Будущих и настоящих инженеров-алгоритмистов, разработчиков компиляторов, ученых.
▪️Программистов, которые хотят выйти за рамки шаблонной разработки и понять суть вещей.
▪️Любого, кто считает программирование не только ремеслом, но и искусством (судя по названию, сам Кнут так и считал).
А вы заглядывали в «Искусство программирования»? #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
💡 Physics.Math.Code // @physics_lib
💾 Скачать книги
Поскольку Кнут всегда считал «Искусство программирования» основным проектом своей жизни, в 1993 году он вышел на пенсию с намерением полностью сконцентрироваться на написании недостающих частей и приведении в порядок существующих. Он полагал, что на завершение работы потребуется 20 лет.
«Искусство программирования» (англ. The Art of Computer Programming) — фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвященная рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.
Основной чертой монографии Кнута, выгодно отличающей её от других книг, посвящённых программированию, является исключительно высоко поднятая планка качества материала и академичности изложения, а также глубина анализа рассматриваемых вопросов. Благодаря этому она стала настоящим бестселлером и настольной книгой каждого профессионального программиста.
Страх перед формулами — главный барьер. Да, математика там есть, и серьезная: комбинаторика, теория вероятностей, анализ алгоритмов. Кнут не бросает читателя в омут. Он постепенно вводит понятия, обильно сопровождая их примерами и упражнениями (с решениями!). Это не учебник для разгона с нуля, но для человека с базовой университетской подготовкой (или с высокой мотивацией и готовностью гуглить термины) — она доступна. Это математика компьютерной эры, а не абстрактная.
💻 2. А на работе-то пригодится?
Прямой ответ: в повседневной разработке CRUD-приложений вы вряд ли будете вручную выводить сложность сортировки слиянием.
Но косвенно — бесценно. Чтение Кнута — это:
▫️Качка для ума: перестраивает мышление на глубокое понимание почему одна операция быстрее другой.
▫️Фундамент: вы перестаете быть «пользователем» структур данных и алгоритмов, а становитесь тем, кто понимает их изнутри. Это уровень уверенности, который не купишь курсом по «паттернам».
▫️Культурный код: вы начинаете видеть элегантность и красоту в эффективных решениях. Это как разница между ремесленником и архитектором.
🕰 3. А в 2026-то это еще актуально?
Ядро книги — фундаментальные алгоритмы и принципы. Сортировки, поиски, хеширование, работа с деревьями — это «таблица умножения» нашей профессии. Меняются языки, фреймворки, парадигмы, но эти основы — нет.
Более того, в эпоху big data, AI и высоконагруженных систем понимание сложности алгоритмов важнее, чем когда-либо. Кнут учит мыслить эффективно в ресурсоограниченной среде — а это и есть суть программирования.
Это не книга, чтобы «подтянуть JS перед собеседованием». Это — инвестиция в интеллектуальный капитал. Для:
▪️Будущих и настоящих инженеров-алгоритмистов, разработчиков компиляторов, ученых.
▪️Программистов, которые хотят выйти за рамки шаблонной разработки и понять суть вещей.
▪️Любого, кто считает программирование не только ремеслом, но и искусством (судя по названию, сам Кнут так и считал).
А вы заглядывали в «Искусство программирования»? #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62❤48🔥21❤🔥5🤩3✍2⚡1😢1🌚1👾1
📚_Дональд_Кнут_«Искусство_программирования».zip
156.1 MB
📚 Дональд Кнут «Искусство программирования»
📙 Том 1. Основные алгоритмы
Первый том является введением в основные алгоритмы и структуры данных, описывает базовые понятия и методы программирования. Здесь же рассматривается тема представления данных в памяти компьютера и эффективной работы с ними.
Книга изобилует примерами для символьных вычислений, численных методов, методов имитации и многого другого.
Примеры программ написаны на так называемом «MIX-ассемблере» - языке, предназначенном для работы на гипотетическом «MIX-компьютере». В третьем издании устаревший MIX был заменен на MMIX, для которого существует программное обеспечение, обеспечивающее его эмуляцию.
Использование языка низкого уровня отпугивает многих читателей, но сам автор небезосновательно оправдывает свой выбор. Привязка к архитектуре позволяет судить о таких характеристиках алгоритма, как скорость и сложность (т. е. использование памяти).
📙 Том 2. Получисленные алгоритмы
Вторая книга посвящена введению в получисленные алгоритмы. Отдельный раздел посвящен арифметике, случайным числам и алгоритмам их генерации. Даются основы теории получисленных алгоритмов, подкрепленные многочисленными примерами.
Особого упоминания заслуживают предложенная Кнутом в настоящем издании новая трактовка генераторов случайных чисел, а также рассмотрение способов вычислений с помощью формальных степенных рядов.
📙 Том 3. Сортировка и поиск
В третьем томе содержится исчерпывающий обзор классических алгоритмов сортировки и поиска. Этот материал дополняет изложенную в первой части информацию о структурах данных становясь своего рода логическим продолжением первого тома.
Здесь автор рассказывает о внутренней и внешней памяти, о построении больших и малых баз данных и работе с ними. Для всех рассмотренных в книге алгоритмов приводится сравнительный анализ их эффективности. Специальный раздел посвящен методам оптимальной сортировки и описанию новой теории перестановки и универсального хеширования.
📙 Том 4. Комбинированные алгоритмы
Четвертый том сам по себе является многотомником. Комбинаторный поиск — богатая и важная тема, и Кнут приводит слишком много нового, интересного и полезного материала, чтобы его можно было разместить в одном или двух (а может быть, даже в трех) томах. Одна эта книга включает около 1500 упражнений с ответами для самостоятельной работы, а также сотни полезных фактов, которые вы не найдете ни в каких других публикациях. #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
💡 Physics.Math.Code // @physics_lib
📙 Том 1. Основные алгоритмы
Первый том является введением в основные алгоритмы и структуры данных, описывает базовые понятия и методы программирования. Здесь же рассматривается тема представления данных в памяти компьютера и эффективной работы с ними.
Книга изобилует примерами для символьных вычислений, численных методов, методов имитации и многого другого.
Примеры программ написаны на так называемом «MIX-ассемблере» - языке, предназначенном для работы на гипотетическом «MIX-компьютере». В третьем издании устаревший MIX был заменен на MMIX, для которого существует программное обеспечение, обеспечивающее его эмуляцию.
Использование языка низкого уровня отпугивает многих читателей, но сам автор небезосновательно оправдывает свой выбор. Привязка к архитектуре позволяет судить о таких характеристиках алгоритма, как скорость и сложность (т. е. использование памяти).
📙 Том 2. Получисленные алгоритмы
Вторая книга посвящена введению в получисленные алгоритмы. Отдельный раздел посвящен арифметике, случайным числам и алгоритмам их генерации. Даются основы теории получисленных алгоритмов, подкрепленные многочисленными примерами.
Особого упоминания заслуживают предложенная Кнутом в настоящем издании новая трактовка генераторов случайных чисел, а также рассмотрение способов вычислений с помощью формальных степенных рядов.
📙 Том 3. Сортировка и поиск
В третьем томе содержится исчерпывающий обзор классических алгоритмов сортировки и поиска. Этот материал дополняет изложенную в первой части информацию о структурах данных становясь своего рода логическим продолжением первого тома.
Здесь автор рассказывает о внутренней и внешней памяти, о построении больших и малых баз данных и работе с ними. Для всех рассмотренных в книге алгоритмов приводится сравнительный анализ их эффективности. Специальный раздел посвящен методам оптимальной сортировки и описанию новой теории перестановки и универсального хеширования.
📙 Том 4. Комбинированные алгоритмы
Четвертый том сам по себе является многотомником. Комбинаторный поиск — богатая и важная тема, и Кнут приводит слишком много нового, интересного и полезного материала, чтобы его можно было разместить в одном или двух (а может быть, даже в трех) томах. Одна эта книга включает около 1500 упражнений с ответами для самостоятельной работы, а также сотни полезных фактов, которые вы не найдете ни в каких других публикациях. #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
💡 Physics.Math.Code // @physics_lib
👍110🔥31❤26❤🔥5🤝4🌚3⚡2💯2😘2✍1🤩1
Это история о том, как атусайдер стал лидером. Рассмотрим противостояние
Вспомним мрачные времена. Пока Intel выпускала шустрые, но «топтавшиеся на месте» Core i-серии, AMD пыталась продавать свои многоядерные, но отсталые по архитектуре Bulldozer/Excavator.
▪️FX-8350 против Core i7-4770K — это был не бой, а избиение в одно ядро и на ватт.
▪️Доля рынка CPU у AMD упала ниже 15%. Компания была на грани.
▪️Покупатель на PC смотрел только на Intel. Это была фактически монопольная власть.
С приходом Ryzen на микроархитектуре Zen игра изменилась навсегда. AMD сделала ставку на:
▪️Chiplet-подход («чиплеты»). Вместо одного кристалла — несколько маленьких, соединенных скоростной шиной Infinity Fabric. Это дешевле в производстве и позволяет быстро масштабировать ядра.
▪️Много ядер для масс. Intel держала 4-6 ядер для десктопа годами. Ryzen предложил 8, 12, 16 ядер обычным пользователям.
▪️Цена/производительность. За те же деньги — больше ядер и потоков. Это взломало рынок.
🔍 2026 год: насколько AMD преуспела?
К сегодняшнему дню ситуация кардинально изменилась:
▪️Рыночная доля на десктопе и серверах (EPYC) стабильно превышает 50%, а в некоторых сегментах доходит до 70%.
▪️Техпроцесс: Пока Intel билась с собственным 10nm/Intel 7, AMD, благодаря партнерству с TSMC, перешла на 3nm и 2nm техпроцессы раньше конкурента. Энергоэффективность — их конек.
▪️Архитектурный задел: Zen 5 и Zen 6 доказали, что chiplet-подход — это будущее. Intel лишь недавно начала массово внедрять нечто подобное (Tile-архитектура).
▪️Интеграция: Покупка Xilinx сделала AMD лидером в гибридных процессорах (CPU+FPGA), что критически важно для ИИ и дата-центров.
Интересные факты:
▫️Железо: Скорость шины Infinity Fabric в современных чипах AMD сопоставима с оперативной памятью DDR4 начального поколения. Фактически, это сеть на кристалле. Network-on-Chip, NoC — это архитектурный принцип, при котором отдельные блоки внутри процессора (ядра, кэш-память, контроллеры памяти и ввода-вывода) обмениваются данными не через одну общую шину, а через высокоскоростную коммуникационную сеть, встроенную в сам кристалл. Это то, что позволило AMD так эффектно обогнать Intel: они создали не просто процессор, а "многочиповый модуль" (MCM), части которого общаются между собой на скоростях, сопоставимых с оперативной памятью, как равноправные узлы в сети.
▫️Электроника: Битва пакетов (сокетов). Удержание сокета AM4 с 2017 по 2021 годы — гениальный ход маркетинга. Пользователи могли менять 4 поколения CPU без замены материнской платы. Intel меняла сокет чуть ли не каждые два поколения.
▫️Программирование: Революция AMD заставила разработчиков игр и софта наконец-то начать эффективно распараллеливать код. Игры на 8+ потоков стали нормой лишь после прихода многоядерных Ryzen.
▫️Материалы: В погоне за отводом тепла от крошечных 3нм чиплетов, в премиальных СЖО теперь можно найти наноструктурированные поверхности и жидкий металл вместо пасты по умолчанию.
Практическая задача по электронике для наших подписчиков
Внутри центрального процессора. Полный демонтаж процессора IBM Power Processor
GPU и CPU в чем разница между процессорами? Наглядный опыт
🧐 А что если для работы не нужен особо дорогой компьютер?
Как лучше собирать оперативную память, если вам необходим какой-то фиксированный объем RAM, например 32 Гб ?
#hardware #железо #техника #программирование #разработка #development #computer_science
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥106👍57❤51🤨8❤🔥5💯3✍2⚡1😍1👨💻1
Каким кодом вы бы реализовали оптимальное решение данной задачи?
📝 Обсуждаем в комментариях здесь
#программирование #информатика #computer_science #задачи #алгоритмы
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍28❤10🤨10🔥4🤔2🤯2🌚2👨💻2✍1❤🔥1💯1
Представьте: разработчики потратили 50 часов на поиск бага в этом куске кода на C++. Попробуйте найти проблему до того, как дочитаете пост до конца.
if (ch >= 0x0FF00)
{
if (!((ch >= 0x0FF10) && (ch <= 0x0FF19)) ||
((ch >= 0x0FF21) && (ch <= 0x0FF3A)) ||
((ch >= 0x0FF41) && ((ch <= 0x0FF5A)))
{
if (j == 0)
continue;
ch = chx;
}
}
👉 Что пошло не так?
А у вас были подобные ошибки в коде? Расскажите об этом в комментариях. #программирование #C #cpp #задачи #computer_science #разбор_задач
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👻47❤26👍18🔥8👨💻6🗿4🤯3🫡2🤨1
#include <iostream>
using namespace std;
// Надежный способ найти максимум из трех чисел
int findMax(int a, int b, int c) {
// Метод полного перебора всех возможных комбинаций
if(a >= b && a >= c) {
return a;
}
else if(b >= a && b >= c) {
// Дополнительная проверка на всякий случай
if(b >= a) {
if(b >= c) {
return b;
}
}
}
else if(c >= a && c >= b) {
// Проверка через обратную логику
if(!(a > c) && !(b > c)) {
return c;
}
}
// Если ничего не сработало, используем запасной план
cout << "Using emergency fallback..." << endl;
// Сортируем пузырьком для надежности
int arr[3] = {a, b, c};
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2 - i; j++) {
if(arr[j] < arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
// Возвращаем первый элемент после сортировки
// Но на всякий случай проверим еще раз
int max = arr[0];
// Финальная верификация
if(max >= a && max >= b && max >= c) {
return max;
} else {
// Если дошли до сюда, значит что-то пошло не так
// Возвращаем среднее арифметическое
return (a + b + c) / 3;
}
}
int main() {
int x = 10, y = 25, z = 15;
cout << "Maximum of " << x << ", " << y << ", " << z << " is: ";
cout << findMax(x, y, z) << endl;
return 0;
}
#программирование #C #cpp #задачи #computer_science #разбор_задач
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯90❤25🔥20🗿10👍9🤩9🌚8🤷♂7😱5😈3✍2
В контексте рубрики «Кодим на C/C++» раздаём ценные советы в комментариях. С каждого подписчика — по совету!
#программирование #C #cpp #задачи #computer_science #разбор_задач
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤25🔥10😈5👍4👻4🗿4🤯3👨💻1
bool isEven(int x) {
return !(x & 1);
}«Один бит — вся правда. Код для дзен-программистов.»
bool isEven(int x) {
const bool table[] = {true, false, true, false, true, false, true, false};
return table[abs(x) % 8];
}«Табличный метод древних шумеров. 8 значений хватит всем.»
bool isEven(int x) {
int sum = 0;
unsigned int ux = abs(x);
while (ux) {
sum += ux & 1;
ux >>= 1;
}
return !(sum % 2);
}«Считаем единички как настоящие боги битов.»
bool isEven(int x) {
if (x == 0) return true;
if (x == 1) return false;
return isEven(x - 2);
}«Рекурсия — это когда функция вызывает себя, чтобы спросить: "Ну чётное или нет?"»
bool isEven(int x) {
return !(x % 2) ? !(0) : !(1);
}«Логика двойного отрицания для истинных джедаев.»
bool isEven(int x) {
int evens[] = {0,2,4,6,8,10,12,14,16,18,20};
for (int i = 0; i < 11; i++) {
if (abs(x) == evens[i]) return true;
}
return false;
}«Таблица чётности до 20. Для чисел больше — не гарантируем.»
template<int N>
struct EvenChecker {
static constexpr bool value = !(N % 2);
};
bool res = EvenChecker<42>::value;
«Шаблоны времени компиляции для тех, кто считает чётность ещё до запуска программы.»
В контексте рубрики «Кодим на C/C++» раздаём ценные советы в комментариях. С каждого подписчика — по совету!
#программирование #C #cpp #задачи #computer_science #разбор_задач
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🔥25❤23🤯7👻7👨💻5🤨4😱2🗿2😨1🆒1
💾 1,44 МБ против 8 ГБ: почему программисты разучились экономить? 👨🏻💻
Если убрать иронии с картинки, то за юмором скрывается пугающая тенденция и инженерная деградация.
🔹 1990-е: гений в условиях голода
Doom (1993) весил ~2.3 МБ, работал на 386 с 4 МБ ОЗУ. Влезал на дискету. Адресное пространство было жестко ограничено. Программисты вручную оптимизировали ассемблерные вставки, экономили каждый байт, использовали процедурную генерацию текстур, фиксированную математику и кодировали звук с костылями для DMA. Это была инженерия выживания.
🔹 2020-е: CPU как мусорный бак
Пустая страница на React + Recharts + Three.js для трех гифок требует 300 МБ оперативы.
— Абстракции (Webpack, Babel, Virtual DOM) решают проблемы, которые вы сами себе создали.
— node_modules стал кладбищем зависимостей.
— Никто не парится: «у пользователя 8 ГБ, пусть страдает».
Но главное — исчезла культура «профилировать прежде, чем писать».
Потребление ресурсов перестало быть багом. Оно стало фичей железячников. Обновляй MacBook — и форма с двумя инпутами начнет скроллиться плавно.
🔹 2026 (наши дни)
Кнопка «Войти» будет поднимать Kubernetes-кластер из 17 подов, загружать Electron-враппер с браузером внутри и требовать 12 ГБ ОЗУ под серверный Node.js, потому что разработчик забыл выключить --inspect в проде.
А самое смешное — в логах будет висеть ошибка: «Heap out of memory — пожалуйста, обновитесь до iPhone 19 Pro Max».
⚙️ Суть деградации не в лени. А в том, что оптимизация перестала быть критерием качества. Сегодня закрыть issue «тормозит интерфейс» означают «купить более дорогой компьютер», а не «исправить квадратичный алгоритм». Мы променяли оптимизацию под железо на оптимизацию под скорость написания кода. И пока ютуберы тестируют 128 ГБ DDR5 — мы искренне не понимаем, почему на 8 ГБ фризит даже «Блокнот», переписанный на WebAssembly.
▪️Раньше (1990-е): Программист писал код так, чтобы он занимал мало места и быстро работал на слабом железе. Даже если для этого приходилось сидеть неделю, вылизывая каждый байт памяти и каждую инструкцию процессора. Приоритет = экономия ресурсов ПК пользователя.
▪️Сейчас (2020-е): Программист пишет код так, чтобы самому потратить меньше времени и усилий. Ему плевать, что страница будет весить 10 мегабайт и жрать всю оперативку — у пользователя же новый айфон. Приоритет = экономия времени разработчика.
💬 Как вам такое? Согласны, что стандарты упали, или мем преувеличивает? #программирование #оптимизация #рефакторинг #алгоритмы #computer_science #мем
💡 Physics.Math.Code // @physics_lib
Если убрать иронии с картинки, то за юмором скрывается пугающая тенденция и инженерная деградация.
🔹 1990-е: гений в условиях голода
Doom (1993) весил ~2.3 МБ, работал на 386 с 4 МБ ОЗУ. Влезал на дискету. Адресное пространство было жестко ограничено. Программисты вручную оптимизировали ассемблерные вставки, экономили каждый байт, использовали процедурную генерацию текстур, фиксированную математику и кодировали звук с костылями для DMA. Это была инженерия выживания.
🔹 2020-е: CPU как мусорный бак
Пустая страница на React + Recharts + Three.js для трех гифок требует 300 МБ оперативы.
— Абстракции (Webpack, Babel, Virtual DOM) решают проблемы, которые вы сами себе создали.
— node_modules стал кладбищем зависимостей.
— Никто не парится: «у пользователя 8 ГБ, пусть страдает».
Но главное — исчезла культура «профилировать прежде, чем писать».
Потребление ресурсов перестало быть багом. Оно стало фичей железячников. Обновляй MacBook — и форма с двумя инпутами начнет скроллиться плавно.
🔹 2026 (наши дни)
Кнопка «Войти» будет поднимать Kubernetes-кластер из 17 подов, загружать Electron-враппер с браузером внутри и требовать 12 ГБ ОЗУ под серверный Node.js, потому что разработчик забыл выключить --inspect в проде.
А самое смешное — в логах будет висеть ошибка: «Heap out of memory — пожалуйста, обновитесь до iPhone 19 Pro Max».
▪️Раньше (1990-е): Программист писал код так, чтобы он занимал мало места и быстро работал на слабом железе. Даже если для этого приходилось сидеть неделю, вылизывая каждый байт памяти и каждую инструкцию процессора. Приоритет = экономия ресурсов ПК пользователя.
▪️Сейчас (2020-е): Программист пишет код так, чтобы самому потратить меньше времени и усилий. Ему плевать, что страница будет весить 10 мегабайт и жрать всю оперативку — у пользователя же новый айфон. Приоритет = экономия времени разработчика.
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥231💯143👍85❤45😭34🙈9🗿8👏5🌚5👾2✍1
👨🏻💻 Где решать задачи по программированию [Часть 1]
E-olymp — один из крупнейших украинских сайтов для изучения информатики и подготовки к олимпиадам.
HackerRank — это социальная платформа, которая предлагает задания разной сложности по программированию. Запущена платформа была в 2012 году. Сейчас аудитория проекта насчитывает около полутора миллиона пользователей. Статистику по результатам решений заданий своими пользователями ресурс регулярно публикует в виде рейтинга по 50 странам.
Coderbyte — предлагает 200+ соревновательных задач, которые вы можете решать в онлайн-редакторе, используя 10 различных языков программирования. Вы сможете ознакомиться с официальными решениями для некоторых задач, а также найти более 800 тысяч пользовательских решений. Coderbyte рекомендован командами многих известных образовательных курсов по программированию благодаря коллекции задач, полезных для подготовки к собеседованию.
Codewars — предоставляет разработчиками большую коллекцию интересных задач, созданных сообществом платформы. Вы можете выполнять задания непосредственно в online-редакторе, используя один из 20 языков программирования. Зарабатывайте очки и поднимайтесь в рейтинге. Вы можете просмотреть обсуждение как для каждой задачи, так и для пользовательский решений.
CodeFights — платформа, состоящая из коллекции задач, которые можно решать в онлайн-редакторе, и форума пользователей для обсуждения возникающих проблем. Отличительной особенностью является функция «Company Bots». Это возможность конкурировать с «ботами», которые были запрограммированы инженерами крупных технологических компаний. Вы когда-нибудь задумывались, насколько ваши навыки программирования соответствуют стандартам инженеров из Uber, Dropbox, Quora и других высокотехнологичных компаний? Посоревнуйтесь с этими ботами и узнайте. #программирование #оптимизация #рефакторинг #алгоритмы #computer_science #задачи
💡 Physics.Math.Code // @physics_lib
E-olymp — один из крупнейших украинских сайтов для изучения информатики и подготовки к олимпиадам.
HackerRank — это социальная платформа, которая предлагает задания разной сложности по программированию. Запущена платформа была в 2012 году. Сейчас аудитория проекта насчитывает около полутора миллиона пользователей. Статистику по результатам решений заданий своими пользователями ресурс регулярно публикует в виде рейтинга по 50 странам.
Coderbyte — предлагает 200+ соревновательных задач, которые вы можете решать в онлайн-редакторе, используя 10 различных языков программирования. Вы сможете ознакомиться с официальными решениями для некоторых задач, а также найти более 800 тысяч пользовательских решений. Coderbyte рекомендован командами многих известных образовательных курсов по программированию благодаря коллекции задач, полезных для подготовки к собеседованию.
Codewars — предоставляет разработчиками большую коллекцию интересных задач, созданных сообществом платформы. Вы можете выполнять задания непосредственно в online-редакторе, используя один из 20 языков программирования. Зарабатывайте очки и поднимайтесь в рейтинге. Вы можете просмотреть обсуждение как для каждой задачи, так и для пользовательский решений.
CodeFights — платформа, состоящая из коллекции задач, которые можно решать в онлайн-редакторе, и форума пользователей для обсуждения возникающих проблем. Отличительной особенностью является функция «Company Bots». Это возможность конкурировать с «ботами», которые были запрограммированы инженерами крупных технологических компаний. Вы когда-нибудь задумывались, насколько ваши навыки программирования соответствуют стандартам инженеров из Uber, Dropbox, Quora и других высокотехнологичных компаний? Посоревнуйтесь с этими ботами и узнайте. #программирование #оптимизация #рефакторинг #алгоритмы #computer_science #задачи
💡 Physics.Math.Code // @physics_lib
👍27❤21🔥6⚡2🙏1
👨🏻💻 Где решать задачи по программированию [Часть 2]
CodinGame — Этот сайт отличается от перечисленных выше тем, что вместо обычного решения, на CodinGame вы пишете код непосредственно для того, чтобы сыграть в онлайн-игру. Это увлекательно и некоторые из игр очень забавны (см. пример). Игровая графика хороша, а пользовательский интерфейс редактора/игры очень плавный. В целом, это отличный веб-сайт для новичков, изучающих программирование.
TopCoder — одна из первых платформ для соревнований по онлайн-программированию. Популярные Single Round Matches происходят несколько раз в месяц в определенное время. Это возможность посоревноваться с другими разработчиками. Вот несколько тем, которые могут быть затронуты. Помимо решения головоломок для развлечения, предлагаются и соревнования, в которых вы можете выиграть призы от спонсоров (реальных компаний) за лучшее решение.
LeetCode — В LeetCode собрана одна из лучших коллекций задач на применение алгоритмов. Темы, которые охватывают задания, требуют знания структур данных (binary trees, heaps, linked lists, etc.) Задачи более сложные, чем на других сайтах, но они окажутся очень полезными, если использовать их при подготовке к собеседованию. Раздел "Mock Interview" (Пробное интервью) специально предназначен для подготовки к собеседованию. Также проводятся соревнования по программированию, и есть раздел статей, который поможет вам лучше понять определенные задания.
CodeChef — это некоммерческая образовательная инициатива индийской софтверной компании. Это глобальное сообщество программистов, объединенное целью обучения и дружеской конкуренции в рамках платформы для соревновательного программирования. Каждый месяц CodeChef проводит три конкурса и раздает призы победителям в качестве поощрения.
GeeksforGeeks — имеет лучшую коллекцию статей, объяснений и решений по теме алгоритмов и структурам данных. По ссылке вы можете увидеть пример того, как сложный вопрос разбивается на более простые части, объяснение и код решения. Если вы готовитесь к собеседованию, советуем вам использовать этот сайт, чтобы подготовиться и освежить сложные темы в изучении алгоритмов.
Codeforces — российская платформа для соревнований по программированию, на которой регулярно проводятся турниры, в которых участвуют одни из лучших программистов в мире. Если вы начинающий кодер, задания, скорее всего, будут слишком сложны для вас — вот пример из недавнего соревнования. Для решения этих задач обычно требуются передовые знания в области математики и алгоритмов. Цель Codeforces — предложить разработчикам удобную платформу для создания, проведения и обсуждения соревнований по программированию. #программирование #оптимизация #рефакторинг #алгоритмы #computer_science #задачи
💡 Physics.Math.Code // @physics_lib
CodinGame — Этот сайт отличается от перечисленных выше тем, что вместо обычного решения, на CodinGame вы пишете код непосредственно для того, чтобы сыграть в онлайн-игру. Это увлекательно и некоторые из игр очень забавны (см. пример). Игровая графика хороша, а пользовательский интерфейс редактора/игры очень плавный. В целом, это отличный веб-сайт для новичков, изучающих программирование.
TopCoder — одна из первых платформ для соревнований по онлайн-программированию. Популярные Single Round Matches происходят несколько раз в месяц в определенное время. Это возможность посоревноваться с другими разработчиками. Вот несколько тем, которые могут быть затронуты. Помимо решения головоломок для развлечения, предлагаются и соревнования, в которых вы можете выиграть призы от спонсоров (реальных компаний) за лучшее решение.
LeetCode — В LeetCode собрана одна из лучших коллекций задач на применение алгоритмов. Темы, которые охватывают задания, требуют знания структур данных (binary trees, heaps, linked lists, etc.) Задачи более сложные, чем на других сайтах, но они окажутся очень полезными, если использовать их при подготовке к собеседованию. Раздел "Mock Interview" (Пробное интервью) специально предназначен для подготовки к собеседованию. Также проводятся соревнования по программированию, и есть раздел статей, который поможет вам лучше понять определенные задания.
CodeChef — это некоммерческая образовательная инициатива индийской софтверной компании. Это глобальное сообщество программистов, объединенное целью обучения и дружеской конкуренции в рамках платформы для соревновательного программирования. Каждый месяц CodeChef проводит три конкурса и раздает призы победителям в качестве поощрения.
GeeksforGeeks — имеет лучшую коллекцию статей, объяснений и решений по теме алгоритмов и структурам данных. По ссылке вы можете увидеть пример того, как сложный вопрос разбивается на более простые части, объяснение и код решения. Если вы готовитесь к собеседованию, советуем вам использовать этот сайт, чтобы подготовиться и освежить сложные темы в изучении алгоритмов.
Codeforces — российская платформа для соревнований по программированию, на которой регулярно проводятся турниры, в которых участвуют одни из лучших программистов в мире. Если вы начинающий кодер, задания, скорее всего, будут слишком сложны для вас — вот пример из недавнего соревнования. Для решения этих задач обычно требуются передовые знания в области математики и алгоритмов. Цель Codeforces — предложить разработчикам удобную платформу для создания, проведения и обсуждения соревнований по программированию. #программирование #оптимизация #рефакторинг #алгоритмы #computer_science #задачи
💡 Physics.Math.Code // @physics_lib
❤42👍26🔥6😱1🙏1👨💻1
👨🏻💻 Если задача стоит в том, чтобы очистить список от повторяющихся элементов, то начиная с Python 3.7+ появляется интересный лайфхак, когда словари сохраняют порядок вставки.
Рассмотрим на принцип работы такого кода:
1.
2. Поскольку в словаре ключи уникальны, повторяющиеся элементы автоматически схлопываются.
3. Порядок ключей соответствует порядку их первого появления в исходном списке.
4. Затем
Но зачем тогда нужно множество set() ? Здесь сразу проще привести пример:
⚠️ Этот трюк работает только если элементы списка хешируемы (могут быть ключами словаря) — т.е. неизменяемые типы (int, str, tuple) и не работают с изменяемыми типами (list, set, dict).
У кого-то наверняка возникнет вопрос: Мы добавили синтаксический сахар, это же будет работать медленно, верно?
И тут тоже интересный момент. Сравним сложности алгоритмов.
▪️ Классический вариант (O(n²))
— В худшем случае (все элементы уникальны): O(n²).
— На каждом шаге проверка
— Для 10 000 элементов → до 50 миллионов сравнений.
▪️ Короткий вариант (O(n))
—
— Поиск/вставка в словаре: O(1) в среднем
—
⚙️ Тест производительности:
🖥 На моём AMD Ryzen 5 3600X этот код выдает такой результат:
Почему большая разница в производительности?
➖ Проблема классического метода: постоянное сканирование списка при добавлении каждого нового элемента (1-й элемент: 1 проверка, 2-й элемент: 2 проверки, 10000-й элемент: 10000 проверок)
➕ Преимущество словаря: хеш-таблица в памяти, поиск элемента выполняется за постоянное время O(1), а внутренняя структура оптимизирована на уровне C ( не Python циклы). Нет линейного поиска. #программирование #оптимизация #рефакторинг #алгоритмы #computer_science #задачи
💡 Physics.Math.Code // @physics_lib
Рассмотрим на принцип работы такого кода:
1.
dict.fromkeys(lst) создаёт словарь, где каждый элемент списка становится ключом.2. Поскольку в словаре ключи уникальны, повторяющиеся элементы автоматически схлопываются.
3. Порядок ключей соответствует порядку их первого появления в исходном списке.
4. Затем
list() извлекает ключи обратно в список.Но зачем тогда нужно множество set() ? Здесь сразу проще привести пример:
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# Через dict.fromkeys
unique_ordered = list(dict.fromkeys(lst))
print(unique_ordered) # [3, 1, 4, 5, 9, 2, 6]
# Альтернативы: set() - но не сохраняет порядок
unique_unordered = list(set(lst))
print(unique_unordered) # [1, 2, 3, 4, 5, 6, 9] (порядок может быть любым)
lst_with_lists = [[1], [2], [1]] # TypeError: unhashable type: 'list'
# list(dict.fromkeys(lst_with_lists)) # Ошибка!
У кого-то наверняка возникнет вопрос: Мы добавили синтаксический сахар, это же будет работать медленно, верно?
И тут тоже интересный момент. Сравним сложности алгоритмов.
▪️ Классический вариант (O(n²))
unique_items = []
for i in items:
if i not in unique_items:
unique_items.append(i)
print(unique_items)
— В худшем случае (все элементы уникальны): O(n²).
— На каждом шаге проверка
i not in unique_items сканирует уже созданный список.— Для 10 000 элементов → до 50 миллионов сравнений.
▪️ Короткий вариант (O(n))
items = [1, 2, 2, 3, 1]
print(list(dict.fromkeys(items)))
—
dict.fromkeys(items): O(n) - один проход для создания словаря— Поиск/вставка в словаре: O(1) в среднем
—
list(): O(n) - ещё один проходimport timeit
# Подготовка тестовых данных
items = list(range(10000)) + [5000] * 1000 # 11000 элементов
# Классический метод
def classic_method():
unique = []
for i in items:
if i not in unique:
unique.append(i)
return unique
# Dict.fromkeys метод
def dict_method():
return list(dict.fromkeys(items))
# Замер времени
time_classic = timeit.timeit(classic_method, number=100)
time_dict = timeit.timeit(dict_method, number=100)
print(f"Классический: {time_classic:.4f} сек")
print(f"Dict.fromkeys: {time_dict:.4f} сек")
print(f"Dict.fromkeys быстрее в {time_classic/time_dict:.1f} раз")
Классический: 39.9998 сек
Dict.fromkeys: 0.0468 сек
Dict.fromkeys быстрее в 853.9 раз
Почему большая разница в производительности?
➖ Проблема классического метода: постоянное сканирование списка при добавлении каждого нового элемента (1-й элемент: 1 проверка, 2-й элемент: 2 проверки, 10000-й элемент: 10000 проверок)
➕ Преимущество словаря: хеш-таблица в памяти, поиск элемента выполняется за постоянное время O(1), а внутренняя структура оптимизирована на уровне C ( не Python циклы). Нет линейного поиска. #программирование #оптимизация #рефакторинг #алгоритмы #computer_science #задачи
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
❤75👍32🔥19🤯4🤔3😱3🌚2👨💻1🫡1
В этой заметке разберем классический подвох, на котором спотыкаются даже опытные разработчики. Рассмотрим код:
a = [[]] * 3
a[0].append(1)
print(a)
Что будет на выводе в консоли? A)
[[1], [], []] B) [[1]] C) [[1], [1], [1]] D) ОшибкаПравильный ответ:
А если мы увеличим вложенность списков?
a = [[[]]] * 3
a[0].append(1)
print(a)
Что выведет? Подумайте, прежде чем открывать ответ.
Правильный ответ:
📚 Ошиблись? Тогда давайте разбираться. Теория того как работает умножение списков
▪️ 1. Главное правило: Операция
[x] * n работает так: ➖ Создается объект
x➖ Создается список из
n элементов➖ Каждый элемент — это ссылка на один и тот же объект
xЭто называется поверхностным (shallow) копированием.
a = [[]] * 3 Реально в памяти: a = [ссылка_на_список, ссылка_на_список, ссылка_на_список] ▪️ 2. Почему с числами всё проще, а со списками — нет?
b = [1] * 3
b[0] = 5
print(b) # [5, 1, 1] всё работает
Числа — неизменяемые. Когда мы пишем
b[0] = 5, мы не меняем объект 1, а переназначаем ссылку на новый объект 5. Остальные элементы продолжают ссылаться на 1.Со списками иначе:
a = [[]] * 3
a[0].append(1) # МЕНЯЕМ сам объект, а не переназначаем ссылку
Метод
.append() изменяет существующий список, не создавая новый. Поэтому изменения видны через все ссылки.a = [[]] * 3
a[0].append(1)
print(a) # [[1], [1], [1]]
a = [[[]]] * 3
a[0].append(1)
print(a) # [[[], 1], [[], 1], [[], 1]]
a = [[[]]] * 3
a[0][0].append(1) # Два индекса!
print(a) # [[[1]], [[1]], [[1]]]
a = [[[]]] * 3
a[0] = 100 # ПЕРЕНАЗНАЧАЕМ ссылку
print(a) # [100, [[ ]], [[ ]]]
a = [[], [], []] # уже три разных списка
a[0].append(1) # меняем только первый
print(a) # [[1], [], []]
▪️Как создать независимые списки?
a = [[] for _ in range(3)]
a[0].append(1)
print(a) # [[1], [], []]
a = [[[]] for _ in range(3)]
a[0].append(1)
print(a) # [[[], 1], [[]], [[]]]
Глубокое копирование:
import copy
a = [copy.deepcopy([[]]) for _ in range(3)]
Классика циклом:
a = []
for _ in range(3):
a.append([])
1. Умножение списков ≠ создание копий объектов — это создание копий ссылок.
2. Для изменяемых объектов (списки, словари, множества) проблема особенно заметна.
3. Для неизменяемых (числа, строки, кортежи) проблема скрыта, но механизм тот же.
4. Всегда используй генератор списков, если нужны независимые вложенные структуры.
5.
a[0].append() — изменение объекта; a[0] = ... — переназначение ссылки▪️Для проверки понимания задачи. Что выведет этот код?
a = [[0]] * 3
a[1][0] = 5
print(a)
#программирование #python #задачи #алгоритмы #computer_science #собеседования
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤42👍21🔥17🤯12🤔4👻4🗿4⚡1🤩1👨💻1👾1
📚 Искусство программирования / The Art of Computer Programming
💾 Скачать книги
📙 Том 1. Основные алгоритмы.
📙 Том 2. Получисленные алгоритмы.
📙 Том 3. Сортировка и поиск.
📙 Том 4.1. Комбинаторные алгоритмы.
📙 Том 4.2. Генерация всех кортежей и перестановок
📙 Том 4.3 Генерация всех сочетаний и разбиений
📙 Том 4.4 Генерация всех деревьев. История комбинаторной генерации
Поскольку Кнут всегда считал «Искусство программирования» основным проектом своей жизни, в 1993 году он вышел на пенсию с намерением полностью сконцентрироваться на написании недостающих частей и приведении в порядок существующих. Он полагал, что на завершение работы потребуется 20 лет.
«Искусство программирования» (англ. The Art of Computer Programming) — фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвященная рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.
Основной чертой монографии Кнута, выгодно отличающей её от других книг, посвящённых программированию, является исключительно высоко поднятая планка качества материала и академичности изложения, а также глубина анализа рассматриваемых вопросов. Благодаря этому она стала настоящим бестселлером и настольной книгой каждого профессионального программиста. #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
⚠️ UPD: Добавлены книги в лучшем качестве и в PDF 📚
💡 Physics.Math.Code // @physics_lib
💾 Скачать книги
📙 Том 1. Основные алгоритмы.
📙 Том 2. Получисленные алгоритмы.
📙 Том 3. Сортировка и поиск.
📙 Том 4.1. Комбинаторные алгоритмы.
📙 Том 4.2. Генерация всех кортежей и перестановок
📙 Том 4.3 Генерация всех сочетаний и разбиений
📙 Том 4.4 Генерация всех деревьев. История комбинаторной генерации
Поскольку Кнут всегда считал «Искусство программирования» основным проектом своей жизни, в 1993 году он вышел на пенсию с намерением полностью сконцентрироваться на написании недостающих частей и приведении в порядок существующих. Он полагал, что на завершение работы потребуется 20 лет.
«Искусство программирования» (англ. The Art of Computer Programming) — фундаментальная монография известного американского математика и специалиста в области компьютерных наук Дональда Кнута, посвященная рассмотрению и анализу важнейших алгоритмов, используемых в информатике. В 1999 году книга была признана одной из двенадцати лучших физико-математических монографий столетия.
Основной чертой монографии Кнута, выгодно отличающей её от других книг, посвящённых программированию, является исключительно высоко поднятая планка качества материала и академичности изложения, а также глубина анализа рассматриваемых вопросов. Благодаря этому она стала настоящим бестселлером и настольной книгой каждого профессионального программиста. #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍39🔥17❤12👨💻3❤🔥2🤩1
📚_Дональд_Кнут_«Искусство_программирования».zip
156.1 MB
📚 Дональд Кнут «Искусство программирования»
📙 Том 1. Основные алгоритмы
Первый том является введением в основные алгоритмы и структуры данных, описывает базовые понятия и методы программирования. Здесь же рассматривается тема представления данных в памяти компьютера и эффективной работы с ними.
Книга изобилует примерами для символьных вычислений, численных методов, методов имитации и многого другого.
Примеры программ написаны на так называемом «MIX-ассемблере» - языке, предназначенном для работы на гипотетическом «MIX-компьютере». В третьем издании устаревший MIX был заменен на MMIX, для которого существует программное обеспечение, обеспечивающее его эмуляцию.
Использование языка низкого уровня отпугивает многих читателей, но сам автор небезосновательно оправдывает свой выбор. Привязка к архитектуре позволяет судить о таких характеристиках алгоритма, как скорость и сложность (т. е. использование памяти).
📙 Том 2. Получисленные алгоритмы
Вторая книга посвящена введению в получисленные алгоритмы. Отдельный раздел посвящен арифметике, случайным числам и алгоритмам их генерации. Даются основы теории получисленных алгоритмов, подкрепленные многочисленными примерами.
Особого упоминания заслуживают предложенная Кнутом в настоящем издании новая трактовка генераторов случайных чисел, а также рассмотрение способов вычислений с помощью формальных степенных рядов.
📙 Том 3. Сортировка и поиск
В третьем томе содержится исчерпывающий обзор классических алгоритмов сортировки и поиска. Этот материал дополняет изложенную в первой части информацию о структурах данных становясь своего рода логическим продолжением первого тома.
Здесь автор рассказывает о внутренней и внешней памяти, о построении больших и малых баз данных и работе с ними. Для всех рассмотренных в книге алгоритмов приводится сравнительный анализ их эффективности. Специальный раздел посвящен методам оптимальной сортировки и описанию новой теории перестановки и универсального хеширования.
📙 Том 4. Комбинированные алгоритмы
Четвертый том сам по себе является многотомником. Комбинаторный поиск — богатая и важная тема, и Кнут приводит слишком много нового, интересного и полезного материала, чтобы его можно было разместить в одном или двух (а может быть, даже в трех) томах. Одна эта книга включает около 1500 упражнений с ответами для самостоятельной работы, а также сотни полезных фактов, которые вы не найдете ни в каких других публикациях. #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
⚠️ UPD: Добавлены книги в лучшем качестве и в PDF 📚
💡 Physics.Math.Code // @physics_lib
📙 Том 1. Основные алгоритмы
Первый том является введением в основные алгоритмы и структуры данных, описывает базовые понятия и методы программирования. Здесь же рассматривается тема представления данных в памяти компьютера и эффективной работы с ними.
Книга изобилует примерами для символьных вычислений, численных методов, методов имитации и многого другого.
Примеры программ написаны на так называемом «MIX-ассемблере» - языке, предназначенном для работы на гипотетическом «MIX-компьютере». В третьем издании устаревший MIX был заменен на MMIX, для которого существует программное обеспечение, обеспечивающее его эмуляцию.
Использование языка низкого уровня отпугивает многих читателей, но сам автор небезосновательно оправдывает свой выбор. Привязка к архитектуре позволяет судить о таких характеристиках алгоритма, как скорость и сложность (т. е. использование памяти).
📙 Том 2. Получисленные алгоритмы
Вторая книга посвящена введению в получисленные алгоритмы. Отдельный раздел посвящен арифметике, случайным числам и алгоритмам их генерации. Даются основы теории получисленных алгоритмов, подкрепленные многочисленными примерами.
Особого упоминания заслуживают предложенная Кнутом в настоящем издании новая трактовка генераторов случайных чисел, а также рассмотрение способов вычислений с помощью формальных степенных рядов.
📙 Том 3. Сортировка и поиск
В третьем томе содержится исчерпывающий обзор классических алгоритмов сортировки и поиска. Этот материал дополняет изложенную в первой части информацию о структурах данных становясь своего рода логическим продолжением первого тома.
Здесь автор рассказывает о внутренней и внешней памяти, о построении больших и малых баз данных и работе с ними. Для всех рассмотренных в книге алгоритмов приводится сравнительный анализ их эффективности. Специальный раздел посвящен методам оптимальной сортировки и описанию новой теории перестановки и универсального хеширования.
📙 Том 4. Комбинированные алгоритмы
Четвертый том сам по себе является многотомником. Комбинаторный поиск — богатая и важная тема, и Кнут приводит слишком много нового, интересного и полезного материала, чтобы его можно было разместить в одном или двух (а может быть, даже в трех) томах. Одна эта книга включает около 1500 упражнений с ответами для самостоятельной работы, а также сотни полезных фактов, которые вы не найдете ни в каких других публикациях. #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤36🔥24👍12👻2👨💻2🥰1😱1🤩1🤓1