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

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

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

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




2,000 руб.


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

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

# Название видеоурока Решило Рейтинг Доступ
1 ArrayList 00:12:16 32 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Все это знал 
Сложности: Ничего 
Комментарии: Очень хороший метод есть у списка, но нет у массива. Это Remove. В свое время я кучу нервов потратил на удаление элементов из двумерных и трехмерных массивов. 
2 List 00:12:57 32 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Узнал про списки 
Сложности: Понять что дополнительные методы у списка будут если подключить пространство имен System.Linq. У меня его не было. 
Комментарии: Почему-то начинается все не с начала. 
3 Array vs List 00:11:04 31 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 20 мин. [Показать отчёт]
Научился: Узнал про Stopwatch  
Сложности: Ничего 
Комментарии: Все понятно и доступно 
4 ListDictionary 00:15:19 31 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 20 мин. [Показать отчёт]
Научился: Узнал про коллекции ListDictionary, Hashtable, HybridDictionary и чем они отличаются друг от друга 
Сложности: Ничего 
Комментарии: Поигрался с методом .Contains(). Он ищет есть ли указанный ключ в коллекции. Также посмотрел что возвращает метод item.Value.GetType() 
5 Hashtable 00:11:56 30 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: Сравнил разницу создания Hashtable, HybridDictionary и ListDictionary.  
Сложности: Ничего 
Комментарии: HybridDictionary почему-то быстрее всех заполняет себя данными. Думал быстрее будет Hashtable. И есть странные результаты. Миллион ListDictionary с 10 элементами создается быстрее чем миллион ListDictionary с 8 элементами. 
6 BitArray 00:14:00 30 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Узнал про данный тип коллекции. Пока не могу понять для чего он может мне понадобиться. Но знать его полезно 
Сложности: Ничего 
Комментарии: Интересных методов у него нет. Стандартные 4 логические операции, хотя их больше. 
7 Граф 00:13:48 30 чел. ★ 4.9 Done
  Отчёт отправил: 1967. Дмитрий Решено за 20 мин. [Показать отчёт]
Научился: Узнал начальные сведения о графах 
Сложности: Придумать способ хранения графа. 
Комментарии: В первом массиве(списке) под порядковым номером хранится номер вершины. Если у него есть ребро с другой вершиной то в ячейке массива хранится порядковый номер второго массива(списка). В втором массиве под данным порядковым номером хранится номер вершины с которым соединена вершина из первого массива и цвет. Но что-то муть какая-то получается. 
8 Вершины 00:14:15 30 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Вспомнил итераторы 
Сложности: Ничего 
Комментарии: Ребра хранить в списке, в котором первое значение номер вершины №1, а втором значении список вершин с кем вершина №1 контактирует. По типу составного массива. Array[][] 
9 Рёбра 00:12:47 29 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 20 мин. [Показать отчёт]
Научился: Научился использовать коллекцию Dictionary 
Сложности: Ничего 
Комментарии: Хорошее домашнее задание 
10 Инициация 00:11:15 29 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Закрепление материала 
Сложности: Построить граф 
Комментарии: Вывел на экран просто каждую вершину и с кем она соединяется. Повторы не убирал. И расположение не делал. Примерно представляю как это сделать. Но думаю все гораздо проще. 
11 Отображение 00:16:18 29 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 20 мин. [Показать отчёт]
Научился: Вспомнил про рисование 
Сложности: Ничего 
Комментарии: Как я и думал все оказалось проще. Но моя проблема была в том, что я думал, что мы будем координаты вершинам определять автоматически, а не вручную их указывать. 
12 Шахматная доска 00:19:58 29 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: Закрепление материала 
Сложности: Ничего 
Комментарии: Вначале показалось запутанной эта конструкция: int number = GetGraphSteps(x, y, z); if (number >= 0) graph.NewEdge(x + y * size, number); Но чуть-чуть подумав все стало яснее ясного дня :) 
13 Широкий поиск 00:14:59 29 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Поиску в ширину 
Сложности: Ничего 
Комментарии: 0|2|3|5|7|10|12|1|4|6|9|11|8 
14 Широкий алгоритм 00:14:12 28 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Алгоритму поиска в ширину на практике. 
Сложности: Поиск ошибки 
Комментарии: Ошибка в том, что мы возвращаем номер вершины из нашей коллекции, меняем ее цвет. Коллекция меняется. А мы возвращаем номер с помощью yield, а коллекция поменялась. Вот программа и не может из-за этого работать.  
15 Широкий пошаговый ход 00:11:46 28 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 30 мин. [Показать отчёт]
Научился: Ничему 
Сложности: Раскрашивать.  
Комментарии: Использовал делегат. Но надо еще добавить таймер на закраску иначе все мгновенно происходит 
16 Визуализация процесса 00:14:07 24 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Закрепил знания 
Сложности: Ничего 
Комментарии:  
17 Глубокий поиск 00:09:58 24 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 15 мин. [Показать отчёт]
Научился: Поиску в глубину 
Сложности: Ничего 
Комментарии: Добавлял цифры по возрастанию. 0|12|10|7|5|3|2 12|11|1|10|7|5|3|2 11|1|10|7|5|3|2 1|10|7|5|3|2 10|9|7|5|3|2 9|8|7|5|3|2 8|7|5|3|2 7|5|3|2 5|6|4|3|2 6|4|3|2 4|3|2 3|2 2 
18 Глубокий алгоритм 00:15:07 24 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 20 мин. [Показать отчёт]
Научился: Очень хороший курс. Узнал про коллекции и про графы. Разные методы поиска по графам. 
Сложности: Ничего 
Комментарии:  
19 ФИНАЛЬНЫЙ УРОК 24 чел. ★ 5 Done
  Отчёт отправил: 1967. Дмитрий Решено за 5 мин. [Показать отчёт]
Научился: Я, как обычно, не многословно. Очень хороший курс. Узнал про коллекции. Научился тестировать их на быстродействие. Теперь буду выбирать между массивами и различными видами списков осознанно, использовать то что лучше для какого-либо случая. Узнал как устроены графы. Что они должны уметь и какой смысл несут. Хоть мы и не охватили эту тему полностью. Наверно чтобы это сделать надо потратить не один месяц или даже год. Узнал про два метода поиска по графам. Во время обучения были использованы перечисления и какие подводные камни есть у некоторых коллекций при работе с итераторами. Курс стоит своих денег.  
Сложности:  
Комментарии:  
  Итого:   19 видеоуроков общей продолжительностью 4 час. 06 мин. 24 чел. ★ 5  
  Финалисты:   Максим,   Alcatraz,   Дмитрий,   Tekashnik,   Denis,   Иван,   Дмитрий 199,   Николай,   Михаил,   Дмитрий,   Ender,   Платон,   Владимир,   Андрей Н.,   Владимир Борисенко,   Максим Лапшинов,   Permitin Alexey,   Новопашин Владимир,   Максим Саратов,   Алексей В.,   Den Andreevich,   Елена,   Станислав,   Сергей Соколов .

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Первые уроки не приносили удовлетворение, потому что в них много воды и мало визуалки. Так же было бы здорово увидеть в конце первой части(где мы изучали коллекции) какое-то обобщение в виде презентации или еще раз закрепить материал в пейнте, чтобы каталогизировать полученные знания. По второй части, мне понравилась итоговая программа. Но не понравилась работа с переменными. Где-то по-русски, где-то по-английски. В классе только с русскими переменными появляются английские. Это, если что относится не к эстетике и не к русским названиям переменных/функций в программировании, а к способности придерживаться заданного курса. Коль уж сказал, что пишешь русскими, будь добр пиши русскими. Несоответствие собственным принципам может отталкивать новых клиентов, теряется доверие к учителю, они боятся вкладывать деньги, потому что Евгений мог сегодня сказать, что мы создаем новый ресурс, а завтра закрыть все и уйти в подполье, или в голове возникает внутреннее превосходство над учителем, просыпаются мозгоеды, которые начинают старые песни: "А ВЫ ЖЕ СКАЗАЛИ ВОТ ТАК!!". То же самое и насчет иконок в первых уроках рассказывается как это важно, а сейчас на многих курсах мы их даже вообще не ставим. Несмотря на то, что кажется, что отзыв негативный, мне понравилось донесение материала и в целом курсом и полученными знаниями я очень доволен, спасибо!Узнал про коллекции, про Графы, уже нашел применение ему в моей будущей работе.
Родину люблю, стреляю хорошо, кормят хорошо, в отпуск не хочу, слава Видеошарп!
Смотреть видеозапись: https://www.youtube.com/watch?v=8cRjtXega1w
Трудности: --------------------------------------------
Интересно было подписаться на курс Коллекция графов и познакомится с этим понятием - граф. Разобраться что же все-таки такое граф, вершина графа, рёбра и их вес. Интересно было узнать для чего используется данная логика, где применяется и как эту логику правильно отобразить в коде. На курс у меня ушло полтора месяца. Я занимался только по вечерам. Сложность была только одна – приехать из отпуска и начать заново проходить курс. Курс представляет из себя 18 уроков и Финал. На первых 6 уроках нам рассказали о классах, описывающих коллекции и реализующих различные интерфейсы. На оставшихся 12 уроках мы познакомились с понятием графа, с логикой его описания в коде. Также познакомились с методами обхода неориентированного графа. Это поиск в ширину и поиск в глубину. Спасибо за предоставленный материал. Надеюсь что последний урок (18) Вами будет переписан. (да я вредный)