Pull to refresh
54
0
Волосатов Евгений @FFormula

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

Send message

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

Reading time6 min
Views5.6K

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

Читать далее
Total votes 11: ↑9 and ↓2+7
Comments3

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

Reading time4 min
Views28K

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

Читать далее
Total votes 48: ↑45 and ↓3+42
Comments19

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

Reading time5 min
Views166K

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

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

Теория графов
Total votes 20: ↑18 and ↓2+16
Comments8

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

Reading time4 min
Views7.6K

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

Поехали!
Total votes 13: ↑10 and ↓3+7
Comments4

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

Reading time4 min
Views12K

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

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

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

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

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

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

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

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

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

Идеальное хеширование...
Total votes 17: ↑14 and ↓3+11
Comments9

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

Reading time5 min
Views18K

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

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

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

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

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


Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments7

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

Reading time4 min
Views9.3K

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





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


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

Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments9

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

Reading time3 min
Views13K
Добрый день. Эту статью я написал специально для студентов курса «Алгоритмы для разработчиков» в OTUS и сегодня хочу поделиться ею со всеми читателями нашего блога.

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

image

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

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

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

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




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


Читать дальше →
Total votes 33: ↑29 and ↓4+25
Comments29

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

Reading time10 min
Views21K
Хотите озадачить начинающего шахматиста?
Попросите его поставить мат конём и слоном.

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

image

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

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

Reading time5 min
Views30K
Начинающему программисту важно не только изучать теорию и получать необходимые знания, но и практиковать основные навыки создания различных программ. Это особенно актуально для инженеров, студентов и талантливых детей.

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

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

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

Reading time4 min
Views35K
Сейчас очень часто говорят о том, что нынешняя система образования никуда не годится, она лишает детей творческих способностей, у неё низкая эффективность и нужно что-то срочно менять.

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



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

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

Reading time11 min
Views72K
Я с детства люблю не только программировать, но и делиться своими навыками, знаниями, рассказывать про свои программки, объяснять, как они работают, как их создавать.

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

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

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

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

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

image

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

Information

Rating
Does not participate
Location
Висагинас, Литва, Литва
Works in
Date of birth
Registered
Activity