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

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

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

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




2,000 руб.


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

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

# Название видеоурока Решило Рейтинг Доступ
1 ArrayList 00:12:16 29 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: ArrayList не использовал ранее, а использовал дженерик List, но все равно полезно для понимания Узнал что при добавлении элементов, фактическое содержание увеличивается в 2 раза 
Сложности: найти изначальную емкость пустого ArrayList = 16  
Комментарии: LastIndexOf возвращает номер позиции 
2 List 00:12:57 29 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: ходить по коллекции используя свойство перечислителя MoveNext 
Сложности: не было 
Комментарии: попробовал использовать метод ConvertAll, работает через делегат Converter. сконвертировал исходный лист из int в long 
3 Array vs List 00:11:04 28 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: наглядно увидел в сравнении скорость работы массива, arrayList и типизированного листа массив самый быстрый(но у него есть преимущество, задан размер ), второй типизированный лист и последний - arrayList 
Сложности: не было 
Комментарии: сравнил также метод Clear, естественно работает быстрее у типизированного List 
4 ListDictionary 00:15:19 28 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: познакомился с ListDictionary, применять его можно, при небольшом кол-ве элементов. в ListDictionary хранятся ключ и значение. также можно обращаться и по индексатору  
Сложности: не было 
Комментарии: попробовал функцию Contains содержит ли коллекция искомый ключ 
5 Hashtable 00:11:56 27 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: ListDictionary рекомендуется для коллекций не более 10 элементов Hashtable коллекция упорядоченная по хэш коду, рекомендуется использовать для быстрого поиска HybridDictionary до небольшого кол-ва элементов это ListDictionary, после прохождения контрольной точки (по умолчанию 8) , работает как HashTable 
Сложности: не было 
Комментарии: по добавлению элементов самый медленный ListDictionary, Hashtable c HybridDictionary примерно одинаково, но Hashtable немного-немного медленнее (пробовал при кол-ве элементов 60 000)  
6 BitArray 00:14:00 27 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: BitArray массив для хранения логических значений. Ознакомился с операндом Xor (истина 0 1, 1 0. все остальное ложно ) 5110 байт для 40 000 элементов 
Сложности: не было 
Комментарии: выбрал метод And (логическое умножение) 
7 Граф 00:13:48 27 чел. ★ 4.9 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: стыдно сказать, но не знал что такое граф 
Сложности: не было 
Комментарии: можно хранить в дженерике Dictionary и в нем еще один дженерик List: Dictionary> dict = new Dictionary>(); заполнение очевидное , где ключ Dictionary это вершина, List связанные с ключом другие вершины 
8 Вершины 00:14:15 27 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: не совсем к теме урока относится, но попробовал благодарю занятию... в hashtable храняться object, и нельзя использовать как дженерик коллекцию 
Сложности: не было 
Комментарии: ребра можно также хранить в hashtable (вершина1, вершина2 ) только при поиске проверять содержания не только по ключу но и менять местами на значение, т.е. чтоб не дублировать ребра 
9 Рёбра 00:12:47 26 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: ничему, коллекцию в коллекции предложил использовать на предыдущем уроке Dictionary
Сложности: не было 
Комментарии: при заполнении графа дописал новый метод, который добавляет к одной вершине несколько вершин (из int массива) 
10 Инициация 00:11:15 26 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: ничему 
Сложности: не было, если граф правильно нарисован... 
Комментарии: все ок 
11 Отображение 00:16:18 26 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 20 мин. [Показать отчёт]
Научился: ничему 
Сложности: не было  
Комментарии: все ок 
12 Шахматная доска 00:19:58 26 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: иницилизировать шахматный граф 
Сложности: не было 
Комментарии: все ок 
13 Широкий поиск 00:14:59 26 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: проходить граф 
Сложности: не было 
Комментарии: все ок 
14 Широкий алгоритм 00:14:12 25 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: если меняется элемент коллекции и используем перечеслитель выходит exception 
Сложности: не было 
Комментарии: поменял hashtable на типизированный Dictionary у "Вершин", и в перечислителе преобразовал вершины.ToArray() стало компилироваться 
15 Широкий пошаговый ход 00:11:46 25 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 20 мин. [Показать отчёт]
Научился: ошибка исправил сам ранее 
Сложности: не было, за визуализацию не взялся 
Комментарии: все ок 
16 Визуализация процесса 00:14:07 22 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: Увидел отличный пример использования делегата, вызов функции с WindowsForm в другом невизуальном классе классе  
Сложности: все понятно 
Комментарии: все ок 
17 Глубокий поиск 00:09:58 22 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 20 мин. [Показать отчёт]
Научился: Проходить граф вглубь 
Сложности: не было 
Комментарии: все ок 
18 Глубокий алгоритм 00:15:07 22 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 30 мин. [Показать отчёт]
Научился: впервые использовал стек 
Сложности: не было 
Комментарии: все ок 
19 ФИНАЛЬНЫЙ УРОК 22 чел. ★ 5 Done
  Отчёт отправил: 8959. Максим Саратов Решено за 10 мин. [Показать отчёт]
Научился: узнал что такое граф, научился проходить его в глубину используя очередь, в ширину используя стек. Понял что из коллекций нужно использовать типизированные (быстрее работаю, нет упаковки-распаковки) т.е. ключ-значение Dictionary, просто значение HashSet. С остальными думаю можно не заморачиваться, а для хранения логических значений использовать BitArray  
Сложности: не было 
Комментарии: отличный, доходчивый курс 
  Итого:   19 видеоуроков общей продолжительностью 4 час. 06 мин. 22 чел. ★ 5  
  Финалисты:   Максим,   Alcatraz,   Дмитрий,   Tekashnik,   Denis,   Иван,   Дмитрий 199,   Николай,   Михаил,   Дмитрий,   Ender,   Платон,   Владимир,   Андрей Н.,   Владимир Борисенко,   Максим Лапшинов,   Permitin Alexey,   Новопашин Владимир,   Максим Саратов,   Алексей В.,   Denchik,   Елена .

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Я, как обычно, не многословно. Очень хороший курс. Узнал про коллекции. Научился тестировать их на быстродействие. Теперь буду выбирать между массивами и различными видами списков осознанно, использовать то что лучше для какого-либо случая. Узнал как устроены графы. Что они должны уметь и какой смысл несут. Хоть мы и не охватили эту тему полностью. Наверно чтобы это сделать надо потратить не один месяц или даже год. Узнал про два метода поиска по графам. Во время обучения были использованы перечисления и какие подводные камни есть у некоторых коллекций при работе с итераторами. Курс стоит своих денег.
Трудности: 

Научился: На этом курсе мы изучили основные коллекции в С#, сравнили их быстродействие и эффективность. Создали класс для работы с графами и его графическое отображение. Было очень интересно реализовать поиск в ширину и глубину, начиная с ручной разработки алгоритма и заканчивая программной, с использованием очереди и стека. Получили базовые основы по графам, на их основе можно приступать к решению олимпиадных задач.
Трудности: Сложного почти не было. Евгений Витольдович очень ответственно отнесся к подготовке курса.
Я очень рад возможности поработать с этим замечательным курсом. Он мне много дал, трудно переоценить ценность знаний. Хочу особо выделить концовку курса, где пошагово видишь выполнение двух различных способов поиска по графу. Огромное спасибо Евгению Витольдовичу!!!