Обучение c# видеоуроки

Формула программиста
основатель — Волосатов Евгений Витольдович
1-2-3 мая - Создай online игру!

Отзывы о вебинарах комбинаторики




Комбинаторика

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

Объём: 22 видеоурока
Темы: Рекурсия, комбинаторика,
динамическое программирование, фракталы.
Срок: 30 дней.


Хочу купить!

Купить в рассрочку за мегахеши

Цена: 2000 p.


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

# Название видеоурока Решило Рейтинг Доступ
1 Рекурсия. Вступление 165 чел. ★ 4.7 Done
 

«Человеку свойственна итерация,
рекурсия - божественна».


Мы начнём наш курс с такой интересной и трепетной темы, как РЕКУРСИЯ.
Вокруг рекурсии ходит множество толков, загадок, непоняток и заблуждений.
Сегодня мы один раз и навсегда, просто и понятно выясним, что такое рекурсия и как её понять.

Задание:
Дать определение рекурсии своими словами.
Найти красивую и достойную картинку на тему рекурсии.

Видео на этом уроке нет.
Отчёт отправил: 7980. Сергей Лузум Выполнено за 30 мин. [Показать отчёт]
Научился: Неожиданно обнаружил, что на первый взгляд циклы можно спутать с рекурсией. (Раньше не задумывался об этом) 
Сложности: Придумать свои "определения" 
Комментарии: Рекурсия - та же математическая индукция. Рекурсия - правило, состоящее из двух частей: - правило перехода от более сложной ситуации к более простой, гарантированно приводящее к известному частному случаю (через конечное число шагов); - правило, явно определяющее результат (ответ) для этого частного случая, защищающее от бесконечного зацикливания. Рекурсия - "самоподобное" правило, с конечной глубиной вложенности. (Фрактальный вариант) 
2 Рекурсия. Главный секрет 00:31:52 97 чел. ★ 4.9 Done
  На вебинаре рассмотрели несколько примеров по созданию рекурсивных алгоритмов.
Рассказал основной секрет, как понимать рекурсию.

Задание:
Нарисовать кривую Гильберта на листе бумаги.
Отчёт отправил: 7980. Сергей Лузум Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Рисовать кривую Гильберта) 
Сложности: Пока ничего 
Комментарии: Понравился вывод чисел "задом наперёд" 
3 Рекурсия. Заливка области 00:47:23 90 чел. ★ 5 Done
  Пишем алгоритм заливки, как в программе Паинт.
Отчёт отправил: 7980. Сергей Лузум Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: Рекурсия - это удобно и красиво, но использовать её нужно с осторожностью и только там, где это оправданно. 
Сложности: Закончить экспериментировать с программой.) 
Комментарии: Мне кажется, что эта программа в полной мере позволяет оценить именно красоту и "магию" рекурсии. Так что я даже сегодня решил на уроке информатики в 8 классе, забегая вперёд, с её помощью познакомить учеников с рекурсией: дать самое общее представление о ней, но, в первую очередь - ЗАИНТЕРЕСОВАТЬ детей! И, кажется, эффект был...))) 
4 Рекурсия. Факториал 00:04:35 57 чел. ★ 4.9 Done
  На этом уроке мы пойдём в гости к роботу Шарпу.

Задание:
Решить задачу «Факториал».
Отчёт отправил: 7980. Сергей Лузум Выполнено за 10 мин. [Показать отчёт]
Научился: Всё знакомо! 
Сложности: Ничего! 
Комментарии: Всё понятно! 
5 Рекурсия. Числа Фибоначчи 00:03:46 53 чел. ★ 5 Done
  На этом уроке мы пойдём в гости к роботу Шарпу.

Задание:
Решить задачу «Числа Фибоначчи».
Отчёт отправил: 7980. Сергей Лузум Выполнено за 10 мин. [Показать отчёт]
Научился: Всё уже знал...) 
Сложности: Ничего! 
Комментарии: Хороший пример неэффективного рекурсивного алгоритма! 
6 Рекурсия. Общий делитель 00:04:08 53 чел. ★ 4.9 Done
  На этом уроке мы пойдём в гости к роботу Шарпу.

Задание:
Решить задачу «Общий делитель».
Отчёт отправил: 7980. Сергей Лузум Выполнено за 24 час. 00 мин. [Показать отчёт]
Научился: Искать разные способы решения одной задачи. 
Сложности: Минимизировать время работы программы, не изменяя алгоритма. Пока не смог. 
Комментарии: Со скоростью работы программы осталось много непонятных моментов, с которыми постараюсь разобраться. В частности, при вычислении НОД(33333333, 1111) программа зависает, если вместо if (a>b) return NOD(a-b,b); написать { long c = a-b; ... if (a>b) return NOD(c,b); 
7 Рекурсия. Обратный отсчёт 00:05:52 52 чел. ★ 4.9 Done
  На этом уроке мы пойдём в гости к роботу Шарпу.

Задание:
Решить задачу «Обратный отсчёт».
Отчёт отправил: 7980. Сергей Лузум Выполнено за 10 мин. [Показать отчёт]
Научился: Ничему. 
Сложности: Ничего.) 
Комментарии: Всё хорошо! 
8 Рекурсия. Фракталы. Спираль 00:25:42 66 чел. ★ 5 $
  На этом уроке мы сначала сделаем заготовку
для рисования линий на форме, а потом
нарисуем спираль используя рекурсию.
Потом мы её немного изменим,
чтобы наша спираль стала
настоящим фракталом.
9 Рекурсия. Фракталы. Треугольник Серпинского 00:23:41 51 чел. ★ 5 $
  На этом уроке мы будем рисовать треугольник Серпинского.
Нам опять поможет рекурсия, которая будет "тройной",
потому что на каждом следующем шаге мы
будем рисовать три новых треугольника.
10 Рекурсия. Фракталы. Кривая Гильберта 00:35:18 39 чел. ★ 5 $
  На этом уроке мы нарисуем кривую Гильберта.
Да-да, ту самую, которую ты рисовал
на листике в начале курса Комбинаторика.
Мы здесь познакомимся с косвенной рекурсией,
это когда несколько функций вызывают друг друга.
11 Комбинаторика. Счастливые билеты 6 00:02:33 48 чел. ★ 4.9 Done
  На этом уроке мы рассмотрим самый простой
способ решения комбинаторных задач,
с использованием вложенных циклов.

Задание
Решить задачу «Счастливые билеты»
Отчёт отправил: 7980. Сергей Лузум Выполнено за 10 мин. [Показать отчёт]
Научился: При решении объёмных задач нужно помнить, что очевидный алгоритм не всегда является оптимальным. 
Сложности: Ничего! 
Комментарии: Если бы в плане самостоятельной работы не увидел явно пункт по оптимизации, вряд ли бы сам обратил внимание на эту "мелочь"... Всего-то в 10 раз больше итераций...)) Спасибо! 
12 Комбинаторика. Счастливые билеты N 00:40:51 63 чел. ★ 5 Done
  На этом уроке мы рассмотрим
два основных способа решения комбинаторных задач:
Первый способ - когда известно количество объектов - вложенные циклы.
Второй способ - любое количество объектов - использование рекурсии.

Задание:
Решить задачу «Счастливые билеты N».
Скачать книжку для чтения по комбинаторике:
Как решать комбинаторные задачи.
Отчёт отправил: 7980. Сергей Лузум Выполнено за 3 час. 00 мин. [Показать отчёт]
Научился: Работе с массивами, решил задачу в общем виде. 
Сложности: Решить математически. Здесь уже не рекурсия, иначе программа будет работать очень долго. 
Комментарии: Всё-таки, решил сделать программу, решающую задачу для довольно больших N. class Program { static void Main(string[] args) { long[] sum, sum2; long S = 0; int N; N = int.Parse(Console.ReadLine()); sum = new long[9 * N + 1]; sum2 = new long[9 * N + 1]; for (int i = 0; i <= 9*N; ++i) sum[i] = 0; for (int i = 0; i <= 9; ++i) { sum[i] = 1; sum2[i] = 1; } if (N > 1) for (int k = 2; k <= N; ++k) { for (int i = 0; i <= 9 * k; ++i) { switch (i) { case 0: sum[i] = 1; break; case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: sum[i] += sum[i - 1]; break; case 10: sum[i] += sum[i - 1] - sum[i - 10]; break; default: sum[i] += sum[i - 1] - sum2[i - 10]; break; } Console.Write("{0,2:D}, ", sum[i]); } sum.CopyTo(sum2, 0); Console.WriteLine(); Console.WriteLine(); } for (int i = 0; i <= 9 * N; ++i) S += sum[i] * sum[i]; Console.WriteLine(S); Console.ReadKey(); //for (int a = 0; a < 10; ++a) // for (int b = 0; b < 10; ++b) // for (int c = 0; c < 10; ++c) // for (int d = 0; d < 10; ++d) // for (int e = 0; e < 10; ++e) // for (int f = 0; f < 10; ++f) // if (a + b + c == d + e + f) // console.writeline("{0} {1} {2} {3} {4} {5}", a, b, c, d, e, f); } }  
13 Комбинаторика. 4 x 4. Ладья x Ферзь 00:26:01 58 чел. ★ 5 Done
  На этом уроке мы рассмотрим две шахматные задачи,
про расстановку ладьей и ферзей на доске, чтобы они не рубили друг друга.
Задачи решаются первым способом - перебор вариантов без использования рекурсии.

Задание:
Решить задачу «Четыре Ладьи».
Решить задачу «Четыре Ферзя».

Отчёт отправил: 7980. Сергей Лузум Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: - 
Сложности: Хотелось для ферзей написать программу с понятной логикой работы. На это потратил большую часть времени. Получилось или нет - узнаю, когда сравню решение с видеоуроком и другими решениями... 
Комментарии: Такие задачи решать интересно!!! 
14 Комбинаторика. Много ферзей. Демонстрация 00:47:45 52 чел. ★ 5 Done
  Теперь составим программу для расстановки N ферзей на шахматной доске N x N.
Для решения этой задачи нам потребуется рекурсия.
А чтобы понять, как она работает -
сделаем визуальную демонстрацию процесса работы алгоритма.


Отчёт отправил: 7980. Сергей Лузум Выполнено за 24 час. 00 мин. [Показать отчёт]
Научился: Хорошо работать с консолью 
Сложности: Найти время для доработки программы, чтобы она выводила результаты так же, как в видеоуроке. 
Комментарии: Всё отлично! 
15 Комбинаторика. Сложение букв 00:36:25 54 чел. ★ 5 Done
  Существует серия головоломок на математическое выражение из букв, например:
ШРАМ * Ы = ШРАМЫ
БУЛОК + БЫЛО = МНОГО
Как правило в этих примерах каждой букве соответствует одна цифра.
Одинаковым буквам одинаковые цифры, разным буквам - разные цифры.
Необходимо решить эту головоломку, то есть разгадать, какой был пример.

Для решения этих задач комбинаторика так и напрашивается.
Первую задачу мы решим первым способом, через вложенные циклы.
Вторую задачу вторым способом, через рекурсию.


Отчёт отправил: 7980. Сергей Лузум Выполнено за 3 час. 00 мин. [Показать отчёт]
Научился: Договариваться с Роботом-Шарпом и вникать в тонкости рекурсии. 
Сложности: МНОГО (БЫЛО БУЛОК) 
Комментарии: 1. Долго не мог понять, почему зависает Робот-Шарп. Выяснилось, что забыл вводить его начальные данные. 2. Перебор вариантов у меня начинался с первой цифры первого слагаемого - отсюда ошибки в примерах 3 и 4 или при переборе всех варианотв "вылет" по таймауту. Понял это только тогда, когда "подсунув" Шарпу правильные ответы, смог просмотреть решения остальных участников и... не найти в них ничего нового. Скопировал одно из решений себе, запустил... все результаты "ВЕРНО"! Вот тут, наконец, всё и разъяснилось.))) 
16 Комбинаторика. Математические операции 00:22:34 50 чел. ★ 5 Done
  Продолжаем комбинаторную практику.
Дан ряд цифр и одно число, например:
1 2 3 4 5 6 7 8 и 100.
Расставить между цифрами знаки
"пробел", "умножить", "плюс" и "минус"
таким образом, чтобы получилось заданное число.

Отчёт отправил: 7980. Сергей Лузум Выполнено за 3 час. 00 мин. [Показать отчёт]
Научился: Узнал, как можно организовать вычисление выражений, содержащих действия с разным приоритетом. Ещё раз проработал рекурсию. 
Сложности: Всё было понятно! 
Комментарии: Насколько я понял, для любого такого калькулятора размер стека операций должен быть не меньше числа рангов (разных приоритетов) операций, не считая операции "=" с её низшим "нулевым". Для "нашего" примера всё работало при размерности 3.  
17 Полуфинальный урок. Ответы на вопросы 47 чел. ★ 4.9 Done
  Ты уже практически закончил курс «Комбинаторика».
Пожалуйста, ответь на несколько вопросов.
Эти ответы пригодятся тебе при записи видеоотзыва.
(видео в этом уроке нет)
Отчёт отправил: 7980. Сергей Лузум Выполнено за 15 мин. [Показать отчёт]
Научился: Подвёл итоги по пройденной части курса. 
Сложности: Здесь ничего. 
Комментарии: 1. Больше всего понравились задача с ферзями (для N) и калькулятор. Ещё алгоритм заливки очень красив! Трудно из них выбрать лучший... 2. Да. Всё-таки, подход к решению комбинаторных задач математика и программиста заметно отличаются. Математический я знал, а вот со вторым хорошо познакомился в этом курсе. 3. Пока нет. 4. Самым ценным, наверное, оказался алгоритм калькулятора (принципиально новый для меня). 5. Лузум Сергей. 
18 Динамика. Поле дураков 00:18:40 52 чел. ★ 5 Done
  Вступление в тему "Динамическое программирование".
Решение олимпиадной задачи "Поле дураков".
Отчёт отправил: 7980. Сергей Лузум Выполнено за 2 час. 00 мин. [Показать отчёт]
Научился: Очевидное (шаблонное) решение далеко не всегда будет лучшим. 
Сложности: Будет. Найти ошибку в своём рекурсивном алгоритме. Приведённый пример решает верно, а неизвестный "тестовый 0" - неверно. 
Комментарии: Получилось, что два раза решал задачу. Сначала написал свою программу, которая застопорилась на первом же тесте, а потом по уроку сделал второй вариант. Было бы неплохо увидеть начальные данные теста, чтобы найти ошибку в своём варианте. 
19 Динамика. Счастливые билеты 20 00:58:04 46 чел. ★ 5 Done
  Решаем уже знакомую задачу новым способом.
Начальные данные: число N от 1 до 10.
Вывод результата: количество 2N-значных счастливых билетов.
Работает - моментально!

Рекомендую ознакомиться с публикациями на эту же тему:
http://www.sql.ru/forum/932580/posobie-dlya-studentov-i-shkolnikov?mid=15179128#15179128
https://goo.gl/RyNCXH


Отчёт отправил: 7980. Сергей Лузум Выполнено за 5 час. 00 мин. [Показать отчёт]
Научился: Узнал, в чём заключается идея динамического программирования. 
Сложности: Самому решить задачу "математически" - из указанных 5 часов, пожалуй, часа 3 - 4 ушло на решение задачи в общем виде. 
Комментарии: Всё отлично!!! Только рискну решение задачи в Excel-e выложить в своём варианте - вдруг, кому-то будет интересно? (Пока придумывал алгоритм, тоже решил использовать Excel для проверки разных способов). Отличие моего решения только формальное (коротко описал в отзыве к вебинару).  
20 Динамика. Выход из Лабиринта 00:59:02 44 чел. ★ 5 Done
  Мы рассмотрим наиболее популярный, интересный и полезный алгоритм теории графов:
Поиск кратчайшего пути в графе. В основе идеи лежит принцип динамического программирования.

В качестве графа у нас будет Лабиринт, мы будем в нём искать кратчайший путь из одной клетки в другую.

Прошу перед уроком ознакомиться со следующими материалами:
1. Очередь в C#.
2. Поиск в ширину в графе.
Отчёт отправил: 7980. Сергей Лузум Выполнено за 2 час. 00 мин. [Показать отчёт]
Научился: 1. Освоил алгоритм поиска в ширину. 2. Приобрёл опыт работы с очередью. 
Сложности: Ничего!) 
Комментарии: Очень интересный и понятный урок!) 
21 ФИНАЛЬНЫЙ УРОК 00:23:23 31 чел. ★ 4.9 $
  Задание
Записать видео обзор твоих лучших программ этого курса.
22 VIP. Простые числа. Оптимизация алгоритма 01:19:28 37 чел. ★ 5 $
  Пишем функцию для поиска простых чисел и
поэтапно оптимизируем её в двух направлениях.
  Итого:   22 видеоурока общей продолжительностью 9 час. 57 мин. 24 чел. ★ 4.96  
  Финалисты:   Елена,   alexmail19Q,   Максим Лапшинов,   Андрей Поляков,   Vera,   Иван,   Артём,   Tekashnik,   Михаил Ермишин,   Николай,   Alcatraz,   Den Andreevich,   Дмитрий,   Иван Воронин,   Ильшат,   Алексей В.,   Новопашин Владимир,   Сергей Зулкарнаев,   Алексей Малышев,   Александр,   Sergio,   Сергей Стефаненко,   Денис,   chokayes .

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




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

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

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

Ты в любой момент сможешь отписаться от рассылки.
Научился: Повторил создание видео обзоров.
Трудности: Кратко рассказать про программу заливки области.
Курс очень понравился, спасибо, Евгений Витольдович :)
Трудности: Сделать видео обзор
мне не нравится делать видео обзоры, сделал какой не какой обзор и воздуха не хватает и путаюсь еще я с обзором и лезят ко мне когда я за компом ужас :-)