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

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

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

  • На этом уроке я дам определение графа своими словами,
    всё, что запомнил с момента учёбы в университете.
    В конце урока мы зададимся вопросом -
    как хранить граф в памяти компьютера.
  • Дата отправки отчёта: 1 июля 2017 г.
  • Задание выполнено: за 20 мин.
  • Чему научился: познакомился с графами
  • Что было сложным: ничего
  • Комментарии: можно хранить как Hashtable элементы которого будет созданная нами стриктура
  • Оценка видео-уроку:
Отчёт от 13540 за Коллекция графов / Граф




Оцени работу

 
Сохранить страницу:

1. --
Евгений Волосатов
Евгений Волосатов
ответить
→  Алексей Малышев  # Коллекция графов / Граф / 2017-07-02 11:23

Думаю хеш не очень практичен, тк порядок перебора вершин может отличаться что бывает не очень удобно


10558. --
Иван Воронин
Иван Воронин
ответить
→  Алексей Малышев  # Коллекция графов / Граф / 2017-07-02 21:13

Если считаешь, что можно так хранить, то провёл бы эксперимент и показал в отчёт можно или нет и если можно, то какой от этого плюс/минус.


13540. --
Алексей Малышев
Алексей Малышев
ответить
→  Иван Воронин  # Коллекция графов / Граф / 2017-07-02 22:15

У меня была такая мысль:
static class Program
    {
        [STAThread]
        static void Main()
        {
            int end = 2000000;
            DateTime start = DateTime.Now;
            Hashtable graph = new Hashtable();
            for (int i = 0; i < end; i++)
            {
                Element element = new Element();
                element.ribs = new List<int>();
                for (int j = 0; j < rand.Next(1,4); j++)
                {
                    int rib = rand.Next(0, end + 1);
                    if (!element.ribs.Contains(rib) && rib != i)
                        element.ribs.Add(rib);
                }
                graph.Add(i, element);
            }
            Console.WriteLine("Init " + end + " elements " + (DateTime.Now - start));
            start = DateTime.Now;
            for (int i = 0; i < end; i++)
            {
                int nr = rand.Next(0, end + 1);
                if (graph.Contains(nr))
                    ((Element)graph[nr]).ribs.Add(0);
            }
            Console.WriteLine("Search of " + end + " elements " + (DateTime.Now - start));
            Console.ReadKey();
        }
        static Random rand = new Random();
    }
    struct Element
    {
        public List<int> ribs;
    }


10558. --
Иван Воронин
Иван Воронин
ответить
→  Алексей Малышев  # Коллекция графов / Граф / 2017-07-03 00:10

Да, так можно, с простыми объектами всё ок, а для сложных нужно делать кастомный Hashtable. Ещё из всего кода не понравилась строчка:
for (int j = 0; j < rand.Next(1,4); j++)
я бы лучше записал:
int rnd = rand.Next(1,4);
for (int j = 0; j < rnd; j++)
а то при первой итерации будет:
j = 0; j < к примеру 3
на след итерации:
j = 1; j < уже к примеру 1
и тем самым рандом будет каждую итерацию вычисляться, это можно проверить при дебаге, по крайней мере когда-то так было, сейчас надо уточнить в дебаге, будет возможность, обязательно проверю, но чтобы быть уверенным, лучше не использовать в теле цикла for рандом или переменные, в которых может поменяться значение в процессе итерации. Если в этом нет необходимости по логике.



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





Если вы пришли без приглашения -
введите тысяча двадцать четыре (цифрами).
Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

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

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

Ты в любой момент сможешь отписаться от рассылки.


Научился: Создать класс и создать требуемые поля, потом ссылку на того же типа или массив на все связанные вершины.
Трудности: Графы всегда обходил стороной эту тему, но теперь придется разбираться.



Научился: Узнал основные понятия о графах.
Трудности: Придумать способ хранения графа.
Интересный урок, спасибо.