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

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

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

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




3,000 руб.


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

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

# Название видеоурока Решило Рейтинг Доступ
1 ArrayList 00:12:16 32 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 20 мин. [Показать отчёт]
Научился: Повторил работу со списком ArrayList. Подробнее просмотрел методы этой коллекции. Дополнительно использовал методы: AddRange(), GetRange(), Reverse(). 
Сложности: Ничего 
Комментарии: Хорошо! 
2 List 00:12:57 32 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 40 мин. [Показать отчёт]
Научился: Поработал с созданием коллекций типа List. Дополнительно ознакомился с методами для работы с такой коллекцией: Insert(), Sort(), ForEach(delegate) 
Сложности: Пришлось дополнительно искать и читать как работать с методом ForEach(delegate) 
Комментарии: Замечаний нет 
3 Array vs List 00:11:04 31 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 40 мин. [Показать отчёт]
Научился: Явно проверил скорость работы программы с разными типами коллекций. Придумал свой набор операций с типом ArrayList. Для этого создал первый ArrayList в котором хранятся значения трех разных типов (int, double, String), затем при заполнении основной коллекции ArrayList с помощью генератора случайных чисел заполняю коллекцию в цикле обьектами разных типов. Результат налицо - время работы с такой коллекцией ЗНАЧИТЕЛЬНО больше чем с однотипными!!! 
Сложности: Придумать свой набор операций для демонстрации! 
Комментарии: Очень интересно! 
4 ListDictionary 00:15:19 31 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 35 мин. [Показать отчёт]
Научился: Познакомился с ListDictionary впервые. Разобрался как хранятся пара ключ-значение в памяти (получаются два обычных массива). Поработал с методами коллекции. Дополнительно применил методы Contains(), Remove(). 
Сложности: В принципе ничего 
Комментарии: Отлично! 
5 Hashtable 00:11:56 30 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 40 мин. [Показать отчёт]
Научился: Ознакомился и поработал с новыми коллекциями Hashtable, HybrideDictionary, разобрался с тем как они располагаются в памяти. Наконец-то понял, что такое вообще hash и откуда он берется))) 
Сложности: При подборе количества итераций цикла (100000) в ListDictionary комп висит - поэтому ограничился 10000! 
Комментарии: Нет 
6 BitArray 00:14:00 30 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 40 мин. [Показать отчёт]
Научился: Познакомился с BitArray. Использовал встроенные методы этой коллекции. 
Сложности: ничего. 
Комментарии: Кстати, используя булевские методы для коллекции обнаружил, что применяя bit1.And(bit2) на самом деле изменяются значения в массиве bit1 поэтому необязательно задавать третий массив bit! 
7 Граф 00:13:48 30 чел. ★ 4.9 Done
  Отчёт отправил: 6282. Михаил Решено за 1 час. 00 мин. [Показать отчёт]
Научился: кратко повторил знания о графах. 
Сложности: После долгих раздумий пришел к выводу, что можно использовать что-то типа Dictionary> для хранения номера вершины и смежных к ней вершин соответственно.  
Комментарии: Не понял в конце урока что означает нужно хранить цвета вершин и список ребер? Т.е. коллекция типа Dictionary где 0-RED, 1-BLACK, 2-WHITE и другая типа Dictionary концы ребер? А потом все в еще более сложную коллекцию? Что-то у меня слишком сложно получается... (вернее не получается) 
8 Вершины 00:14:15 30 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 30 мин. [Показать отчёт]
Научился: Начал создание класса для представления графа. 
Сложности: Ничего 
Комментарии: Для хранения ребер использовать Список списков..... 
9 Рёбра 00:12:47 29 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 35 мин. [Показать отчёт]
Научился: Ознакомился с коллекцией Dictionary, доработал класс Graph для работы с ребрами. 
Сложности: Понимание алгоритма проверок условий существования вершин и ребер при создании графа. 
Комментарии: Замечаний нет 
10 Инициация 00:11:15 29 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 40 мин. [Показать отчёт]
Научился: Создал экземпляр класса граф, просмотрел его состояние в памяти ПК. 
Сложности: Ничего 
Комментарии: Спасибо - интересно! Возникло желание найти способ отображения графов на форме, такие как на рисунке, читаю инфу на codeplex, пока не разобрался... 
11 Отображение 00:16:18 29 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Написал функции для вывода графа на форму (и вершин и ребер)!  
Сложности: Не запутаться в обилии похожих по названию функций и переменных))) 
Комментарии: Нормально! 
12 Шахматная доска 00:19:58 29 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 1 час. 00 мин. [Показать отчёт]
Научился: Создал граф шахматной доски. Повторил все шаги по выводу графа на экран. 
Сложности: Тройные циклы путают.... 
Комментарии: Замечаний нет 
13 Широкий поиск 00:14:59 29 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 40 мин. [Показать отчёт]
Научился: Пытался разобраться в алгоритме поиска в ширину. 
Сложности: Разобраться в алгоритме конкретно для своего графа - слишком сложным я его нарисовал. 
Комментарии: Не совсем понял, если в моем графе вершины соединены многократно и например алгоритм опять выходит на вершину с №5 (например) включать ее в очередь или нет (она помечена как пройденная)... 
14 Широкий алгоритм 00:14:12 28 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 40 мин. [Показать отчёт]
Научился: реализовал алгоритм поиска вширь в коде нового класса. 
Сложности: Разобраться - почему не работает??? 
Комментарии: Замечаний нет 
15 Широкий пошаговый ход 00:11:46 28 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 30 мин. [Показать отчёт]
Научился: Сначала не понял, о какой ошибке в Hashtable идет речь, но потом вспомнил о том как хранит эта коллекция свои элементы (размещая в случайном порядке) и вот стало понятно почему сломалось... 
Сложности: После просмотра урока - ничего))) 
Комментарии: Замечаний нет. 
16 Визуализация процесса 00:14:07 24 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 30 мин. [Показать отчёт]
Научился: На этом уроке реализовал визуализацию алгоритма поиска вширь на графе. Для этого понадобилось добавить поле типа delegate в класс Graph, а затем реализовать функцию в коде программы для раскраски вершин графа. 
Сложности: Ничего 
Комментарии: Многократно пытался сделать PrintScreen работающей программы - все время получался отработанный вариант(когда все вершины уже черные). Потом мысль "О, опять этот один поток в программе....", надо было активировать окно другой программы или рабочий стол. 
17 Глубокий поиск 00:09:58 24 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 30 мин. [Показать отчёт]
Научился: Познакомился с алгоритмом поиска вглубь. Нарисовал свой граф, проработал алгоритм на примере нового графа. 
Сложности: Ничего. 
Комментарии: Нет замечаний - все понятно. 
18 Глубокий алгоритм 00:15:07 24 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 15 мин. [Показать отчёт]
Научился: Реализовал алгоритм обхода вершин графа методом поиска вглубь. Для этого потребовалось минимум усилий (скопировать алгоритм обхода вширь и внести несколько исправлений), и ... все отлично работает!!! 
Сложности: Ничего. 
Комментарии: Спасибо, Евгений Витольдович, за курс!!! 
19 ФИНАЛЬНЫЙ УРОК 24 чел. ★ 5 Done
  Отчёт отправил: 6282. Михаил Решено за 5 мин. [Показать отчёт]
Научился: На данном курсе я ознакомился и реализовал на практике алгоритмы обхода вершин графа (заодно систематизировал свои первоначальные знания о графах, которые немного подзабыл). Очень эффектно выглядит, когда реализованный функционал в коде становится наглядным и визуализируется. Так лучше понимаешь то, что не смог понять в тексте алгоритма и в коде. 
Сложности: Самым сложным все равно остается понимание работы с итераторами (IEnumerable, IEnumerator, yield). До конца не уверен, что смогу сам реализовать такой подход в другом проекте (решается только практикой). 
Комментарии: Меня очень интересует тема визуализации данных и процессов. Очень хочется понять как например реализуется графический эквалайзер в проигрывателях музыки (прыгающие уровни ползунков, не говоря уже о полноценных образах) 
  Итого:   19 видеоуроков общей продолжительностью 4 час. 06 мин. 24 чел. ★ 5  
  Финалисты:   Максим,   Alcatraz,   Дмитрий,   Tekashnik,   Denis,   Иван,   Дмитрий 199,   Николай,   Михаил,   Дмитрий,   Ender,   Платон,   Владимир,   Андрей Н.,   Владимир Борисенко,   Максим Лапшинов,   Permitin Alexey,   Новопашин Владимир,   Максим Саратов,   Алексей В.,   Den Andreevich,   Елена,   Станислав,   Сергей Соколов .

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Составлять отзывы
Курс ОЧЕНЬ понравился. Расставил все точки над i в понимании работы с графами. Дальше - Бурные потоки.
Научился: Стал лучше разбираться в коллекциях C#. Алгоритмы поиска на графах могу пройти вручную без компьютера ;)
Трудности: Не все получалось с первого раза, были ошибки и озарения.
Курс очень понравился своей проработанностью и вниманием к деталям, теперь я уверенно буду использовать коллекции наряду с массивами. Очень рекомендую этот курс всем кто хочет разбираться в сложных структурах данных. Очень понравилась визуализация! Спасибо за так великолепно поданный, не очень простой материал, узнал много нового, а алгоритмы поиска имеют очень много применений!