Графы (graph) и алгоритмы обхода - Структуры данных C#

Sdílet
Vložit
  • čas přidán 10. 04. 2019
  • Граф - graph - представляет собой набор узлов, соединенных друг с другом в виде сети. Узлы также называются вершинами. Пара (x, y) называется ребром, которое указывает, что вершина x соединена с вершиной y. Ребро может содержать вес/стоимость, показывая, сколько затрат требуется, чтобы пройти от x до y.
    Графы делятся на два основных типа: ориентированные и неориентированные. У неориентированных графов рёбра между узлами не имеют какого-либо направления, тогда как у рёбер в ориентированных графах оно есть. Чаще всего граф изображают в каком-либо из двух видов: это может быть список смежности или матрица смежности. Рассмотрим основные алгоритмы обхода графа: обход графа в ширину и обход графа в глубину.
    Подписывайтесь на мои социальные сети, там много всего интересного и полезного:
    codeblog
    tele.click/codeblog
    zen.yandex.ru/codeblog
    Поддержать канал: www.donationalerts.ru/r/shwanoff
    Кстати, меня зовут Вадим, и я программист на языке C# уже больше 8 лет. Рассказываю про IT технологии и веду этот курс по языку C# с нуля под названием Учим Шарп. В его рамках мы рассмотрим как базовый синтаксис языка C Sharp, так и его практическое применение и специальные технологии, такие как ASP.NET, Core, MVC, Unity, WCF, WPF, структуры данных и алгоритмы обработки, паттерны проектирования и многое другое. Для меня важно не только показать практическое применение языка C#, но и объяснить основную идею и базовые понятия Computer Science.
    Подробный курс по языку программирования C#:
    • Преимущества и недоста...
    Подробный курс по структурам данных на языке программирования C#:
    • Связный список (linked...
    Подробный курс по алгоритмам сортировки на языке C#:
    • Сортировка пузырьком (...
    Разговоры о программировании, мотивации, и ответы на IT вопросы:
    • Практика программирова...
    #программирование #csharp #программист #ityoutubersru #codeblog

Komentáře • 45

  • @CODEBLOG
    @CODEBLOG  Před 5 lety +6

    Граф - graph - представляет собой набор узлов, соединенных друг с другом в виде сети. Узлы также называются вершинами. Пара (x, y) называется ребром, которое указывает, что вершина x соединена с вершиной y. Ребро может содержать вес/стоимость, показывая, сколько затрат требуется, чтобы пройти от x до y.
    Графы делятся на два основных типа: ориентированные и неориентированные. У неориентированных графов рёбра между узлами не имеют какого-либо направления, тогда как у рёбер в ориентированных графах оно есть. Чаще всего граф изображают в каком-либо из двух видов: это может быть список смежности или матрица смежности. Рассмотрим основные алгоритмы обхода графа: обход графа в ширину и обход графа в глубину.

  • @ivanomelchenko1895
    @ivanomelchenko1895 Před 3 lety +1

    Владимир, благадарю за стрими не останавливайся.

  • @user-rk2ku1kg7o
    @user-rk2ku1kg7o Před 4 lety +4

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

    • @CODEBLOG
      @CODEBLOG  Před 4 lety

      Очень рад, что смог помочь )

  • @yaroslavishchuk
    @yaroslavishchuk Před 4 lety +2

    Спасибо мой лысый товарищь!! Освежило память

    • @CODEBLOG
      @CODEBLOG  Před 4 lety +1

      Всегда пожалуйста )

  • @user-ey9qg4ce4c
    @user-ey9qg4ce4c Před 7 měsíci

    Привет из Курска!

  • @sketch1534
    @sketch1534 Před rokem

    Очень пригодилось в семестровой работе!!! спасибо огромное! Успехов!

  • @tylerdurden9008
    @tylerdurden9008 Před 2 lety

    Спасибо! Давно хотел освоить данную тему!

  • @yauhescha
    @yauhescha Před 3 lety +1

    Хорошие пояснения. Пусть видео уже год, оно не утратило актуальности

  • @shkippitor1895
    @shkippitor1895 Před 4 lety +10

    Очень обидно, что на такой крутой теме, так мало просмотров

    • @CODEBLOG
      @CODEBLOG  Před 4 lety

      Ну тут ничего не поделать )

  • @user-lz7yo5bl5z
    @user-lz7yo5bl5z Před 2 lety

    Спасибо, а то в книге было не очень понятно, жду следующую главу clr via C#

  • @radja_roman
    @radja_roman Před 4 lety +1

    Спасибо большое !

  • @user-wq2oq8st1u
    @user-wq2oq8st1u Před 4 lety +1

    Очень доходчиво, спасибо!

    • @CODEBLOG
      @CODEBLOG  Před 4 lety

      Всегда пожалуйста )

  • @maxgaev9211
    @maxgaev9211 Před 2 lety

    огромное вам благодарность!!!!!

  • @Penat_Vilikirentiy
    @Penat_Vilikirentiy Před 5 lety +1

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

    • @CODEBLOG
      @CODEBLOG  Před 5 lety +1

      ну да, универсального решения нет. каждая структура данных адаптируется под конкретную задачу.

  • @user-xt4bj5lt5x
    @user-xt4bj5lt5x Před 4 lety

    просто отец, продолжай выпускать обучающие стримы, лайк и колокольчик вместе с подпиской

  • @bbmbyte
    @bbmbyte Před 3 lety

    Планируется ли стрим по алгоритму Дейкстры?

  • @BlushSmith
    @BlushSmith Před 2 lety +1

    Музончик зачот!
    Спасибо за тему - как раз для собеседования нужно структуры данных подтянуть.
    PS можно же в какой нормальной программе рисовать, что бы с планшетом не мучаться

  • @user-xd3we2qp4i
    @user-xd3we2qp4i Před 3 lety

    21:25, это означает, что первый и последний э-нт будет иметь два значения(два веса)?

  • @grekovv
    @grekovv Před 4 lety +1

    Thank you very much!

  • @kseniaprohorova9835
    @kseniaprohorova9835 Před 2 lety

    Пожалуйста, напишите как реализовать с отображением пути, а не просто есть или нет путь...а также в глубину хотелось бы тоже узнать, в чем отличие от в ширину именно в коде. спасибо

  • @alcor9921
    @alcor9921 Před 4 lety +1

    Если используешь горячие клавиши, говори их пожалуйста, просто я запутался конкретно.... :)

  • @user-lx5vv3uu8u
    @user-lx5vv3uu8u Před 4 lety +1

    Спасибо!

  • @user-eq5hs8oc7e
    @user-eq5hs8oc7e Před 4 lety +1

    А можешь код в комментарии кинуть или под видосик ?

  • @user-fy3iv9dp7g
    @user-fy3iv9dp7g Před 7 měsíci

    Спасибо.
    Подписался на канал)

  • @metamodis
    @metamodis Před 2 lety

    Жаль про внешние варианты представления графов не было(

  • @pavelgrigorenko9411
    @pavelgrigorenko9411 Před rokem

    1:09:25 мне кажется, или вы перепутали row (ряд) и colum (колонка) местами. Ведь в колонке должны быть откуда, а в строке куда. Если я не прав то поправьте)

    • @user-bd3fv1jp3i
      @user-bd3fv1jp3i Před rokem

      да ты ошибся немного. Если представить 2мерный массив как таблицу, то row это индекс строки таблицы, то есть первый индексатор 2мерного массива, а column индекс колонки таблицы. Главное хорошенько представить это все визуально и станет понятнее. "Откуда" - номер строки таблицы, "Куда" - номер колонки таблицы.

  • @user-hm8vy9ld9e
    @user-hm8vy9ld9e Před rokem

    музыка топ)

  • @TbIPDblM
    @TbIPDblM Před 3 lety +1

    7к просмотров, 380 лукосов, а было бы платно было 20к лукосов-)

  • @user-ik6dr3dg9u
    @user-ik6dr3dg9u Před 4 lety

    Как формировать граф из файла?

    • @CODEBLOG
      @CODEBLOG  Před 4 lety

      Нужно написать алгоритм чтения файла. ведь файлы могут быть разные :)

  • @denisosipenko7413
    @denisosipenko7413 Před 4 lety

    Спасибо автору за видео, хорошо все объяснил.
    Заметил одну одну потенциальную ошибку, если количество вершин и количество ребер одинаковое, матрица строится как надо, но если количество ребер больше то будет IndexOutOfRangeException.
    Можно заюзать что-то типа этого:
    public int[,] GetArray()
    {
    var matrix = new int[Count, Count];
    for (int i = 0; i < Count; i++)
    {
    for (int j = 0; j < Count; j++)
    {
    matrix[i, j] = _edgeses.Where(x => x.From.Id == i+1 && x.To.Id == j+1).Select(x => x.Weight)
    .FirstOrDefault();
    }
    }
    return matrix;
    }

    • @CODEBLOG
      @CODEBLOG  Před 4 lety

      Возможно и был косяк ) спасибо за исправление )

  • @MilkMeny
    @MilkMeny Před rokem

    Зачем в "public int Weight {get; set:}" писать {get; set:}?)))))

  • @nied989
    @nied989 Před 2 lety

    Худшее что я мог увидеть на данную тему

  • @alexazimov420
    @alexazimov420 Před 2 měsíci

    Нудный