Курсы по программированию

Формула программиста
основатель — Волосатов Евгений Витольдович

Коллекция графа

Мы рассмотрим основные коллекции в языке C#.
Поэкспериментируем с ними, сравним их быстродействие.
Далее, познакомимся с теорией графов. Создадим класс
для представления графа в памяти компьютера.
Сделаем визуальное отображения графа и
составим алгоритмы поиска вширь и глубь,
с использованием коллекций Стек и Очередь.




3,000 руб.


Для подписки на пакет необходимо авторизоваться.

Список уроков | фото | видео

# Название видеоурока Решило Рейтинг Доступ
1 ArrayList 00:12:16 30 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: списку ArrayList 
Сложности: пока все просто 
Комментарии: попробовал метод Reverse для изменения порядка элементов в списке 
2 List 00:12:57 30 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 40 мин. [Показать отчёт]
Научился: List и его методам 
Сложности: тестировать методы list 
Комментарии: Протестировал list.Union - объединяет без повторов, и list.Concat- объединяет с повторами 
3 Array vs List 00:11:04 29 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: сравнивать время выполнения функций 
Сложности: особо ничего 
Комментарии: если сделать просто массив Program[] он также будет быстрее List 
4 ListDictionary 00:15:19 29 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: использовать список ListDictionary для массива двух связанных элементов ключ-значение 
Сложности: новый тип переменной 
Комментарии: для перебора элементов можно вместо foreach использовать IDictionaryEnumerator, но MSDN это не рекомендует 
5 Hashtable 00:11:56 27 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 1 час. 00 мин. [Показать отчёт]
Научился: HashTable, HybridDictionary и их сравнение с ListDictionary 
Сложности: организовать сравнение трех списков 
Комментарии: Не уверен, что я правильно написал функцию сравнения(есть на втором скриншоте). По результатам: ListDictionary лучше при малом количестве элементов и большом количестве словарей, HybridDictionary проигрывает ему после перестроения на 9 элементов. И он очень плох при одном словаре и большом количестве элементов. Для этого лучше использовать Hash- или Hybrid-Dictionary.  
6 BitArray 00:14:00 27 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: использовать BitArray вместо bool[] 
Сложности: особо ничего 
Комментарии: заполнил 2 массива случайными значениями и вывел результат 
7 Граф 00:13:48 27 чел. ★ 4.9 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: Что такое граф и методы его хранения 
Сложности: придумать метод хранения 
Комментарии: Может быть надо хранить как вложенный массив - Массив [int, int[]]. Первый int - для цвета данной вершины, вложенный массив - для перечисления соседей вершины. 
8 Вершины 00:14:15 27 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: писать программу с русскими переменными.  
Сложности: русские переменные 
Комментарии: хранить ребра можно во вложенном словаре? 
9 Рёбра 00:12:47 26 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: формировать вершины и ребра графа 
Сложности: понять кто главнее: вершина или ребро )) 
Комментарии: интересный урок) 
10 Инициация 00:11:15 26 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 40 мин. [Показать отчёт]
Научился: выводить граф на экран 
Сложности: вывести граф 
Комментарии: не очень понял как сделать, вывел лейблы рандомно и соединил их по принципу вершина-смежные вершины. 
11 Отображение 00:16:18 26 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: Графически отображать граф 
Сложности: инициализация графики графа 
Комментарии: Графолизация графа графически графигенна) 
12 Шахматная доска 00:19:58 26 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 50 мин. [Показать отчёт]
Научился: отображать граф шахматной доске 
Сложности: формула размещения лейблов 
Комментарии: =) 
13 Широкий поиск 00:14:59 26 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: прорисовывать очередь в графе по алгоритму 
Сложности: все было просто 
Комментарии: =0 
14 Широкий алгоритм 00:14:12 25 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: алгоритму поиска вширь 
Сложности: ошибка программы 
Комментарии: не понял как исправить 
15 Широкий пошаговый ход 00:11:46 25 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 1 час. 00 мин. [Показать отчёт]
Научился: визуализировать алгоритм графа 
Сложности: сделать принтскрин 
Комментарии: принтскрин смог сделать только при помощи ...телефона, т.к. буфер все время пустой. Программа хоть и использует Thread.Sleep, но зависает в это время. 
16 Визуализация процесса 00:14:07 22 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 20 мин. [Показать отчёт]
Научился: визуализации графа 
Сложности: ничего, я уже выполнил данный урок в предыдущем) 
Комментарии: все еще делаю скриншоты при помощи телефона... 
17 Глубокий поиск 00:09:58 22 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: принципу алгоритма прохода графа "вглубь" 
Сложности: все было просто 
Комментарии: =) 
18 Глубокий алгоритм 00:15:07 22 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: алгоритму поиска вглубь 
Сложности: уже вроде ничего. а не, printscreen! 
Комментарии: каждый урок все новые списки появляются)) теперь вот stack. 
19 ФИНАЛЬНЫЙ УРОК 22 чел. ★ 5 Done
  Отчёт отправил: 4780. Дмитрий Решено за 10 мин. [Показать отчёт]
Научился: Работать со встроенными классами списков, такими как: List, ListDictionary, HashTable, HybridTable. Также основам работы с графами, их заполнению и перебору с использованием списков. 
Сложности: Большое количество новой терминологии и понятий, enumerable и иже с ним. HashTable тоже сложный объект, т.к. там еще хеш-функция внутри и много математики, о которой мало что известно. 
Комментарии: Очень полезный курс. Учитывая, что большинство программ так или иначе работают со списками, то, чтобы не изобретать велосипеды с массивами, хорошо бы сразу знать какие уже классы разработаны.  
  Итого:   19 видеоуроков общей продолжительностью 4 час. 06 мин. 22 чел. ★ 5  
  Финалисты:   Максим,   Alcatraz,   Дмитрий,   Tekashnik,   Denis,   Иван,   Дмитрий 199,   Николай,   Михаил,   Дмитрий,   Ender,   Платон,   Владимир,   Андрей Н.,   Владимир Борисенко,   Максим Лапшинов,   Permitin Alexey,   Новопашин Владимир,   Максим Саратов,   Алексей В.,   Denchik,   Елена .

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Научился: Познакомился с применением на практике различных коллекций (ArrayList, List, ListDictionary, Hashtable и HybridDictionary), а также их встроенных методов . Выяснил, что по скорости обработки различных комбинаций большого кол-ва эл-ов ListDictionary на порядок уступил по времени отработки двум другим классам : Hashtable и HybridDictionary, которые показали практически одинаковые результаты . Применять битовый массив BitArray, а также некоторые его методы на практике . Получил представление о графе и его разновидностях, методах представления, применять русские названия методов , перечисление , узнал об итераторах (yield return). Формировать граф в виде шахматной доски либо опр-ой формы и выводить его на экран с последующим поиском пути Вширь и Вглубь . При этом узнал о специфике применения foreach() и HashTable().
Трудности: При выполнении самостоятельных заданий определиться с вариантом хранения графа { цвета вершин, смежные вершины }, найти причину возникновения Exception-a при отработке foreach() и HashTable(), разобраться с общей логикой работы программы.
Хочу от всей души поблагодарить за коллекционный курс графопостроения ) ! Материала для применения и размышлений - более чем ! После данного курса планирую закончить "Бинарная жизнь" и переключиться на курсы "Игра Сокобан", "Графоциклы", "Итератор" . Конечно же в планах пройти все предложенные курсы на данный момент - главное двигаться дальше .
Научился: На этом курсе мы изучили основные коллекции в С#, сравнили их быстродействие и эффективность. Создали класс для работы с графами и его графическое отображение. Было очень интересно реализовать поиск в ширину и глубину, начиная с ручной разработки алгоритма и заканчивая программной, с использованием очереди и стека. Получили базовые основы по графам, на их основе можно приступать к решению олимпиадных задач.
Трудности: Сложного почти не было. Евгений Витольдович очень ответственно отнесся к подготовке курса.
Я очень рад возможности поработать с этим замечательным курсом. Он мне много дал, трудно переоценить ценность знаний. Хочу особо выделить концовку курса, где пошагово видишь выполнение двух различных способов поиска по графу. Огромное спасибо Евгению Витольдовичу!!!