# | Название видеоурока | Видео / Тесты | Решило | Рейтинг | Доступ |
---|---|---|---|---|---|
1 | ArrayList |
1 тест |
|||
На этом уроке мы обсудим план занятий, вспомни былые времена голых массивов, и выясним, зачем же нужны коллекции. Начнём знакомство с самой простой коллекции ArrayList и немного поэкспериментируем с ней. Отчёт отправил: 9263. Андрей Н. Выполнено за 15 мин. [Показать отчёт] Научился: Узнал о существовании ArrayList, BitArray и прочих реализациях коллекций. Сложности: --- Комментарии: Поэкспериментировал с методом RemoveAt(int) - он позволяет удалить из коллекции элемент с заданным индексом. В этом как раз огромное отличие от обычного массива - в обычном массиве, чтобы удалить элемент из середины пришлось бы перемещать часть элементов вручную |
|||||
2 |
List |
1 тест |
|||
На этом уроке мы поработаем с типизированной коллекцией List. Обсудим её преимущества, по сравнению с ArrayList, добавим несколько элементов, отсортируем их и даже найдём их сумму. Перебор элементов мы организуем двумя разными способами - через итератор и обычным foreach(). Отчёт отправил: 9263. Андрей Н. Выполнено за 15 мин. [Показать отчёт] Научился: Усвоил простейшие приемы работы с типизированной коллекцией List<>. Сложности: --- Комментарии: Изучил метод Insert() - он позволяет вставить в коллекцию элемент в выбранную позицию. Опять же, при использовании массива нам пришлось бы вручную переместить часть элементов, коллекция же все делает сама в автоматическом режиме. |
|||||
3 | Array vs List |
|
|||
На этом уроке мы сравним эффективность использования ArrayList, List<> и простого массива. Победителем окажется типизированная коллекция List<>. Очень интеренсо сравнивать эффективность, нам в этом поможет флагманский класс Stopwatch. Отчёт отправил: 9263. Андрей Н. Выполнено за 15 мин. [Показать отчёт] Научился: Научился использовать класс Stopwatch для проведения замеров времени. Сложности: --- Комментарии: Провел эксперимент с указанием количества элементов массива и коллекции при создании, так вот типизированный List работает в этом случае примерно с такой же скоростью, что и обычный массив |
|||||
4 | ListDictionary |
|
|||
На этом уроке мы начнём рассматривать три класса, которые похожи по функциональности, но очень сильно отличаются по реализации, это: ListDictionary, Hashtable, HybridDictionary. Эти коллекции хранят пару значений: ключ - значение. Они нетипизированные и работают с объектами. Отчёт отправил: 9263. Андрей Н. Выполнено за 20 мин. [Показать отчёт] Научился: Познакомился с коллекцией "словарного" типа - ListDictionary, такие коллекции позволяют хранить совместно с элементами коллекции ключи, для доступа и поиска этих элементов, причем ключи эти тоже являются любыми наследниками object. Сложности: --- Комментарии: Отдельно познакомился с методом Remove(), в отличие от коллекций-дженериков здесь идет поиск члена коллекции по его ключу, а не номеру. |
|||||
5 | Hashtable |
1 тест |
|||
На этом уроке мы поработаем с Hashtable - каким именно образом в неё складываются значения и почему она будет работать, даже если хеш-функция вернёт одинаковые значения. Также мы увидим, что порядок элементов путается, а сами значения хранятся в очень хитром виде. В конце урока мы сделаем всё то же самое с гибридным классом. Самостоятельное задание: сравнить скорость работы этих коллекций. 1 этап: создать МНОГО коллекций по 8 и по 9 элементов (ОТДЕЛЬНО). 2 этап: создать ОДНУ коллекцию из ОГРОМНОГО количества элементов. Подвести итоги и в отчёте написать вывод. Отчёт отправил: 9263. Андрей Н. Выполнено за 25 мин. [Показать отчёт] Научился: "Попробовал" Hashtable и HybridDictionary. Сложности: --- Комментарии: Результаты тестов на скриншоте! |
|||||
6 | BitArray |
3 теста |
|||
На этом уроке мы поработаем с интересной коллекцией BitArray, которая позволяет компактно хранить большие массивы двоичных данных. Отчёт отправил: 9263. Андрей Н. Выполнено за 20 мин. [Показать отчёт] Научился: Познакомился с коллекцией BitArray. Независимо от размера коллекции, она использует 110 байт в служебных целях, поэтому если у нас до 110+4=114 элементов ее использование экономии памяти не дает, хотя тут другой вопрос - сколько накладных расходов при использовании обычного массива? Сложности: --- Комментарии: Составил таблицу истинности ф-й And, Or, Xor. |
|||||
7 | Граф |
2 теста |
|||
На этом уроке я дам определение графа своими словами, всё, что запомнил с момента учёбы в университете. В конце урока мы зададимся вопросом - как хранить граф в памяти компьютера. Отчёт отправил: 9263. Андрей Н. Выполнено за 15 мин. [Показать отчёт] Научился: Освежил в памяти начальные сведения из теории графов. Сложности: --- Комментарии: Как вариант: List<List<int>> g = new List<List<int>>(); ну или даже массив массивов, например: int[][] g; F вообще, конечно, в каждой конкретной задаче нужно использовать реализацию которая подойдет конкретно к этой задаче: Например, если нам нужно хранить еще и цвет, то создаем структуру (ну или класс) "Вершина" с полями "Цвет" и "Список смежных вершин", затем создаем коллекцию этих "Вершин" |
|||||
8 | Вершины |
2 теста |
|||
На этом уроке мы начнём создавать класс Граф для хранения графа и работы с ним. На уроке мы создадим всё, что касается вершин. Отчёт отправил: 9263. Андрей Н. Выполнено за 20 мин. [Показать отчёт] Научился: Пока в общем-то ничего нового, ждем добавки :) Сложности: --- Комментарии: В текущей реализации пока не очень понятно как мы будем хранить ребра... Единственное что приходит в голову - это создать коллекцию ребер, которая будет по тому же индексу, что используется в коллекции "вершины" хранить в себе массив/коллекцию индексов вершин связанных с этой. %) |
|||||
9 | Рёбра |
|
|||
На этом уроке мы содадим колекцию для хранения рёбер. Опишем методы добавления рёбер и перебора смежных вершин. Отчёт отправил: 9263. Андрей Н. Выполнено за 20 мин. [Показать отчёт] Научился: Научился создавать вложенные коллекции, их инициализировать и добавлять элементы на все уровни вложенности. Научился пользоваться созданным классом графа, добавлять в него вершины и ребра. Сложности: Не утонуть в обилии скобочек. Комментарии: Считаю, что инициализировать список ребер нужно сразу при создании вершины. С моей точки зрения это более логично, я, собственно, так и сделал. |
|||||
10 | Инициация |
1 тест |
|||
На этом уроке мы создадим экземпляр нашего графа и добавим в него все его элементы по образцу. Самостоятельное задание - вывести граф на экран. Отчёт отправил: 9263. Андрей Н. Выполнено за 25 мин. [Показать отчёт] Научился: Научился создавать элементы формы в процессе выполнения программы. Сложности: --- Комментарии: Ну пока сильно не заморачивался с выводом - вывел все лейблы на окружности. Будем смотреть как реализовано в уроках. |
|||||
11 | Отображение |
|
|||
На этом уроке мы выведем граф на экран: и вершины и рёбра.
Отчёт отправил: 9263. Андрей Н. Выполнено за 25 мин. [Показать отчёт] Научился: Научился перебору членов коллекции, которые являются членами коллекции. Сложности: --- Комментарии: Добавил обработчик события для перерисовки ребер при необходимости. |
|||||
12 | Шахматная доска |
1 тест |
|||
На этом уроке мы создадим граф в виде Шахматной доски. И организуем её вывод на экран. Отчёт отправил: 9263. Андрей Н. Выполнено за 40 мин. [Показать отчёт] Научился: Научился разбираться в нагромождениях кода и приводить его в хоть сколько-то читаемый вид. Сложности: --- Комментарии: Добавление ребер "шахматного" графа сделал по своему, в уроке код избыточный и неочевидный, имхо. Сделал двумя вложенными циклами, сначала проходим и добавляем горизонтальные связи, потом проходим и добавляем вертикальные связи. Обошелся вообще без условного оператора. Вообще, строго говоря, в шахматах нет ни одной фигуры, которая ходит по этому графу, например, если бы мы писали граф возможных ходов для ладьи, то, например, при положении фигуры в вершине 10 есть возможные ходы не только в 2, 9, 10 и 18, но и 26, 34, 42, 50 и т.д. |
|||||
13 | Широкий поиск |
|
|||
На этом уроке мы познакомимся с алгоритмом поиска вширь. Мы проработаем весь алгоритм на конкретном примере. Самостоятельное задание - выбрать граф и также с ним поработать. Отчёт отправил: 9263. Андрей Н. Выполнено за 25 мин. [Показать отчёт] Научился: Научился обходить граф вручную. Сложности: --- Комментарии: --- |
|||||
14 | Широкий алгоритм |
|
|||
На этом уроке мы напишем алгоритм поиска вширь. Однако, запустить его не удастся. Почему? Это вам самостоятельное задание, разобраться в причине, и найти способ, как это исправить. Отчёт отправил: 9263. Андрей Н. Выполнено за 40 мин. [Показать отчёт] Научился: Научился реализации алгоритма поиска вширь в коде. Сложности: Разобраться с изменением коллекции при ее переборе. Комментарии: На сколько я понял, изменение коллекции при переборе не рекомендуется, в этом случае рекомендуют формировать новую коллекцию. Я примерно так и сделал, заодно и реализовал интерфейс ICloneable в нашем классе графа. Немного кривенько пока вышло, но, посмотрим, что предлагает нам следующий видеоурок. |
|||||
15 | Широкий пошаговый ход |
|
|||
На этом уроке мы исправишм ошибку из прошлого урока и пройдёмся пошагово по всему алгоритму. Отчёт отправил: 9263. Андрей Н. Выполнено за 15 мин. [Показать отчёт] Научился: --- Сложности: --- Комментарии: Задание под звездочкой пока выполнять не стал, есть идея сделать это, используя делегаты/события, но эту тему еще не изучал, поэтому самому не просто реализовать. Посмотрю реализацию в следующем уроке. |
|||||
16 | Визуализация процесса |
|
|||
На этом уроке мы создадим делегат "Покраска" и через него реализуем отображение процесса. Отчёт отправил: 9263. Андрей Н. Выполнено за 20 мин. [Показать отчёт] Научился: Научился использовать делегаты для выполнения определенных действий в вызывающем классе/объекте по сигналу из вызываемого класса/объекта. Сложности: --- Комментарии: --- |
|||||
17 | Глубокий поиск |
|
|||
На этом уроке мы познакомимся с алгоритмом поиска вглубь. Мы проработаем весь алгоритм на конкретном примере. Самостоятельное задание - выбрать граф и также с ним поработать. Отчёт отправил: 9263. Андрей Н. Выполнено за 15 мин. [Показать отчёт] Научился: Обходу графа по алгоритму поиска вглубь. Сложности: --- Комментарии: --- |
|||||
18 | Глубокий алгоритм |
|
|||
На этом уроке мы напишем алгоритм поиска вглубь. Вернее сказать - скопипастим. И пофилософствуем. На этом же уроке посмотрим, как он работает. Отчёт отправил: 9263. Андрей Н. Выполнено за 20 мин. [Показать отчёт] Научился: Научился реализации алгоритма поиска вглубь в коде, а также познакомился с очередной коллекцией - стеком (Stack). Сложности: --- Комментарии: При закрашивании лейбла, достаточно рефрешить только его, а не целиком панель или форму, тогда не будет мерцания и отпадет необходимость в перерисовке ребер, да и работать будет всё немножко быстрее. Как показывал в своем отчете у меня свой алгоритм добавления ребер на шахматной доске, поэтому алгоритм перебирает чуть в другой последовательности. |
|||||
19 | ФИНАЛЬНЫЙ УРОК |
без видео |
|||
Поздравляю с окончанием курса! Оставь отзыв об этом курсе. Какой курс ты будешь проходить следующим? Отчёт отправил: 9263. Андрей Н. Выполнено за 5 мин. [Показать отчёт] Научился: Курс в целом очень полезный. В первую очередь из-за знакомства со списками/коллекциями, на самом деле это такая нужная "обыденная" вещь, без которой ни один более-менее средний (про большие уж не говорю) не обходится, поэтому знать и уметь пользоваться нужно обязательно. Ну и как бонус курса - знакомство с графами и алгоритмами их обхода вширь и вглубь. Сложности: --- Комментарии: Курс очень понравился, здесь не было чего-то особо запутанного и сложного для понимания. Единственное замечание - это автор немного "перемудрил" с алгоритмом добавления ребер на графе шахматной доски, но я реализовал свой алгоритм, поэтому для меня это не минус. |
|||||
Итого: 19 видеоуроков |
4 час. 06 мин. 12 тестов |
43 чел. | |||
Финалисты: Максим, Alcatraz, Дмитрий, Tekashnik, Denis, Иван, Дмитрий 199, Николай, Михаил, Дмитрий, Ender, Платон, Владимир, Андрей Н., Владимир Борисенко, Максим Лапшинов, Permitin Alexey, Новопашин Владимир, Максим Саратов, Алексей В., Den Andreevich, Елена, Станислав, Сергей Соколов, Yefim, Алексей Малышев, Александр, Сергей, Денис, chokayes, ser2018, vip, Игорь Тюлькин, Александр Балбашов, Денис, Кирилл, no name, Max, Константин, Дмитрий, MaxB, Anatoli, Булат . |