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

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

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

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




3,000 руб.


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

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

# Название видеоурока Решило Рейтинг Доступ
1 ArrayList 00:12:16 30 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 5 мин. [Показать отчёт]
Научился: Узнавать реальный размер ArrayList 
Сложности: ничего 
Комментарии: Пока ничего нового =) 
2 List 00:12:57 30 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Ничего 
Комментарии: А почему сразу не воспользоваться foreach?  
3 Array vs List 00:11:04 29 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 10 мин. [Показать отчёт]
Научился: List работает быстрее ArrayList, переменные типа double числа можно делить на 0 
Сложности: ничего 
Комментарии: Ого, прикольно. Оказывается 1.0/0 = бесконечность. Я думал вообще ничего на ноль делить нельзя =) ПС: Чтобы постоянно не писать sw.Reset(); sw.Start(); Можно писать sw.Restart(); 
4 ListDictionary 00:15:19 29 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 15 мин. [Показать отчёт]
Научился: Dictionary - лучший способ хранения пары ключ-значение 
Сложности: Ничего 
Комментарии: Так, а почему вы не использовали Dictionary? Я всегда использовал его в таких случаях, и за счёт того, что мы заранее знаем типы данных (что, как я думаю, бывает почти всегда), он работает быстрее, чем все предложенные вам варианты (результаты тестов на скриншоте). И ещё вопрос: что можно использовать, чтобы связать два уникальных объекта, то есть не ключ-значение, а ключ-ключ или как-то так. Чтобы я мог получить 1-й ключ, зная второй и 2-й зная первый. 
5 Hashtable 00:11:56 27 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Ничего 
Комментарии: Так, я видимо на прошлом уроке сделал больше, чем нужно =) Так что, скриншот не меняется. Кстати, оказывается HybridDictionary на порядок круче даже Hashtable. Dictionary всё же быстрее него, но там-то мы указываем тип данных. 
6 BitArray 00:14:00 27 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 15 мин. [Показать отчёт]
Научился: Работать с BitArray 
Сложности: Ничего 
Комментарии: Прикольно, не знал о нём. Порылся по методам, вроде всё понятно, так что просто сделал то, что было на уроке 
7 Граф 00:13:48 27 чел. ★ 4.9 Done
  Отчёт отправил: 9567. Максим Решено за 10 мин. [Показать отчёт]
Научился: Виды графов 
Сложности: Придумать способ хранения графа 
Комментарии: Уф. Как-то я не очень хорош в хранении графов =) Лучшее, что смог придумать: вершина - ключ, соединённые с ней вершины - значение (например, массив int). Да, буде куча дублирующиеся информации, но лучше ничего не придумал =) ПС: Я это написал до того, как посмотрел вторую половину урока. Можно создать структуру: вершина и чтобы она содержала ссылки на другие вершины с которыми оно соединена и значение закрашена она или нет. (в C# же можно хранить ссылку на объект, а не его копию?) Кстати, покажите класс для хранение графов от microsoft? 
8 Вершины 00:14:15 27 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 20 мин. [Показать отчёт]
Научился: Пока ничему, но чувствую, скоро всё станет на свои места =) 
Сложности: Переписывать русские названия на английском =) 
Комментарии: Я всё таки остановлюсь на Dictionary (вместо Hashtable). Не знаю, почему вы его не выбрали... 
9 Рёбра 00:12:47 26 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 15 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Ничего 
Комментарии: О, Dictionary, теперь я рад жизни =) А почему мы его для вершин не использовали? 
10 Инициация 00:11:15 26 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 20 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Вывести граф 
Комментарии: Пришлось немного симпровизировать, но для чернового варианта пойдёт =) 
11 Отображение 00:16:18 26 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Ничего 
Комментарии: Ну, я только по центру линии выровнял и координаты прописал, и получилось тоже самое =) Я наверное уже ван надоел, но почему List
12 Шахматная доска 00:19:58 26 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 15 мин. [Показать отчёт]
Научился: Очищать conrol от рисунков (серьёзно, до этого момента я понятия не имел, как это делать) 
Сложности: Ничего 
Комментарии: Всё классно 
13 Широкий поиск 00:14:59 26 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 5 мин. [Показать отчёт]
Научился: Вспомнил алгоритм поиска в ширину  
Сложности: Ничего 
Комментарии: Всё хорошо =) 
14 Широкий алгоритм 00:14:12 25 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 15 мин. [Показать отчёт]
Научился: Перебирать коллекцию во время её изменения 
Сложности: Ничего 
Комментарии: Я запустил пошагово и убедился, что мы изменяем коллекцию (о чём и говорилось в ошибке). Так что я просто заменил foreach на for (нам же никто не говорил, что вершины нужно возвращать в каком-то определённом порядке), таким образом перебор выполняется по индексу элемента коллекции и ошибка не возникает =) 
15 Широкий пошаговый ход 00:11:46 25 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 10 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Ничего 
Комментарии: Ну хорошо, для Hashtable это бы не сработало (там у элементов индексы меняются), но вы сами разрешили мне использовать Dictionary, где такого вроде не происходит =) Так что в моём случае это было простое правильное решение =) Да, сначала сохранять ключи - хорошая идея, но если бы вы сразу использовали Dictionary, то вам бы просто это было бы лишним (и память сэкономили бы) =) 
16 Визуализация процесса 00:14:07 22 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 15 мин. [Показать отчёт]
Научился: Наслаждаться поиском в ширину 
Сложности: Ничего 
Комментарии: Ого, я знаю что-то, чего не знаете вы =) Просто вместо panel1.Refresh(); Напишите Application.DoEvents(); И программа сама отобразит своё текущее состояние (и не нужно вообще ничего перерисовывать). =) 
17 Глубокий поиск 00:09:58 22 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 10 мин. [Показать отчёт]
Научился: Вспомнил поиск в глубину 
Сложности: Ничего 
Комментарии: Вроде всё повторил, но как-то не очень получилось =) Блин, действительно классно. Использовать рекурсивныый алгоритм без рекурсии. 
18 Глубокий алгоритм 00:15:07 22 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 5 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Ничего 
Комментарии: Мне пришлось ждать день (буквально), чтобы открылся доступ к этому уроку, какое-то это неправильное ограничение... Пока я ждал, я сам реализовал этот алгоритм и доработал предыдущий, чтобы он обновлял граф только когда сделает один полный шаг (а то у нас получалось, сначала эта "волна" идёт на клетку влево, потом вверх и т.д.) и возвращал количество сделанных шагов (как показано на скриншоте). А так, курс понравился =) Узнал о паре новых коллекций, сравнил скорость их работы и не только вспомнил теорию графов, но и реализовал наглядное отображение поиска в ширину и глубину. 
19 ФИНАЛЬНЫЙ УРОК 22 чел. ★ 5 Done
  Отчёт отправил: 9567. Максим Решено за 10 мин. [Показать отчёт]
Научился: Узнал о паре новых коллекций, сравнил скорость их работы и не только вспомнил теорию графов, но и реализовал наглядное отображение поиска в ширину и глубину. 
Сложности: Ничего 
Комментарии: Мне всё понравилось =) Особенно часть, где ты видишь, как написанный тобой код пошагово показывает тебе работу различных способов поиска по графу. А кто не любит, когда работу программу можно буквально увидеть своими глазами? =) 
  Итого:   19 видеоуроков общей продолжительностью 4 час. 06 мин. 22 чел. ★ 5  
  Финалисты:   Максим,   Alcatraz,   Дмитрий,   Tekashnik,   Denis,   Иван,   Дмитрий 199,   Николай,   Михаил,   Дмитрий,   Ender,   Платон,   Владимир,   Андрей Н.,   Владимир Борисенко,   Максим Лапшинов,   Permitin Alexey,   Новопашин Владимир,   Максим Саратов,   Алексей В.,   Den Andreevich,   Елена .

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Работать со встроенными классами списков, такими как: List, ListDictionary, HashTable, HybridTable. Также основам работы с графами, их заполнению и перебору с использованием списков.
Трудности: Большое количество новой терминологии и понятий, enumerable и иже с ним. HashTable тоже сложный объект, т.к. там еще хеш-функция внутри и много математики, о которой мало что известно.
Очень полезный курс. Учитывая, что большинство программ так или иначе работают со списками, то, чтобы не изобретать велосипеды с массивами, хорошо бы сразу знать какие уже классы разработаны.
Научился: узнал про алгоритмы поиска вширь и поиска вглубь в чем их отличие и графически посмотреть как они работают
Трудности: были проблемы некоторые с опечатками и с понятием алгоритмов но когда все представили графически все стало яснее
Очень хотелось бы чтобы добавили еще консольные задачи пару несложных но с применением графов и на еще одном уроке показали как решить консольную задачу с графами и без графами показать преимущество графа и как с ним решать задачи. Раньше сам не мог не как добраться чтобы понять про графы поделал по вашему видео курсу и узнал про них Спасибо за курс.