Структуры данных и проектирование программ [2014, PDF] Р.Л. Круз
#алгоритмы #структуры_данных #программированием
#алгоритмы #структуры_данных #программированием
👍5
Бинарное дерево — проще чем кажется
════════════
https://vk.com/wall-51126445_26348
════════════
#article #программирование #алгоритмы #структуры_данных
════════════
https://vk.com/wall-51126445_26348
════════════
#article #программирование #алгоритмы #структуры_данных
👍1
Структуры_данных_в_C++_2001_В_Форд,_В_Топп.zip
23.1 MB
📔 Структуры данных в C++ [2001] В.Форд, В.Топп
В книге на основе так называемых абстрактных структур данных (ADT) рассматриваются как встроенные, так и определяемые пользователем типы данных в языке C++. Подробно излагаются вопросы организации структур данных для эффективной их обработки методами сортировки и поиска информации, построением стеков, очередей и деревьев. Книга будет интересна всем категориям программистов - от начинающих до профессионалов.
EN: Data structures with C++ [1999] William Ford, William Topp
#c #си #cpp #cplusplus #структуры_данных #программирование
В книге на основе так называемых абстрактных структур данных (ADT) рассматриваются как встроенные, так и определяемые пользователем типы данных в языке C++. Подробно излагаются вопросы организации структур данных для эффективной их обработки методами сортировки и поиска информации, построением стеков, очередей и деревьев. Книга будет интересна всем категориям программистов - от начинающих до профессионалов.
EN: Data structures with C++ [1999] William Ford, William Topp
#c #си #cpp #cplusplus #структуры_данных #программирование
👍3
📘 Введение в программирование и структуры данных [2022] Фислер К., Кришнамурти Ш., Лернер Б. С., Политц Дж. Г.
💾 Скачать книгу
⚙️ Структура данных — это контейнер, который хранит данные в определенном макете. Этот «макет» позволяет структуре данных быть эффективной в некоторых операциях и неэффективной в других.
◾️ Линейные, элементы образуют последовательность или линейный список, обход узлов линеен.
💾 Скачать книгу
⚙️ Структура данных — это контейнер, который хранит данные в определенном макете. Этот «макет» позволяет структуре данных быть эффективной в некоторых операциях и неэффективной в других.
◾️ Линейные, элементы образуют последовательность или линейный список, обход узлов линеен.
Примеры: Массивы. Связанный список, стеки и очереди.
◾️ Нелинейные, если обход узлов нелинейный, а данные не последовательны. Пример: граф и деревья.
📄 Основные структуры данных:🔹 Массивы#программирование #алгоритмы #структуры_данных #информатика
🔹 Стеки
🔹 Очереди
🔹 Связанные списки
🔹 Графы
🔹 Деревья
🔹 Префиксные деревья
🔹 Хэш таблицы
👍49🔥7🤔1
📓 Усовершенствованные структуры данных [2023] Петер Брасс
📘 Advanced Data Structures [2008] Peter Brass
Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать однотипные и/или логически связанные данные. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс. Термин «структура данных» может иметь несколько близких, но тем не менее различных значений:
▪️ Абстрактный тип данных;
▪️ Реализация какого-либо абстрактного типа данных;
▪️ Экземпляр типа данных, например, конкретный список;
▪️ В контексте функционального программирования — уникальная единица (англ. unique identity), сохраняющаяся при изменениях. О ней неформально говорят как об одной структуре данных, несмотря на возможное наличие различных версий.
Структуры данных формируются с помощью типов данных, ссылок и операций над ними в выбранном языке программирования.
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💵 Купить книгу (RU-книга)
💾 Ознакомиться с книгами (RU+EN)
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и админу на кофе:
ЮMoney:
📘 Advanced Data Structures [2008] Peter Brass
Структура данных (англ. data structure) — программная единица, позволяющая хранить и обрабатывать однотипные и/или логически связанные данные. Для добавления, поиска, изменения и удаления данных структура данных предоставляет некоторый набор функций, составляющих её интерфейс. Термин «структура данных» может иметь несколько близких, но тем не менее различных значений:
▪️ Абстрактный тип данных;
▪️ Реализация какого-либо абстрактного типа данных;
▪️ Экземпляр типа данных, например, конкретный список;
▪️ В контексте функционального программирования — уникальная единица (англ. unique identity), сохраняющаяся при изменениях. О ней неформально говорят как об одной структуре данных, несмотря на возможное наличие различных версий.
Структуры данных формируются с помощью типов данных, ссылок и операций над ними в выбранном языке программирования.
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💵 Купить книгу (RU-книга)
💾 Ознакомиться с книгами (RU+EN)
👨🏻💻 Для тех, кто захочет пожертвовать на покупку новых книг и админу на кофе:
ЮMoney:
410012169999048
Карта ВТБ: 4272290768112195
Карта Сбербанк: 2202200638175206
#складчина #программирование #алгоритмы #структуры_данных #математика #дискретная_математика #cpp #си #C👍42🔥14❤6❤🔥2
Язык_С_Мастерство_программирования_2023_RU+EN.zip
30.4 MB
📕 Язык С. Мастерство программирования [2023] Прешерн Кристофер
Авторитетные рекомендации по программированию на C найти трудно. Для объектно-ориентированных языков в них нет недостатка, но для C их на удивление мало. В этой книге начинающие и опытные программисты на C найдут наставления по принятию проектных решений, включая пошаговое применение паттернов к сквозным примерам. Кристофер Прешерн, один из ведущих членов сообщества паттернов проектирования, рассказывает, как организовать программу на C, как обрабатывать ошибки и проектировать гибкие интерфейсы. Ищете ли вы конкретный паттерн или вам нужен обзор проектных решений, относящихся к определенной теме, эта книга будет в помощь. В части I вы научитесь реализовывать проверенные практикой подходы к программированию на языке C; часть II покажет, как паттерны программирования на C применяются к реализации более крупных программ.
📗 Fluent C: Principles, Practices, and Patterns [2022] Christopher Preschern
Expert advice on C programming is hard to find. While much help is available for object-oriented programming languages, there's surprisingly little for the C language. With this hands-on guide, beginners and experienced C programmers alike will find guidance about design decisions, including how to apply them bit by bit to running code examples when building large-scale programs. Christopher Preschern, a leading member of the design patterns community, answers questions such as how to structure C programs, cope with error handling, or design flexible interfaces. Whether you're looking for one particular pattern or an overview of design options for a specific topic, this book shows you how to implement hands-on design knowledge specifically for the C programming language. #программирование #алгоритмы #структуры_данных #cpp #си #C
💡 Physics.Math.Code
Авторитетные рекомендации по программированию на C найти трудно. Для объектно-ориентированных языков в них нет недостатка, но для C их на удивление мало. В этой книге начинающие и опытные программисты на C найдут наставления по принятию проектных решений, включая пошаговое применение паттернов к сквозным примерам. Кристофер Прешерн, один из ведущих членов сообщества паттернов проектирования, рассказывает, как организовать программу на C, как обрабатывать ошибки и проектировать гибкие интерфейсы. Ищете ли вы конкретный паттерн или вам нужен обзор проектных решений, относящихся к определенной теме, эта книга будет в помощь. В части I вы научитесь реализовывать проверенные практикой подходы к программированию на языке C; часть II покажет, как паттерны программирования на C применяются к реализации более крупных программ.
📗 Fluent C: Principles, Practices, and Patterns [2022] Christopher Preschern
Expert advice on C programming is hard to find. While much help is available for object-oriented programming languages, there's surprisingly little for the C language. With this hands-on guide, beginners and experienced C programmers alike will find guidance about design decisions, including how to apply them bit by bit to running code examples when building large-scale programs. Christopher Preschern, a leading member of the design patterns community, answers questions such as how to structure C programs, cope with error handling, or design flexible interfaces. Whether you're looking for one particular pattern or an overview of design options for a specific topic, this book shows you how to implement hands-on design knowledge specifically for the C programming language. #программирование #алгоритмы #структуры_данных #cpp #си #C
💡 Physics.Math.Code
👍76🔥11❤10😍4🤷♂1❤🔥1💯1
👨🏻💻 По просьбам камрадов запускаем складчину на новую книгу по алгоритмам 📖
Тематика книги: Доступное и прекрасно иллюстрированное введение в вероятностные дисковые структуры данных и алгоритмы . Нужно собрать 1600 руб. Как только соберем, то приобретем книгу и выложим.
Новая книга: 📘 Алгоритмы и структуры для массивных наборов данных [2023] Меджедович Дж., Тахирович Э.
(в архив будет добавлена также EN-версия книги)
💡 Как всегда, книга будет предоставлена Вам только для ознакомления и личного пользования без распространения.
Для тех, кто захочет пожертвовать на покупку этой книги:
Карта ВТБ:
Карта Сбербанк:
ЮMoney (яндекс.деньги):
Тематика книги: Доступное и прекрасно иллюстрированное введение в вероятностные дисковые структуры данных и алгоритмы . Нужно собрать 1600 руб. Как только соберем, то приобретем книгу и выложим.
Новая книга: 📘 Алгоритмы и структуры для массивных наборов данных [2023] Меджедович Дж., Тахирович Э.
(в архив будет добавлена также EN-версия книги)
💡 Как всегда, книга будет предоставлена Вам только для ознакомления и личного пользования без распространения.
Для тех, кто захочет пожертвовать на покупку этой книги:
Карта ВТБ:
4272290768112195 ( СБП: +79616572047 )Карта Сбербанк:
2202200638175206 ( СБП: +79026552832 )ЮMoney (яндекс.деньги):
410012169999048
#складчина #алгоритмы #big_data #программирование #python #R #структуры_данных👍73❤16😍3⚡1😢1
📘 Алгоритмы и структуры для массивных наборов данных [2023] Меджедович Дж., Тахирович Э.
📗 Algorithms and Data Structures for Massive Datasets [2022] Dzejla Medjedovic, Emin Tahirovic
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💳 Купить книгу
💾 Ознакомиться с книгами RU+EN
Джейла Меджедович защитила докторскую диссертацию в лаборатории прикладных алгоритмов Университета Стоуни Брук, Нью-Йорк. Эмин Тахирович защитил докторскую диссертацию по биостатистике в Пенсильванском университете. Иллюстратор Инес Дедович защитила докторскую диссертацию в Институте визуализации и компьютерного зрения при Университете Аахена, Германия. #складчина #алгоритмы #big_data #программирование #python #R #структуры_данных
💡 Physics.Math.Code
📗 Algorithms and Data Structures for Massive Datasets [2022] Dzejla Medjedovic, Emin Tahirovic
⚠️ Книги предоставляется вам для ознакомления и не для распространения
💳 Купить книгу
💾 Ознакомиться с книгами RU+EN
Джейла Меджедович защитила докторскую диссертацию в лаборатории прикладных алгоритмов Университета Стоуни Брук, Нью-Йорк. Эмин Тахирович защитил докторскую диссертацию по биостатистике в Пенсильванском университете. Иллюстратор Инес Дедович защитила докторскую диссертацию в Институте визуализации и компьютерного зрения при Университете Аахена, Германия. #складчина #алгоритмы #big_data #программирование #python #R #структуры_данных
💡 Physics.Math.Code
👍70🔥17❤7😍2🗿2❤🔥1🌚1🤝1
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
▪️ Урок 1 Введение
▪️ Урок 2 Динамический массив Stack_Queue и Set
▪️ Урок 3 Алгоритмы сортировки
▪️ Урок 4 Хеш таблицы Деверья
▪️ Урок 5 Бинарное дерево поиска. АВЛ-дерево.
▪️ Урок 6 Графы. Часть 1.
▪️ Урок 7 Графы. Часть 2.
▪️ Урок 8 Графы. Часть 3.
▪️ Урок 9 Динамическое программирование
▪️ Урок 10 Задачи Практикум
#алгоритмы #видеоуроки #программирование #структуры_данных
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍170🔥42❤21❤🔥13🤩8🗿6💯2✍1⚡1
Некоторые структуры данных в программировании:
◾️ Списки. Подходят для хранения и обработки упорядоченных данных. Полезны в управлении задачами, лентах соцсетей и корзинах интернет-магазинов.
◾️ Массивы. Упорядоченная коллекция элементов фиксированного размера. Подходят для ситуаций, где размер коллекции известен или редко меняется.
◾️ Стеки. Следуют принципу «последним пришёл — первым вышел». Используются для реализации операций отмены/повтора в текстовых редакторах или ведения истории просмотров в веб-браузерах.
◾️ Очереди. Работают по принципу «первым пришёл — первым вышел». Подходят для управления заданиями печати, отправки действий пользователя в играх на сервер или обработки сообщений в чат-приложениях.
◾️ Деревья. Организуют данные иерархически. Полезны для представления данных с естественными иерархиями или связями.
◾️ Графы. Состоят из узлов (вершин) и рёбер, соединяющих эти узлы. Используются для моделирования сетей, таких как социальные сети, транспортные сети и компьютерные сети.
◾️ Хэш-таблицы. Позволяют эффективно искать, вставлять и удалять данные. Используют хэш-функцию для сопоставления ключей с соответствующими местами хранения и обеспечивают доступ к сохранённым значениям за постоянное время.
#программирование #разработка #структуры_данных #алгоритмы #IT #computer_science
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍97❤24👨💻9🙈5🌚4✍3🔥2👻2❤🔥1
Есть два самых популярных способа создания строк:
1 —
String s1 = new String("Hello"); 2 —
String s2 = "Hello"; Разберем отличия.
▪️ 1. Место в памяти (Самое главное отличие) — Это отличие является корнем всех остальных различий.
🔸
String s1 = new String("Hello"); (Оператор new) ➖ Создает новый объект в Куче (Heap), независимо от того, какая строка там уже существует.
➖ Каждый вызов new String("Hello") гарантированно создает новый, уникальный объект в памяти.
🔸
String s2 = "Hello"; (Строковый литерал)➖ Строка создается и помещается в специальную область памяти — String Pool (Пул строк), который находится внутри кучи.
➖ Механизм String Pool: Перед созданием новой строки JVM проверяет, нет ли уже строки с таким же значением в пуле. Если есть — переменной просто присваивается ссылка на существующий объект. Если нет — тогда в пуле создается новый объект.
Наглядная аналогия:
➖ new String("Hello") — покупка нового, уникального экземпляра книги, даже если она уже есть в библиотеке.
➖ "Hello" — взятие книги из библиотеки. Если книга есть — вы получаете именно её. Если нет — библиотека сначала покупает новую, а вы её берете.
▪️ 2. Поведение при сравнении (==). Оператор == сравнивает ссылки на объекты, а не их содержимое. Из-за различий в памяти поведение будет разным.
String s1 = new String("Hello");
String s2 = "Hello";
String s3 = "Hello";
System.out.println(s1 == s2); // false
System.out.println(s2 == s3); // true➖ s1 == s2 -> false, потому что s1 ссылается на объект в куче, а s2 — на объект в String Pool. Это два разных объекта в памяти.
➖ s2 == s3 -> true, потому что обе переменные ссылаются на один и тот же объект в String Pool.
Для сравнения содержимого строк всегда используйте метод equals():
System.out.println(s1.equals(s2)); // true (сравнивается содержимое "Hello")
System.out.println(s2.equals(s3)); // true
▪️ 3. Производительность
🔸Строковый литерал ("Hello") — более эффективен. Он избегает создания дубликатов в памяти, что экономит память и ускоряет работу, так как не нужно создавать новый объект, если он уже существует в пуле.
🔸Оператор new — менее эффективен. Он принудительно создает новый объект в куче, даже если идентичная строка уже существует. Это может привести к избыточному расходу памяти.
▪️ 4. Количество создаваемых объектов
🔸
String s1 = new String("Hello"); — Может создать 1 или 2 объекта.➖ 1. Строковый литерал "Hello" сначала ищется в String Pool. Если его нет — он создается в пуле. (Первый возможный объект).
➖ 2. Затем ключевое слово new создает новый объект String в куче. (Второй объект).
Таким образом, если строка "Hello" ранее не существовала в пуле, эта строка кода создаст два объекта.
🔸
String s2 = "Hello";➖ Создает 0 или 1 объект.
➖ JVM ищет "Hello" в String Pool. Если находит — объект не создается, переменной присваивается существующая ссылка (0 новых объектов).
➖ Если не находит — создает новый объект в String Pool (1 новый объект).
▪️Метод intern() — мостик между двумя подходами. Метод intern() позволяет вручную поместить строку из кучи в String Pool или получить ссылку на уже существующую там строку.
String s1 = new String("Hello");
String s2 = s1.intern(); // Помещаем строку в пул (или получаем ссылку из пула)
String s3 = "Hello";
System.out.println(s1 == s2); // false, т.к. s1 все еще в куче
System.out.println(s2 == s3); // true, т.к. s2 и s3 ссылаются на один объект в пулеВ этом примере
s1.intern() находит строку "Hello" в пуле (которая была создана при вычислении литерала внутри конструктора) и возвращает на неё ссылку, которую мы присваиваем s2.Практический вывод: Почти всегда следует использовать строковые литералы (
String s = "value";). Этот способ более эффективен по памяти и времени, так как использует механизм пула строк. #java #задачи #программирование #собеседования #IT #структуры_данных💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤25👍19🔥7✍2👨💻2❤🔥1⚡1
В Java существует важное правило (контракт):
1. Если две строки равны по
equals(), то их hashCode() ДОЛЖЕН быть одинаковым2. Обратное не обязательно верно: одинаковый
hashCode() не гарантирует равенства строкString s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
System.out.println(s1.equals(s2)); // true
System.out.println(s1.hashCode() == s2.hashCode()); // true
System.out.println(s1.equals(s3)); // true
System.out.println(s1.hashCode() == s3.hashCode()); // true
Метод hashCode() в классе String вычисляется на основе содержимого строки:
public int hashCode() {
int h = hash; // кэшированное значение
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}➖ Вычисляется по формуле:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]➖ Результат кэшируется в поле hash для производительности
➖ Для одинакового содержимого всегда одинаковый hashCode, независимо от того, как была создана строка
➖ value и hash — являются полями класса String и уже существуют в объекте, когда вызывается метод hashCode().
value — массив символов, который хранит собственно содержимое строки. Он инициализируется при создании объекта.
String s = "Hello"; // value = {'H', 'e', 'l', 'l', 'o'}hash — поле для кэширования вычисленного хэш-кода. Оно инициализируется по умолчанию значением 0.
Практическое применение в коллекциях: Связь hashCode и equals критически важна для работы хэш-коллекций:
🔸 HashMap/HashSet
Map<String, Integer> map = new HashMap<>();
map.put("Hello", 1);
map.put(new String("Hello"), 2); // Затрет предыдущее значение!
System.out.println(map.size()); // 1 - потому что ключи равны по equals()
1. Сначала сравниваются hashCode() — если разные, объекты точно разные
2. Если hashCode одинаковые, тогда вызывается equals() для точной проверки
🔸 Оптимизация сравнения
String s1 = "very long string ...";
String s2 = "another very long string ...";
// Сначала проверяется hashCode - быстрая операция
if (s1.hashCode() == s2.hashCode() && s1.equals(s2)) {
// Строки точно равны
}
▪️ 1. Коллизии хэшей — Разные строки могут иметь одинаковый hashCode (хэш-коллизия)
String a = "Aa";
String b = "BB";
System.out.println(a.hashCode()); // 2112
System.out.println(b.hashCode()); // 2112
System.out.println(a.equals(b)); // false
▪️ 2. Производительность
// Медленно - создается новый объект и вычисляется hashCode
String s1 = new String("Hello");
// Быстро - используется кэшированный hashCode из String Pool
String s2 = "Hello";
3. String Pool и hashCode
String s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
// Все три имеют одинаковый hashCode, но разные способы создания
System.out.println(s1.hashCode()); // одинаковый
System.out.println(s2.hashCode()); // одинаковый
System.out.println(s3.hashCode()); // одинаковый
🔍 Важные моменты. HashCode тесно связан со сравнением строк через:
1. Контракт Java — равные строки по equals() должны иметь одинаковый hashCode
2.. Оптимизацию сравнения — хэш используется для быстрой предварительной проверки
3. Работу коллекций — HashMap, HashSet и другие используют эту связь для эффективного хранения и поиска
#java #задачи #программирование #собеседования #IT #структуры_данных
💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤24👍19🔥7❤🔥4👨💻3