Как стать автором
Обновить
53
0
Волосатов Евгений @FFormula

Программист и Преподаватель

Отправить сообщение

Шесть картинок, как создать словарь

Время на прочтение 6 мин
Количество просмотров 5.5K

Словарь - это абстрактный тип данных, который связывает ключи со значениями. Его ещё называют ассоциативный массив, карта, таблица символов, коллекция. Будет две статьи на эту тему, где мы покажем шесть картинок / способов реализации словаря, которые отличаются друг от друга по времени работы и по требованию к памяти.

Читать далее
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 3

Способы хранения графа в памяти компьютера

Время на прочтение 4 мин
Количество просмотров 28K

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

Читать далее
Всего голосов 48: ↑45 и ↓3 +42
Комментарии 19

Теория графов. Термины и определения в картинках

Время на прочтение 5 мин
Количество просмотров 159K

В этой статье мы познакомимся с основными терминами и определениями Теории графов. Каждый термин схематично показан на картинках.

Граф - это топологичекая модель, которая состоит из множества вершин и множества соединяющих их рёбер. При этом значение имеет только сам факт, какая вершина с какой соединена.

Теория графов
Всего голосов 20: ↑18 и ↓2 +16
Комментарии 8

Пирамидальная сортировка выбором

Время на прочтение 4 мин
Количество просмотров 7.3K

Один из самых необычных алгоритмов сортировки массива  - это HeapSort, в основе которого лежит алгоритм сортировки выбором, используется структура данных «куча» для быстрого нахождения максимального элемента, а также способ хранения двоичного дерева в линейном массиве. Разберёмся со всем по порядку.

Поехали!
Всего голосов 13: ↑10 и ↓3 +7
Комментарии 4

Идеальное хэширование

Время на прочтение 4 мин
Количество просмотров 12K

Какова сложность поиска элемента по ключу?

Это зависит от того, какую структуру данных использовать.

В односвязном списке - линейная сложность.

В отсортированном массиве или в двоичном дереве поиска - логарифмическая сложность.

В хэш-таблице - сложность константная. Но это в лучшем случае. А в худшем … стремится к линейной…

А можно ли создать идеальную хэш-таблицу, чтобы сложность поиска элемента даже в худшем случае оставалась константной?

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

Идеально! Поговорим о том, как это сделать.

Кстати, на курсе "Алгоритмы и структуры данных" на платформе OTUS у нас есть отдельный модуль, посвящённый вопросам создания хэш-таблиц.

Идеальное хеширование...
Всего голосов 17: ↑14 и ↓3 +11
Комментарии 9

Удаление узлов из красно-чёрного дерева

Время на прочтение 5 мин
Количество просмотров 18K

Удаление узлов из красно-чёрного дерева — непростая задача, поэтому имеет смысл разделить её на несколько частей и рассмотреть каждый случай отдельно.

Использовано изображение портала cartoonbank.ru

В прошлой статье мы рассмотрели правила формирования красно-чёрного дерева поиска и рассмотрели случаи балансировки при добавлении элементов.

Теперь поговорим об удалении элементов.

Возьмём, для примера, вот такое красно-чёрное дерево:


Читать дальше →
Всего голосов 21: ↑21 и ↓0 +21
Комментарии 7

Алгоритм Джонсона на орграфе с отрицательными дугами

Время на прочтение 4 мин
Количество просмотров 9K

Статья подготовлена в преддверии старта курса «Алгоритмы и структуры данных»





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


О, как звучит! Давайте разберём условие задачи по частям.

Читать дальше →
Всего голосов 23: ↑22 и ↓1 +21
Комментарии 9

Ход конём по битам. Шахматный Bitboard

Время на прочтение 3 мин
Количество просмотров 12K
Добрый день. Эту статью я написал специально для студентов курса «Алгоритмы для разработчиков» в OTUS и сегодня хочу поделиться ею со всеми читателями нашего блога.

Шахматный конь стоит на шахматной доске и задумчиво смотрит в шахматную даль.
Сколько разных ходов он может сделать?

image

Хвала изобретателю шахмат, на доске 64 клетки.
Хвала архитектору компьютеров — у типа ulong тоже 64 бита.
Это же надо было случиться такому совпадению!
Напрашивается гениальная идея — хранить всю доску в одном целом числе! Для этого решения существует даже специальный термин — Bitboard — битовая доска.

Так как же быстро найти количество ходов шахматного коня, используя эту идею?
Читать дальше →
Всего голосов 45: ↑43 и ↓2 +41
Комментарии 19

Балансировка красно-чёрных деревьев — Три случая

Время на прочтение 3 мин
Количество просмотров 47K
Двоичные деревья поиска — эта структура данных для хранения элементов с возможностью быстрого поиска. Идея проста и гениальна: «меньше – налево, больше – направо». На этом простота заканчивается и начинаются сложные вопросы балансировки дерева, чтобы оно не превратилось в длинную ветку.




В этой статье мы дадим определение, перечислим правила размещения элементов в красно-чёрном дереве, рассмотрим алгоритм балансировки и закрепим сказанное на примере. Более подробно эту тему, а также другие виды двоичных деревьев поиска мы изучаем на курсе «Алгоритмы для разработчиков».


Читать дальше →
Всего голосов 33: ↑29 и ↓4 +25
Комментарии 29

Мат конём и слоном. База решений

Время на прочтение 10 мин
Количество просмотров 21K
Хотите озадачить начинающего шахматиста?
Попросите его поставить мат конём и слоном.

Хотите озадачить начинающего программиста?
Попросите его рассчитать мат конём и слоном.

image

Шахматные задачи будоражат воображение программиста,
именно поэтому для практической демонстрации комбинаторики
я выбрал самую сложную шахматную задачу из цикла «мат одинокому королю».
Читать дальше →
Всего голосов 40: ↑38 и ↓2 +36
Комментарии 46

Изучение C# — Практический подход

Время на прочтение 5 мин
Количество просмотров 30K
Начинающему программисту важно не только изучать теорию и получать необходимые знания, но и практиковать основные навыки создания различных программ. Это особенно актуально для инженеров, студентов и талантливых детей.

Практическое изучение языка Си шарп

Проблема в том, что для практического опыта недостаточно книжек и научных статей. Для эффективной практической работы требуется регулярное живое общение, интересный учебный план, обратная связь, а также самостоятельные задания с обязательной проверкой, и последовательный доступ к урокам. Речь пойдёт о проекте "Формула программиста".
Читать дальше →
Всего голосов 23: ↑16 и ↓7 +9
Комментарии 21

Об альтернативном образовании вообще и про C# в частности

Время на прочтение 4 мин
Количество просмотров 35K
Сейчас очень часто говорят о том, что нынешняя система образования никуда не годится, она лишает детей творческих способностей, у неё низкая эффективность и нужно что-то срочно менять.

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



У меня есть некоторые свои собственные соображения и наработки для решения этой проблемы в рамках своей специальности — способа изучения языка программирования C#, речь пойдёт о проекте www.videosharp.info
Читать дальше →
Всего голосов 46: ↑34 и ↓12 +22
Комментарии 89

Как я создавал методику изучения C#

Время на прочтение 11 мин
Количество просмотров 72K
Я с детства люблю не только программировать, но и делиться своими навыками, знаниями, рассказывать про свои программки, объяснять, как они работают, как их создавать.

В этом я нашёл своё призвание — мотивировать к изучению программирования.

Я не ставлю своей целью «научить писать программы», потому что этому нельзя научить, этому можно только научиться самостоятельно. Моя цель — сделать этот процесс максимально интересным, увлекательным, захватывающим, организовать «тусовку», сообщество, в котором можно и хочется решать задачи, развивать свои навыки программирования. Общество, в котором можно видеть успехи коллег, чтобы было к чему стремиться, кого обгонять.
Читать дальше →
Всего голосов 51: ↑50 и ↓1 +49
Комментарии 26

Как я писал модуль обновления на C#

Время на прочтение 8 мин
Количество просмотров 44K
Я пишу программы на C# для фирмы, где их использует несколько сотен человек. Время от времени добавляются новые функции и встаёт проблема обновления версий.

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

image

Честно, мне самому не очень нравятся приложения, которые вечно скачивают обновления, но в моём случае проще автоматизировать этот процесс, чем писать должностные инструкции и заставлять коллег скачивать обновления вручную (а потом бегать по всем этажам и делать это самому).
Читать дальше →
Всего голосов 69: ↑33 и ↓36 -3
Комментарии 31

Информация

В рейтинге
Не участвует
Откуда
Висагинас, Литва, Литва
Работает в
Дата рождения
Зарегистрирован
Активность