📚 Искусство программирования / 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🔥32❤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
👍29❤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
❤26🔥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❤24🤯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🔥234💯143👍85❤46😭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👍27🔥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
❤76👍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❤43👍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👍40🔥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❤37🔥24👍12👻2👨💻2🥰1😱1🤩1🤓1
📙 Эффективные алгоритмы и сложность вычислений [2008] Кузюрин Н.Н., Фомин С.А.
💾 Скачать книгу
«Эффективные алгоритмы и сложность вычислений» — это серьезный и глубокий учебник, который будет полезен как студентам старших курсов и аспирантам физико-математических и IT-специальностей, так и практикующим разработчикам, желающим систематизировать и углубить свои знания в области сложности алгоритмов. Акцент на современных методах и проблематике делает его актуальным и выделяет среди множества классических учебников по этой теме. #алгоритмы #программирование #подборка_книг #computer_science #IT
💡 Physics.Math.Code // @physics_lib
💾 Скачать книгу
«Эффективные алгоритмы и сложность вычислений» — это серьезный и глубокий учебник, который будет полезен как студентам старших курсов и аспирантам физико-математических и IT-специальностей, так и практикующим разработчикам, желающим систематизировать и углубить свои знания в области сложности алгоритмов. Акцент на современных методах и проблематике делает его актуальным и выделяет среди множества классических учебников по этой теме. #алгоритмы #программирование #подборка_книг #computer_science #IT
💡 Physics.Math.Code // @physics_lib
👍24🙈15❤6🔥3🤷♂1👾1
Эффективные_алгоритмы_и_сложность_вычислений_2008_Кузюрин_Н_Н_,.pdf
4.2 MB
📙 Эффективные алгоритмы и сложность вычислений [2008] Кузюрин Н.Н., Фомин С.А.
Книга Н.Н. Кузюрина и С.А. Фомина «Эффективные алгоритмы и сложность вычислений» представляет собой учебное пособие, написанное по материалам спецкурсов, которые авторы долгие годы читали для студентов 4-го и 6-го курсов Московского физико-технического института (МФТИ) . Это во многом определяет её характер: это не просто справочник, а продуманный курс, предлагающий читателю серьезное погружение в современную теорию алгоритмов.
Главное достоинство и raison d'être данной работы — её акцент на современных подходах к решению вычислительно трудных задач. Авторы не ограничиваются классическими результатами 1960–70-х годов, которые можно найти в большинстве учебников, а вводят читателя в круг актуальных проблем и методов, что и составляет основное отличие этого пособия от традиционных изданий по алгоритмам . Книга дает представление о том, что составляет суть современных научных исследований в области сложности вычислений .
Структурно пособие построено с логической строгостью, характерной для физико-технической школы. Начав с формального определения алгоритмов и моделей вычислений (например, машины с произвольным доступом), авторы переходят к фундаментальным вопросам, таким как сложность в худшем и среднем случае, а также к понятию полиномиальной эффективности . Далее курс углубляется в ключевые темы, представляющие практический и теоретический интерес:
▪️ Аппроксимация с гарантированной точностью: Рассматриваются жадные алгоритмы и алгоритмы с оценками точности для таких задач, как «Покрытие множеств», «Вершинное покрытие» и «Рюкзак». Включен алгоритм Кристофидеса и полностью полиномиальная приближенная схема для задачи о рюкзаке.
▪️ Вероятностный анализ: Отдельное внимание уделено вероятностным алгоритмам и анализу сложности в среднем, включая разбор конкретных задач (упаковка, выполнимость КНФ).
Содержание книги, судя по оглавлению, охватывает более 320 страниц и представляет собой плотный, информативный материал, рассчитанный на подготовленного читателя . Книга рекомендуется студентам и аспирантам, изучающим информатику, теорию алгоритмов и сложность вычислений, и может служить основой для создания наукоемкого программного обеспечения . Отдельного упоминания заслуживает тот факт, что пособие распространяется по свободной лицензии (OPL), а его свежая версия доступна в сети, что делает его ценным ресурсом для широкого круга специалистов. #алгоритмы #программирование #подборка_книг #computer_science #IT
💡 Physics.Math.Code // @physics_lib
Книга Н.Н. Кузюрина и С.А. Фомина «Эффективные алгоритмы и сложность вычислений» представляет собой учебное пособие, написанное по материалам спецкурсов, которые авторы долгие годы читали для студентов 4-го и 6-го курсов Московского физико-технического института (МФТИ) . Это во многом определяет её характер: это не просто справочник, а продуманный курс, предлагающий читателю серьезное погружение в современную теорию алгоритмов.
Главное достоинство и raison d'être данной работы — её акцент на современных подходах к решению вычислительно трудных задач. Авторы не ограничиваются классическими результатами 1960–70-х годов, которые можно найти в большинстве учебников, а вводят читателя в круг актуальных проблем и методов, что и составляет основное отличие этого пособия от традиционных изданий по алгоритмам . Книга дает представление о том, что составляет суть современных научных исследований в области сложности вычислений .
Структурно пособие построено с логической строгостью, характерной для физико-технической школы. Начав с формального определения алгоритмов и моделей вычислений (например, машины с произвольным доступом), авторы переходят к фундаментальным вопросам, таким как сложность в худшем и среднем случае, а также к понятию полиномиальной эффективности . Далее курс углубляется в ключевые темы, представляющие практический и теоретический интерес:
▪️ Аппроксимация с гарантированной точностью: Рассматриваются жадные алгоритмы и алгоритмы с оценками точности для таких задач, как «Покрытие множеств», «Вершинное покрытие» и «Рюкзак». Включен алгоритм Кристофидеса и полностью полиномиальная приближенная схема для задачи о рюкзаке.
▪️ Вероятностный анализ: Отдельное внимание уделено вероятностным алгоритмам и анализу сложности в среднем, включая разбор конкретных задач (упаковка, выполнимость КНФ).
Содержание книги, судя по оглавлению, охватывает более 320 страниц и представляет собой плотный, информативный материал, рассчитанный на подготовленного читателя . Книга рекомендуется студентам и аспирантам, изучающим информатику, теорию алгоритмов и сложность вычислений, и может служить основой для создания наукоемкого программного обеспечения . Отдельного упоминания заслуживает тот факт, что пособие распространяется по свободной лицензии (OPL), а его свежая версия доступна в сети, что делает его ценным ресурсом для широкого круга специалистов. #алгоритмы #программирование #подборка_книг #computer_science #IT
💡 Physics.Math.Code // @physics_lib
👍31❤18🙈13🔥6🗿2👾2🤷♂1🤝1🤗1
📕 Конкретная математика. Математические основы информатики [2010] Грэхем Рональд Л, Кнут Дональд Эрвин, Паташник Орен
📙 Concrete Mathematics: A Foundation for Computer Science [1994] Graham Ronald Lewis; Patashnik, Oren ; Knuth, Donald Ervin
💾 Скачать книги
«Конкретная математика» — это уникальное явление в мире научно-технической литературы. Книга, выдержавшая множество переизданий на английском языке (первое издание вышло в 1988 году, второе — в 1994-м) и переведённая на русский язык сначала издательством «Мир» в 1998 году, а затем — «Вильямс» в 2010-м, давно стала классическим учебником для всех, кто серьёзно занимается информатикой и анализом алгоритмов. Библиотечная комиссия MAA (Mathematical Association of America) считает эту книгу обязательной для библиотек undergraduate-уровня по математике.
Авторский состав говорит сам за себя: Рональд Грэхем — один из крупнейших специалистов в области дискретной математики и теории чисел, Дональд Кнут — легендарный создатель алгоритмической парадигмы и автор монументального труда «Искусство программирования», Орен Паташник — соавтор Кнута по системе вёрстки TeX и известный исследователь в области комбинаторики. Как справедливо замечает один из рецензентов, «Рональд Грэм и Дональд Кнут — это электростанции математики (и информатики)»
#программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
Итоговая оценка: ★★★★★ (5/5) — обязательное чтение для всех, кто серьёзно занимается информатикой.
Авторы сами признают главную проблему своего курса — эклектичность. Книга охватывает столь широкий круг тем, что это может вызвать подозрения в поверхностности — хотя имена авторов и глубина проработки материала эти подозрения развеивают. Книга чрезвычайно сложна. Это не лёгкое чтиво для знакомства с предметом. По отзывам, материал рассчитан на старшекурсников или аспирантов. Один из обозревателей называет её «массивным вызовом для гиков, невероятно сложной, но чрезвычайно поучительной». Билл Гейтс, как говорят, отзывался о ней как о «великой профессиональной книге, без которой математик не может обойтись». Книга предполагает некоторое знакомство с дискретной математикой — она не предназначена для абсолютных новичков. Кроме того, в книге практически нет материала по теории графов (за исключением нескольких примеров), что для некоторых читателей может оказаться неожиданностью.
Книга будет полезна в первую очередь студентам, обучающимся по специальностям «математика» и «информатика», а также всем практикующим программистам и разработчикам алгоритмов, желающим по-настоящему понять математические основы своей профессии.
📚 Искусство программирования / The Art of Computer Programming
💡 Physics.Math.Code // @physics_lib
📙 Concrete Mathematics: A Foundation for Computer Science [1994] Graham Ronald Lewis; Patashnik, Oren ; Knuth, Donald Ervin
💾 Скачать книги
«Конкретная математика» — это уникальное явление в мире научно-технической литературы. Книга, выдержавшая множество переизданий на английском языке (первое издание вышло в 1988 году, второе — в 1994-м) и переведённая на русский язык сначала издательством «Мир» в 1998 году, а затем — «Вильямс» в 2010-м, давно стала классическим учебником для всех, кто серьёзно занимается информатикой и анализом алгоритмов. Библиотечная комиссия MAA (Mathematical Association of America) считает эту книгу обязательной для библиотек undergraduate-уровня по математике.
Авторский состав говорит сам за себя: Рональд Грэхем — один из крупнейших специалистов в области дискретной математики и теории чисел, Дональд Кнут — легендарный создатель алгоритмической парадигмы и автор монументального труда «Искусство программирования», Орен Паташник — соавтор Кнута по системе вёрстки TeX и известный исследователь в области комбинаторики. Как справедливо замечает один из рецензентов, «Рональд Грэм и Дональд Кнут — это электростанции математики (и информатики)»
#программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
Итоговая оценка: ★★★★★ (5/5) — обязательное чтение для всех, кто серьёзно занимается информатикой.
Авторы сами признают главную проблему своего курса — эклектичность. Книга охватывает столь широкий круг тем, что это может вызвать подозрения в поверхностности — хотя имена авторов и глубина проработки материала эти подозрения развеивают. Книга чрезвычайно сложна. Это не лёгкое чтиво для знакомства с предметом. По отзывам, материал рассчитан на старшекурсников или аспирантов. Один из обозревателей называет её «массивным вызовом для гиков, невероятно сложной, но чрезвычайно поучительной». Билл Гейтс, как говорят, отзывался о ней как о «великой профессиональной книге, без которой математик не может обойтись». Книга предполагает некоторое знакомство с дискретной математикой — она не предназначена для абсолютных новичков. Кроме того, в книге практически нет материала по теории графов (за исключением нескольких примеров), что для некоторых читателей может оказаться неожиданностью.
Книга будет полезна в первую очередь студентам, обучающимся по специальностям «математика» и «информатика», а также всем практикующим программистам и разработчикам алгоритмов, желающим по-настоящему понять математические основы своей профессии.
🍩 Для донатов на кофе ☕️: +79616572047 (СБП / ВТБ / OZON) 📚 Искусство программирования / The Art of Computer Programming
💡 Physics.Math.Code // @physics_lib
❤26🔥15👍12🤝3🤯2🤩2
👨🏻💻 Где решать задачи по программированию [Часть 1] ★
E-olymp — один из крупнейших украинских сайтов для изучения информатики и подготовки к олимпиадам.
HackerRank — это социальная платформа, которая предлагает задания разной сложности по программированию. Запущена платформа была в 2012 году. Сейчас аудитория проекта насчитывает около полутора миллиона пользователей. Статистику по результатам решений заданий своими пользователями ресурс регулярно публикует в виде рейтинга по 50 странам.
Coderbyte — предлагает 200+ соревновательных задач, которые вы можете решать в онлайн-редакторе, используя 10 различных языков программирования. Вы сможете ознакомиться с официальными решениями для некоторых задач, а также найти более 800 тысяч пользовательских решений. Coderbyte рекомендован командами многих известных образовательных курсов по программированию благодаря коллекции задач, полезных для подготовки к собеседованию.
Codewars — предоставляет разработчиками большую коллекцию интересных задач, созданных сообществом платформы. Вы можете выполнять задания непосредственно в online-редакторе, используя один из 20 языков программирования. Зарабатывайте очки и поднимайтесь в рейтинге. Вы можете просмотреть обсуждение как для каждой задачи, так и для пользовательский решений.
CodeFights — платформа, состоящая из коллекции задач, которые можно решать в онлайн-редакторе, и форума пользователей для обсуждения возникающих проблем. Отличительной особенностью является функция «Company Bots». Это возможность конкурировать с «ботами», которые были запрограммированы инженерами крупных технологических компаний. Вы когда-нибудь задумывались, насколько ваши навыки программирования соответствуют стандартам инженеров из Uber, Dropbox, Quora и других высокотехнологичных компаний? Посоревнуйтесь с этими ботами и узнайте. #программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
👨🏻💻 Где решать задачи по программированию [Часть 2] ★★
💡 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 #code #математика #math #physics #IT #лекции #видеоуроки
👨🏻💻 Где решать задачи по программированию [Часть 2] ★★
💡 Physics.Math.Code // @physics_lib
❤20👍17🔥5⚡3
👨🏻💻 Где решать задачи по программированию [Часть 2] ★★
CodinGame — Этот сайт отличается от перечисленных выше тем, что вместо обычного решения, на CodinGame вы пишете код непосредственно для того, чтобы сыграть в онлайн-игру. Это увлекательно и некоторые из игр очень забавны (см. пример). Игровая графика хороша, а пользовательский интерфейс редактора/игры очень плавный. В целом, это отличный веб-сайт для новичков, изучающих программирование.
TopCoder — одна из первых платформ для соревнований по онлайн-программированию. Популярные Single Round Matches происходят несколько раз в месяц в определенное время. Это возможность посоревноваться с другими разработчиками. Вот несколько тем, которые могут быть затронуты. Помимо решения головоломок для развлечения, предлагаются и соревнования, в которых вы можете выиграть призы от спонсоров (реальных компаний) за лучшее решение.
LeetCode — В LeetCode собрана одна из лучших коллекций задач на применение алгоритмов. Темы, которые охватывают задания, требуют знания структур данных (binary trees, heaps, linked lists, etc.) Задачи более сложные, чем на других сайтах, но они окажутся очень полезными, если использовать их при подготовке к собеседованию. Раздел "Mock Interview" (Пробное интервью) специально предназначен для подготовки к собеседованию. Также проводятся соревнования по программированию, и есть раздел статей, который поможет вам лучше понять определенные задания.
CodeChef — это некоммерческая образовательная инициатива индийской софтверной компании. Это глобальное сообщество программистов, объединенное целью обучения и дружеской конкуренции в рамках платформы для соревновательного программирования. Каждый месяц CodeChef проводит три конкурса и раздает призы победителям в качестве поощрения.
GeeksforGeeks — имеет лучшую коллекцию статей, объяснений и решений по теме алгоритмов и структурам данных. По ссылке вы можете увидеть пример того, как сложный вопрос разбивается на более простые части, объяснение и код решения. Если вы готовитесь к собеседованию, советуем вам использовать этот сайт, чтобы подготовиться и освежить сложные темы в изучении алгоритмов.
Codeforces — российская платформа для соревнований по программированию, на которой регулярно проводятся турниры, в которых участвуют одни из лучших программистов в мире. Если вы начинающий кодер, задания, скорее всего, будут слишком сложны для вас — вот пример из недавнего соревнования. Для решения этих задач обычно требуются передовые знания в области математики и алгоритмов. Цель Codeforces — предложить разработчикам удобную платформу для создания, проведения и обсуждения соревнований по программированию.#программирование #алгоритмы #подборка_книг #computer_science #code #математика #math #physics #IT #лекции #видеоуроки
👨🏻💻 Где решать задачи по программированию [Часть 1] ★
💡 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 #code #математика #math #physics #IT #лекции #видеоуроки
👨🏻💻 Где решать задачи по программированию [Часть 1] ★
💡 Physics.Math.Code // @physics_lib
👍26❤15🔥9👨💻2