├── .gitignore ├── cpp └── lectures │ ├── C++_Лекции.pdf │ ├── run │ ├── main.typ │ ├── 2024-09-13.typ │ ├── 2024-10-18.typ │ ├── 2024-09-20.typ │ └── 2024-11-01.typ ├── algo ├── lectures │ ├── run │ ├── Алгоритмы_Лекции.pdf │ ├── zip-tree-skip-list.jpg │ ├── zip-tree-insert-delete.jpg │ ├── main.typ │ ├── 2024-11-19.typ │ ├── 2024-09-10.typ │ ├── 2024-09-03.typ │ ├── 2024-10-08.typ │ ├── 2024-09-17.typ │ ├── 2024-11-05.typ │ ├── 2024-09-24.typ │ ├── 2024-11-12.typ │ └── 2024-10-01.typ └── seminars │ ├── run │ ├── Алгоритмы_Семинары.pdf │ ├── 2024-09-14.typ │ ├── 2024-09-21.typ │ ├── 2024-09-09.typ │ └── main.typ ├── bd └── lectures │ ├── run │ ├── Базы_Данных_Лекции.pdf │ ├── 2025-01-17.typ │ └── main.typ ├── edu ├── lectures │ ├── run │ ├── Современное_образование_Лекции.pdf │ ├── 2024-09-04.typ │ └── main.typ ├── seminars │ ├── run │ ├── Совеменное_образование_Семинары.pdf │ ├── main.typ │ ├── 2024-09-25.typ │ ├── 2024-09-11.typ │ ├── 2024-10-09.typ │ ├── 2024-09-18.typ │ ├── 2024-10-23.typ │ └── 2024-11-06.typ └── homeworks │ ├── book_review │ ├── Чубий_Взгляд_кролика_Эссе.pdf │ └── run │ └── book_table │ ├── run │ └── Чубий_Взгляд_кролика_Вопросы_по_книге.pdf ├── kpo └── lectures │ ├── run │ ├── Конструирование_прогаммного_обеспечения_Лекции.pdf │ ├── main.typ │ └── 2025-01-11.typ ├── lang └── lectures │ ├── run │ ├── Формальные_языки_и_автоматы_Лекции.pdf │ ├── main.typ │ └── 2025-01-17.typ ├── os ├── lectures │ ├── run │ ├── Основы_операционных_систем_Лекции.pdf │ ├── main.typ │ ├── 2024-09-02.typ │ ├── 2024-12-16.typ │ └── 2024-09-16.typ └── seminars │ ├── run │ ├── Основы_операционных_систем_Семинары.pdf │ ├── 2024-09-20.typ │ ├── main.typ │ ├── 2024-09-06.typ │ └── 2024-09-13.typ ├── prob ├── homeworks │ ├── run │ ├── Теория_Вероятностей_Домашние_задания.pdf │ ├── main.typ │ ├── to-2024-09-30.typ │ ├── to-2024-10-13.typ │ ├── to-2024-09-16.typ │ └── to-2024-10-07.typ ├── lectures │ ├── run │ ├── deutsche_mark_gauss.jpg │ ├── Теория_Вероятностей_Лекции.pdf │ ├── main.typ │ ├── 2024-09-06.typ │ ├── geom_prob.svg │ ├── 2024-12-13.typ │ ├── 2024-09-27.typ │ ├── 2024-09-13.typ │ ├── cond_prob.svg │ ├── 2024-11-15.typ │ ├── 2024-09-20.typ │ ├── 2024-10-18.typ │ ├── 2024-11-01.typ │ └── romeo.svg └── seminars │ ├── run │ ├── Теория_Вероятностей_Семинары.pdf │ ├── 2024-09-09.typ │ ├── main.typ │ ├── 2024-11-25.typ │ ├── 2024-10-07.typ │ ├── 2024-09-23.typ │ ├── 2024-09-16.typ │ ├── 2024-09-30.typ │ ├── 2024-11-11.typ │ ├── 2024-10-14.typ │ ├── func.svg │ └── hystogram.svg ├── stat ├── lectures │ ├── run │ ├── Математическая_Статистика_Лекции.pdf │ ├── main.typ │ └── 2025-01-10.typ └── seminars │ ├── run │ └── main.typ ├── android └── lectures │ ├── Android_Лекции.pdf │ ├── run │ ├── main.typ │ └── 2024-09-14.typ ├── group_dynamics └── lectures │ ├── run │ ├── Групповая_динамика_Лекции.pdf │ ├── main.typ │ └── 2024-09-03.typ ├── README.md ├── utils ├── datestamp.typ ├── math.typ └── template.typ └── notes /.gitignore: -------------------------------------------------------------------------------- 1 | .stfolder 2 | .stignore 3 | -------------------------------------------------------------------------------- /cpp/lectures/C++_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/cpp/lectures/C++_Лекции.pdf -------------------------------------------------------------------------------- /algo/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /algo/seminars/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /bd/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /cpp/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /edu/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /edu/seminars/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /kpo/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /lang/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /os/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /os/seminars/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /prob/homeworks/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /prob/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /prob/seminars/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /stat/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /stat/seminars/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /algo/lectures/Алгоритмы_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/algo/lectures/Алгоритмы_Лекции.pdf -------------------------------------------------------------------------------- /android/lectures/Android_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/android/lectures/Android_Лекции.pdf -------------------------------------------------------------------------------- /android/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /bd/lectures/Базы_Данных_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/bd/lectures/Базы_Данных_Лекции.pdf -------------------------------------------------------------------------------- /algo/lectures/zip-tree-skip-list.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/algo/lectures/zip-tree-skip-list.jpg -------------------------------------------------------------------------------- /algo/seminars/Алгоритмы_Семинары.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/algo/seminars/Алгоритмы_Семинары.pdf -------------------------------------------------------------------------------- /group_dynamics/lectures/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | pwd="$(pwd)" 6 | 7 | cd ../.. 8 | ./notes open "$pwd" 9 | -------------------------------------------------------------------------------- /prob/lectures/deutsche_mark_gauss.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/prob/lectures/deutsche_mark_gauss.jpg -------------------------------------------------------------------------------- /algo/lectures/zip-tree-insert-delete.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/algo/lectures/zip-tree-insert-delete.jpg -------------------------------------------------------------------------------- /prob/lectures/Теория_Вероятностей_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/prob/lectures/Теория_Вероятностей_Лекции.pdf -------------------------------------------------------------------------------- /edu/lectures/Современное_образование_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/edu/lectures/Современное_образование_Лекции.pdf -------------------------------------------------------------------------------- /prob/seminars/Теория_Вероятностей_Семинары.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/prob/seminars/Теория_Вероятностей_Семинары.pdf -------------------------------------------------------------------------------- /edu/seminars/Совеменное_образование_Семинары.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/edu/seminars/Совеменное_образование_Семинары.pdf -------------------------------------------------------------------------------- /os/lectures/Основы_операционных_систем_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/os/lectures/Основы_операционных_систем_Лекции.pdf -------------------------------------------------------------------------------- /stat/lectures/Математическая_Статистика_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/stat/lectures/Математическая_Статистика_Лекции.pdf -------------------------------------------------------------------------------- /lang/lectures/Формальные_языки_и_автоматы_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/lang/lectures/Формальные_языки_и_автоматы_Лекции.pdf -------------------------------------------------------------------------------- /os/seminars/Основы_операционных_систем_Семинары.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/os/seminars/Основы_операционных_систем_Семинары.pdf -------------------------------------------------------------------------------- /edu/homeworks/book_review/Чубий_Взгляд_кролика_Эссе.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/edu/homeworks/book_review/Чубий_Взгляд_кролика_Эссе.pdf -------------------------------------------------------------------------------- /group_dynamics/lectures/Групповая_динамика_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/group_dynamics/lectures/Групповая_динамика_Лекции.pdf -------------------------------------------------------------------------------- /prob/homeworks/Теория_Вероятностей_Домашние_задания.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/prob/homeworks/Теория_Вероятностей_Домашние_задания.pdf -------------------------------------------------------------------------------- /edu/homeworks/book_review/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | output="Чубий_Взгляд_кролика_Эссе.pdf" 6 | 7 | typst compile main.typ "$output" 8 | zathura "$output" 9 | -------------------------------------------------------------------------------- /kpo/lectures/Конструирование_прогаммного_обеспечения_Лекции.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/kpo/lectures/Конструирование_прогаммного_обеспечения_Лекции.pdf -------------------------------------------------------------------------------- /edu/homeworks/book_table/run: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | output="Чубий_Взгляд_кролика_Вопросы_по_книге.pdf" 6 | 7 | typst compile main.typ "$output" 8 | zathura "$output" 9 | -------------------------------------------------------------------------------- /edu/homeworks/book_table/Чубий_Взгляд_кролика_Вопросы_по_книге.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kotfind/hse-se-2-notes/HEAD/edu/homeworks/book_table/Чубий_Взгляд_кролика_Вопросы_по_книге.pdf -------------------------------------------------------------------------------- /algo/seminars/2024-09-14.typ: -------------------------------------------------------------------------------- 1 | = Задача 2 | 3 | Найти подотрезок фиксированной суммы 4 | 5 | = Closest Pair 6 | 7 | == Наивный подход 8 | 9 | Сравнить все пары точек за $O(n^2)$ 10 | 11 | == Нормальный подход (Divide and Conquer) 12 | 13 | Сортируем по одной оси 14 | -------------------------------------------------------------------------------- /edu/lectures/2024-09-04.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | Обухов Алексей Сергеевич 4 | 5 | `aobuhov@hse.ru` 6 | 7 | Будем изучать образование сверху вниз (от ВУЗа до детского сада) 8 | 9 | Психологию обручения разных возрастов будем изучать в порядке от младших к 10 | старшим 11 | -------------------------------------------------------------------------------- /bd/lectures/2025-01-17.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | - Накоп (70%) 4 | - Семинары + дорешка (30% от 70%) 5 | - Групповой проект (30%) 6 | - Эссе (10%) 7 | - Квизы (10%) 8 | - Контрольная (20%) 9 | - Экзамен (30%) 10 | 11 | Автомат: если накоп >= 6, то min(накоп, 8) 12 | -------------------------------------------------------------------------------- /os/seminars/2024-09-20.typ: -------------------------------------------------------------------------------- 1 | = Переменные окружающей среды 2 | 3 | Полная сигнатура функции `main`: 4 | ```c 5 | int main(int argc, char** argv, char** envp); 6 | ``` 7 | 8 | `envp` всегда завершается символом `NULL`. 9 | 10 | = Изменение пользовательского контекста 11 | 12 | Есть системный вызов `exec`. 13 | 14 | Прямого доступа к нему нет --- есть обертки 15 | -------------------------------------------------------------------------------- /algo/seminars/2024-09-21.typ: -------------------------------------------------------------------------------- 1 | = Задача 2 | 3 | Дано два массива `a` и `b` хотим массив `num` такой, что 4 | ``` 5 | num[i] = # способов выбрать j, k, что a[j] + a[k] = i 6 | ``` 7 | 8 | == Решение 9 | 10 | Составим два многочлена: 11 | $ 12 | A(x) = x^(a_0) + x^(a_1) + ... + x^(a_n) \ 13 | B(x) = x^(b_0) + x^(b_1) + ... + x^(b_n) 14 | $ 15 | 16 | Перемножим их 17 | -------------------------------------------------------------------------------- /group_dynamics/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Групповая динамика", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | year: [2024--2025], 9 | body, 10 | ) 11 | 12 | #datestamp("2024-09-03") 13 | #include "./2024-09-03.typ" 14 | -------------------------------------------------------------------------------- /prob/seminars/2024-09-09.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | Наталья Васильевна Сизых 4 | 5 | #figure( 6 | caption: "Облако", 7 | table( 8 | columns: 2, 9 | [Link:], `mega.nz/login`, 10 | [Login:], `tv.24-25@yandex.ru`, 11 | [Pass:], `tv.24-25`, 12 | ) 13 | ) 14 | 15 | $ "Итог" = 0.1 dot "ИДЗ" + 0.25 dot "КР" + 0.15 dot "Сем" + 0.5 dot "Экз" $ 16 | -------------------------------------------------------------------------------- /bd/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Базы Данных", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Брейман Александр", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2025-01-17") 14 | #include "2025-01-17.typ" 15 | -------------------------------------------------------------------------------- /algo/seminars/2024-09-09.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | Семинарская оценка --- работа на семинаре, задачки на дом (до следующего 4 | семинара) 5 | 6 | Посещение не учитывается 7 | 8 | == Проверка цикличности списка (алгоритм зайца и черепахи) 9 | 10 | Черепаха прыгает на 1, заяц --- на два 11 | 12 | Если заяц упирается в конец списка, то ацикличен 13 | 14 | Если заяц и черепаха встретились, то цикличен 15 | -------------------------------------------------------------------------------- /android/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Android", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Макаров Сергей Львович", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-14") 14 | #include "./2024-09-14.typ" 15 | -------------------------------------------------------------------------------- /stat/seminars/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Математическая статистика", 6 | subtitle: "Семинары", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Сизых Наталья Васильевна", 9 | year: [2024--2025], 10 | outline_opts: ( 11 | depth: 1, 12 | ), 13 | body, 14 | ) 15 | -------------------------------------------------------------------------------- /lang/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Формальные языки и автоматы", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Игнатьев Валерий Николаевич", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2025-01-17") 14 | #include "2025-01-17.typ" 15 | -------------------------------------------------------------------------------- /kpo/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Конструирование прогаммного обеспечения", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Сергей Александрович Виденин", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2025-01-11") 14 | #include "2025-01-11.typ" 15 | -------------------------------------------------------------------------------- /edu/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Современное образование", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Обухов Алексей Сергеевич", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-04") 14 | #include "./2024-09-04.typ" 15 | 16 | #datestamp("2024-09-11") 17 | #include "./2024-09-11.typ" 18 | -------------------------------------------------------------------------------- /stat/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Математическая Статистика", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Горяинова Елена Рудольфовна", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2025-01-10") 14 | #include "2025-01-10.typ" 15 | 16 | #datestamp("2025-01-17") 17 | #include "2025-01-17.typ" 18 | -------------------------------------------------------------------------------- /android/lectures/2024-09-14.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | Сайт: `https://makse.site/GA/` 4 | 5 | Препод: Макаров Сергей Львович 6 | 7 | Экзамен --- 7 более сложный задач 8 | 9 | Способы разработки под Андроид: 10 | - Нативный (мы) 11 | - Гибридный 12 | - Веб приложение 13 | 14 | Дедлайн --- конец третьего модуля (до "экзамена") 15 | 16 | Сдача заданий в Zoom-е 17 | 18 | Первая пара --- лекция 19 | Вторая пара --- сдача заданий 20 | 21 | За четкое следование методичке ставится 8. 10 ставится за дополнительные фичи. 22 | -------------------------------------------------------------------------------- /algo/seminars/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Алгоритмы", 6 | subtitle: "Семинары", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Терлыч Никита Андреевич", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-09") 14 | #include "./2024-09-09.typ" 15 | 16 | #datestamp("2024-09-14") 17 | #include "./2024-09-14.typ" 18 | 19 | #datestamp("2024-09-21") 20 | #include "2024-09-21.typ" 21 | 22 | -------------------------------------------------------------------------------- /os/seminars/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Основы операционных систем", 6 | subtitle: "Семинары", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Белов Максим Александрович", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-06") 14 | #include "./2024-09-06.typ" 15 | 16 | #datestamp("2024-09-13") 17 | #include "./2024-09-13.typ" 18 | 19 | #datestamp("2024-09-20") 20 | #include "2024-09-20.typ" 21 | -------------------------------------------------------------------------------- /prob/homeworks/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Теория Вероятностей", 6 | subtitle: "Домашние задания", 7 | notes_author: "Чубий Савва Андреевич", 8 | year: [2024--2025], 9 | outline_opts: ( 10 | depth: 1, 11 | ), 12 | body, 13 | ) 14 | 15 | #datestamp( "2024-09-16") 16 | #include "./to-2024-09-16.typ" 17 | 18 | #datestamp( "2024-09-23") 19 | #include "./to-2024-09-23.typ" 20 | 21 | #datestamp("2024-09-30") 22 | #include "to-2024-09-30.typ" 23 | 24 | #datestamp("2024-10-07") 25 | #include "to-2024-10-07.typ" 26 | 27 | #datestamp("2024-10-13") 28 | #include "to-2024-10-13.typ" 29 | 30 | -------------------------------------------------------------------------------- /cpp/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "C++", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Афонин Сергей Александрович", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-13") 14 | #include "./2024-09-13.typ" 15 | 16 | #datestamp("2024-09-20") 17 | #include "2024-09-20.typ" 18 | 19 | #datestamp("2024-09-27") 20 | #include "2024-09-27.typ" 21 | 22 | #datestamp("2024-10-04") 23 | #include "2024-10-04.typ" 24 | 25 | #datestamp("2024-10-11") 26 | #include "2024-10-11.typ" 27 | 28 | #datestamp("2024-10-18") 29 | #include "2024-10-18.typ" 30 | 31 | #datestamp("2024-11-01") 32 | #include "2024-11-01.typ" 33 | -------------------------------------------------------------------------------- /os/seminars/2024-09-06.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | Преподаватель: Белов Максим Александрович 4 | 5 | #figure( 6 | table( 7 | columns: 2, 8 | table.header[*Балл*][*Условие*], 9 | [max], [во время семинара], 10 | [0.7max], [день семинара], 11 | [0.5max], [в ближайшие шесть дней], 12 | [0], [после деделайна], 13 | ), 14 | caption: [Штрафы за сдачу задач] 15 | ) 16 | 17 | == Монолитная система vs Микроядро 18 | 19 | Микроядро состоит из отдельных модулей 20 | 21 | Монолитная система монолина 22 | 23 | == POSIX 24 | 25 | Стандарт, интерфейс взаимодействия прикладной программы и системы 26 | 27 | == Системные вызовы и библиотека libc 28 | 29 | Системный вызов --- способ для прикладной программы использовать возможности 30 | ядра 31 | -------------------------------------------------------------------------------- /edu/seminars/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Совеменное образование", 6 | subtitle: "Семинары", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Стремилова Екатерина Константиновна", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-11") 14 | #include "2024-09-11.typ" 15 | 16 | #datestamp("2024-09-18") 17 | #include "2024-09-18.typ" 18 | 19 | #datestamp("2024-09-25") 20 | #include "2024-09-25.typ" 21 | 22 | #datestamp("2024-10-09") 23 | #include "2024-10-09.typ" 24 | 25 | #datestamp("2024-10-16") 26 | #include "2024-10-16.typ" 27 | 28 | #datestamp("2024-10-23") 29 | #include "2024-10-23.typ" 30 | 31 | #datestamp("2024-11-06") 32 | #include "2024-11-06.typ" 33 | -------------------------------------------------------------------------------- /os/seminars/2024-09-13.typ: -------------------------------------------------------------------------------- 1 | = О процессах 2 | 3 | Контекст пользователя: 4 | - Стек пользователя 5 | - Динамическая память 6 | - Не инициализированные изменяемые данные 7 | - Инициализированные изменяемые данные 8 | - Инициализированные неизменяемые данные 9 | - Исполняемый код 10 | 11 | Контекст ядра: 12 | - Стек ядра 13 | - ... // TODO 14 | 15 | #figure( 16 | caption: "Специальные процессы", 17 | table( 18 | columns: 2, 19 | table.header[*PID*][*Название*], 20 | [0], [Ядро], 21 | [1], [Init (Systemd)] 22 | ) 23 | ) 24 | 25 | fork-нутый процесс наследует весь пользовательский контекст 26 | 27 | #figure( 28 | caption: "Return fork-а", 29 | table( 30 | columns: 2, 31 | [-1], [Ошибка], 32 | [0], [Ребенок], 33 | [PID ребенка], [Родитель], 34 | ) 35 | ) 36 | -------------------------------------------------------------------------------- /prob/seminars/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Теория Вероятностей", 6 | subtitle: "Семинары", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Сизых Наталья Васильевна", 9 | year: [2024--2025], 10 | outline_opts: ( 11 | depth: 1, 12 | ), 13 | body, 14 | ) 15 | 16 | #datestamp("2024-09-09") 17 | #include "./2024-09-09.typ" 18 | 19 | #datestamp("2024-09-16") 20 | #include "./2024-09-16.typ" 21 | 22 | #datestamp("2024-09-23") 23 | #include "2024-09-23.typ" 24 | 25 | #datestamp("2024-09-30") 26 | #include "2024-09-30.typ" 27 | 28 | #datestamp("2024-10-07") 29 | #include "2024-10-07.typ" 30 | 31 | #datestamp("2024-10-14") 32 | #include "2024-10-14.typ" 33 | 34 | #datestamp("2024-11-11") 35 | #include "2024-11-11.typ" 36 | 37 | #datestamp("2024-11-25") 38 | #include "2024-11-25.typ" 39 | -------------------------------------------------------------------------------- /algo/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Алгоритмы", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Мамай Игорь Борисович", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-03") 14 | #include "2024-09-03.typ" 15 | 16 | #datestamp("2024-09-10") 17 | #include "2024-09-10.typ" 18 | 19 | #datestamp("2024-09-17") 20 | #include "2024-09-17.typ" 21 | 22 | #datestamp("2024-09-24") 23 | #include "2024-09-24.typ" 24 | 25 | #datestamp("2024-10-01") 26 | #include "2024-10-01.typ" 27 | 28 | #datestamp("2024-10-08") 29 | #include "2024-10-08.typ" 30 | 31 | #datestamp("2024-10-15") 32 | #include "2024-10-15.typ" 33 | 34 | #datestamp("2024-11-05") 35 | #include "2024-11-05.typ" 36 | 37 | #datestamp("2024-11-12") 38 | #include "2024-11-12.typ" 39 | 40 | #datestamp("2024-11-19") 41 | #include "2024-11-19.typ" 42 | -------------------------------------------------------------------------------- /prob/seminars/2024-11-25.typ: -------------------------------------------------------------------------------- 1 | = Переход от ковариационной матрицы к корреляционной 2 | 3 | #let cov = "cov" 4 | 5 | $ cov(x, y) = mat( 6 | 0.37, 0.51, 0.11; 7 | 0.51, 0.25, 0.31; 8 | 0.11, 0.31, 0.4 9 | ) $ 10 | 11 | $ D_1 = 0.37; D_2 = 0.25; D_3 = 0.4 $ 12 | 13 | $ r_(x y) = mat( 14 | 1, 0.51 / (sqrt(0.37) sqrt(0.25)), 0.11/(sqrt(0.37) sqrt(0.4)); 15 | ..., 1, ...; 16 | ..., ..., 1; 17 | ) $ 18 | 19 | = Задачи 20 | 21 | == Задача 22 | 23 | Гауссовский вектор: $xi = (xi_1, xi_2)$ 24 | 25 | $ E xi = (-4, 2) $ 26 | $ cov(xi_1, xi_2) = mat( 27 | 0.6, -0.2; 28 | -0.2, 0.4; 29 | ) $ 30 | 31 | $ eta = 3 xi_1 - 4 xi_2 $ 32 | $ r_(eta xi) - ? $ 33 | $ P(eta > -15) - ?$ 34 | 35 | === Решение 36 | 37 | == Задача 38 | 39 | $ xi ~ N(m, sigma^2) $ 40 | $ M = (4; -1) $ 41 | $ xi = (xi_1, xi_2) $ 42 | $ cov = mat( 43 | 20, 20; 44 | 20, 40; 45 | ) $ 46 | 47 | Найти: 48 | $P(xi_1 - 3 xi_2 > 5) - ?; r_(xi eta) - ?;$ 49 | 50 | === Решение 51 | -------------------------------------------------------------------------------- /kpo/lectures/2025-01-11.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Введение 4 | 5 | $ O_"ДЗ" = 0.2 dot O_"ДЗ 1"+ 0.3 dot O_"ДЗ 2" + 0.5 dot O_"ДЗ 3" $ 6 | 7 | $ O_"накоп" = 0.15 dot O_"сем" + 0.15 dot O_"мини ДЗ" + 0.6 dot O_"ДЗ" $ 8 | 9 | $ O_"экз" in [0; 1] $ 10 | 11 | $ O_"итог" = match( 12 | O_"накоп" + O_"экз", "идти на экзамен"; 13 | O_"накоп" \/ 0.9, "не идти на экзамен"; 14 | ) $ 15 | 16 | Лекции относительно независимы 17 | 18 | Желательно ходить на все семинары так как будем разрабатывать проекты 19 | 20 | Будет три домашних работы 21 | 22 | = Парадигмы программирования 23 | 24 | "Каждая новая парадигма запрещает нам что-то использовать" 25 | 26 | == Инверсия зависимостей 27 | 28 | "Модуль верхнего уровня не должен зависеть от модуля нижнего уровня" 29 | 30 | Избыточный уровень абстракции запутывает программу 31 | 32 | Чтобы разорвать лишние зависимости, можно создать интерфейс: теперь реализации 33 | зависят не друг от друга, а только от интерфейса 34 | 35 | Четыре основных принципа ООП: 36 | - Наследование 37 | - Инкапсуляция 38 | - Полиморфизм 39 | - Абстракция 40 | -------------------------------------------------------------------------------- /prob/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Теория Вероятностей", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Горяинова Елена Рудольфовна", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-06") 14 | #include "./2024-09-06.typ" 15 | 16 | #datestamp("2024-09-13") 17 | #include "./2024-09-13.typ" 18 | 19 | #datestamp("2024-09-20") 20 | #include "2024-09-20.typ" 21 | 22 | #datestamp("2024-09-27") 23 | #include "2024-09-27.typ" 24 | 25 | #datestamp("2024-10-04") 26 | #include "2024-10-04.typ" 27 | 28 | #datestamp("2024-10-11") 29 | #include "2024-10-11.typ" 30 | 31 | #datestamp("2024-10-18") 32 | #include "2024-10-18.typ" 33 | 34 | #datestamp("2024-11-01") 35 | #include "2024-11-01.typ" 36 | 37 | #datestamp("2024-11-08") 38 | #include "2024-11-08.typ" 39 | 40 | #datestamp("2024-11-15") 41 | #include "2024-11-15.typ" 42 | 43 | #datestamp("2024-11-22") 44 | #include "2024-11-22.typ" 45 | 46 | #datestamp("2024-11-29") 47 | #include "2024-11-29.typ" 48 | 49 | #datestamp("2024-11-06") 50 | *\*Тут пропущена лекция\** 51 | 52 | #datestamp("2024-12-13") 53 | #include "2024-12-13.typ" 54 | -------------------------------------------------------------------------------- /os/lectures/main.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/template.typ": conf 2 | #import "/utils/datestamp.typ": datestamp 3 | 4 | #show: body => conf( 5 | title: "Основы операционных систем", 6 | subtitle: "Лекции", 7 | notes_author: "Чубий Савва Андреевич", 8 | teacher: "Карпов Владимир Ефимович", 9 | year: [2024--2025], 10 | body, 11 | ) 12 | 13 | #datestamp("2024-09-02") 14 | #include "./2024-09-02.typ" 15 | 16 | #datestamp("2024-09-09") 17 | #include "./2024-09-09.typ" 18 | 19 | #datestamp("2024-09-16") 20 | #include "./2024-09-16.typ" 21 | 22 | #datestamp("2024-09-23") 23 | #include "2024-09-23.typ" 24 | 25 | #datestamp("2024-09-30") 26 | #include "2024-09-30.typ" 27 | 28 | #datestamp("2024-10-07") 29 | #include "2024-10-07.typ" 30 | 31 | #datestamp("2024-10-14") 32 | #include "2024-10-14.typ" 33 | 34 | #datestamp("2024-10-21") 35 | #include "2024-10-21.typ" 36 | 37 | #datestamp("2024-11-11") 38 | #include "2024-11-11.typ" 39 | 40 | #datestamp("2024-11-18") 41 | *\*Тут пропущена одна лекция\** 42 | 43 | #datestamp("2024-11-25") 44 | #include "2024-11-25.typ" 45 | 46 | #datestamp("2024-12-02") 47 | #include "2024-12-02.typ" 48 | 49 | #datestamp("2024-12-09") 50 | *\*Тут пропущена одна лекция\** 51 | 52 | #datestamp("2024-12-16") 53 | #include "2024-12-16.typ" 54 | -------------------------------------------------------------------------------- /edu/seminars/2024-09-25.typ: -------------------------------------------------------------------------------- 1 | = Разработка этапов актуализации знаний и первичного получения новых знаний 2 | 3 | == Этап актуализации знаний 4 | 5 | Актуализация знаний --- тип занятий, который 6 | - готовит к восприятию нового материала 7 | - напоминает изученные темы 8 | - этап "пробуждения" 9 | 10 | Форматы проведения актуализации: 11 | - "Шкатулка идей, понятий, имен": 12 | 13 | Вместе создаем "шкатулку" понятий 14 | 15 | - "За-Против" ("Pro et Contra"): 16 | 17 | Варианты: 18 | - Перекрестные дебаты 19 | - Аргументы по поднятию руки 20 | - Метод "Углов". Школьники расходятся по углам по мнениям 21 | и называют свои мнения 22 | 23 | - "Аргументация" 24 | 25 | - "Интересный факт": 26 | 27 | Интересный факт "вкидывается" учителем, а потом развивается до полноценного 28 | сюжета 29 | 30 | - "Решение ситуационных задач проблемного характера" 31 | 32 | - "Согласен -- Не согласен" ("Case study") 33 | 34 | - "Визуальный ряд" 35 | 36 | - "Ассоциативный ряд" 37 | 38 | - "Задания -- загадки" 39 | 40 | - "Викторина" 41 | 42 | == Комплексный подход 43 | 44 | - Новые знания должны быть связаны со старыми, встраиваться 45 | в сеть уже освоенного материала 46 | - Развитие знаний должно быть по таксономии Блума (есть теории отрицающие это) 47 | - Знания должны быть живыми и многоуровневыми, применимыми в реальных ситуациях 48 | 49 | == Базовая структура занятия 50 | 51 | + Мотивирование на учебную деятельность 52 | + Актуализация знаний --- проверка, что запомнили с прошлого урока 53 | + Постановка проблемы 54 | + *TODO* 55 | 56 | == Этап первичного получения новых знаний 57 | 58 | Урок начинается с объяснения, зачем изучать данную тему. 59 | 60 | Форматы: 61 | - Ассоциативные карты 62 | - Mind Map 63 | - Подводящий (сократический) диалог 64 | - Ролевая игра 65 | - Решение кейсов 66 | - Работа с новым материалом в малых группах 67 | - "Интервьюирование" преподавателя 68 | -------------------------------------------------------------------------------- /prob/seminars/2024-10-07.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Распределения 4 | 5 | #figure( 6 | caption: [Плотность распределения], 7 | image("graph.svg", height: 3cm) 8 | ) 9 | 10 | #figure( 11 | caption: [Гистограмма], 12 | image("./hystogram.svg", height: 3cm) 13 | ) 14 | 15 | = Задачи 16 | 17 | == Задача 18 | 19 | #blk[ 20 | В этой задаче я, видимо, неправильно переписал табличку с условием, но 21 | матожидаение считается по-обычному: $M(x) = sum x_i p_i$. 22 | ] 23 | 24 | Ежедневные расходы 100'000 рублей. Число машин, проданных за день ($x$): 25 | #figure( 26 | table( 27 | columns: 10, 28 | $x$, $1$, $2$, $3$, $4$, $5$, $6$, $7$, $8$, $9$, 29 | $p$, $0.25$, $0.2$, $0.1$, $0.1$, $0.1$, $0.1$, $0.05$, $0.025$, $0.025$ 30 | ) 31 | ) 32 | Цена машины 150'000 33 | 34 | $ "П" = 150 x - 100 $ 35 | $ M("П") = M(150 x - 100) = 150 M(x) - 100 $ 36 | $ M(x) = 0.025 + 1 dot 0.2 + ... = 2.675 $ 37 | $ M("П") = 301'100 $ 38 | 39 | == Задача 40 | 41 | #figure( 42 | table( 43 | columns: 7, 44 | $xi$, $0$, $1$, $2$, $3$, $4$, $5$, 45 | $p$, $1/2$, $1/4$, $1/8$, $1/16$, $1/32$, $1/32$, 46 | ) 47 | ) 48 | 49 | $ M(xi) = 0 + 1/4 + 1/4 + 3/16 + ... = 31/32 $ 50 | 51 | == Задача 52 | 53 | #figure( 54 | table( 55 | columns: 3, 56 | $X$, $a$, $-a$, 57 | $P$, $1/2$, $1/2$, 58 | ) 59 | ) 60 | 61 | $ M(x) = 0 $ 62 | $ D(x) = M(x^2) - (M(x))^2 = a^2 - 0 = a^2 $ 63 | 64 | == Задача 65 | 66 | $ n = 10'000; p = 0.2 $ 67 | 68 | $ x ~ "Bi"(n, p) = "Bi"(10'000, 0.2) $ 69 | 70 | $ M(x) = n p = 2'000 $ 71 | $ D(x) = n p q = 1'600 $ 72 | $ sigma(x) = 40 $ 73 | 74 | == Задача 11 75 | 76 | $ x ~ "Bi"(1; 1/2) $ 77 | 78 | $ (M(x))^2 = (n p)^2 = (1 dot 1/2)^2 = 1/4 $ 79 | $ D(x) = n p q = 1 dot 1/2 dot 1/2 = 1/4 $ 80 | $ D(x) - (M(x))^2 = 0 $ 81 | 82 | == Задача 28 (а) 83 | 84 | $ p = 0.3 $ 85 | $ n = 200 $ 86 | 87 | $ x ~ "Bi"(200, 0.3) $ 88 | 89 | $ M(x) = n p = 200 dot 0.3 = 60 $ 90 | $ D(x) = n p q = 42 $ 91 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 2 курс. Программная Инженерия. НИУ ВШЭ. Конспекты 2 | ## Быстрый доступ 3 | 4 | *Предмет* | *Лекции* | *Семинары* | *ДЗ* 5 | -------- |:--------:|:----------:|:----: 6 | Алгоритмы и структуры данных | [link](https://kotfind.github.io/hse-se-2-notes/algo/lectures/Алгоритмы_Лекции.pdf) | [link](https://kotfind.github.io/hse-se-2-notes/algo/seminars/Алгоритмы_Семинары.pdf) | 7 | Групповая динамика | [~~link~~](https://kotfind.github.io/hse-se-2-notes/group_dynamics/lectures/Групповая_динамика_Лекции.pdf) | | 8 | Основы операционных систем | [link](https://kotfind.github.io/hse-se-2-notes/os/lectures/Основы_операционных_систем_Лекции.pdf) | [link](https://kotfind.github.io/hse-se-2-notes/os/seminars/Основы_операционных_систем_Семинары.pdf) | 9 | Программирование на С++ | [link](https://kotfind.github.io/hse-se-2-notes/cpp/lectures/C++_Лекции.pdf) | | 10 | Разработка на Андроид (НИС) | [~~link~~](https://kotfind.github.io/hse-se-2-notes/android/lectures/Android_Лекции.pdf) | | 11 | Современное образование (майнор) | [~~link~~](https://kotfind.github.io/hse-se-2-notes/edu/lectures/Современное_образование_Лекции.pdf) | [link](https://kotfind.github.io/hse-se-2-notes/edu/seminars/Совеменное_образование_Семинары.pdf) | [link](https://kotfind.github.io/hse-se-2-notes/edu/homeworks/) 12 | Теория вероятностей | [link](https://kotfind.github.io/hse-se-2-notes/prob/lectures/Теория_Вероятностей_Лекции.pdf) | [link](https://kotfind.github.io/hse-se-2-notes/prob/seminars/Теория_Вероятностей_Семинары.pdf) | [link](https://kotfind.github.io/hse-se-2-notes/prob/homeworks/Теория_Вероятностей_Домашние_задания.pdf) 13 | 14 | Зачеркнуты ссылки на те конспекты, которые я больше не обновляю. 15 | 16 | ## Информация 17 | 18 | Это конспекты предметов 2-ого курса Программной инженерии (НИУ ВШЭ) Си-потока, 19 | написанные мной. Большинство лекций законспектировано подробно, большинство 20 | семинаров почти не законспектированы, по некоторым предметам есть домашки. 21 | 22 | О найденный ошибках и опечатках, дополнениях и предложениях можно писать мне в 23 | телеграмм ([@kotfind](https://t.me/kotfind)) или сюда в issues. 24 | -------------------------------------------------------------------------------- /prob/seminars/2024-09-23.typ: -------------------------------------------------------------------------------- 1 | Пусть $A_1, A_2, ..., A_k$ --- полная группа событий. 2 | Делаем $n$ испытаний, хотим $m_i$ событий $A_i$, где $m_1 + m_2 + ... + m_k = n$: 3 | $ P = n! dot (p_1^(m_1) p_2^(m_2) ... p_k^(m_k)) / (m_1! m_2! ... m_k!) $ 4 | 5 | = Задачи 6 | 7 | == Задача 10 8 | 9 | $ P(A) = P_3(2) + P_3(3) = 3 dot 0.7^2 dot 0.3 + 0.7^3 = 0.784 $ 10 | 11 | == Задача 11 12 | 13 | 8-ой выстрел --- обязательно промах 14 | 15 | В первых семи --- два промаха 16 | 17 | $ P = P_7(5) dot 0.2 = C^5_7 dot 0.8^5 dot 0.2^2 dot 0.2 = 0.058 $ 18 | 19 | == Задача 18 20 | 21 | См. 11 22 | 23 | $ P_20(9) dot p = C^9_19 p_9 q_10 dot p = 0.001 $ 24 | 25 | == Задача 25 26 | 27 | $ n = 3 $ 28 | $ p = 0.05 $ 29 | $ p(n + 1) = 0.05 (3 + 1) = 0.2 $ 30 | $ floor(0.2) = 0 $ 31 | 32 | == Задача 2 33 | 34 | $ P(A) = p + (1 - p)^2 p + (1 - p)^4 p $ 35 | $ P(B) = (1 - p) p + (1 - p)^3 p + (1 - p)^5 p $ 36 | $ P(C) = (1 - p)^6 $ 37 | $ P(D) = (1 - p)^6 + (1 - p)^5 p $ 38 | 39 | == Задача 4 40 | 41 | $ P(A-B-A) = P(A) P(B) + (1 - P(A))P(B)P(A) $ 42 | $ P(B-A-B) = P(A) P(B) + (1 - P(B))P(A)P(B) $ 43 | 44 | == Задача 45 | 46 | 20 мячей: 47 | - 12 новых 48 | - 8 игранных 49 | 50 | - извлекают 2, играют, потом возвращают 51 | - потом снова извлекают 2 --- они новые 52 | - с какой вероятностью первые два тоже были новые? 53 | 54 | $H_1$ --- первые два оба новые 55 | $H_2$ --- новый -- старый 56 | $H_3$ --- оба старые 57 | 58 | $ P(H_1) = C^2_12 / C^2_20 = 33 / 95 $ 59 | $ P(H_2) = (C^1_12 C^1_8) / C^2_20 = 48/95 $ 60 | $ P(H_3) = C^2_8 / C^2_20 = 14/95 $ 61 | 62 | $A$ --- вторые два мяча новые 63 | 64 | $ P(A | H_1) = C^2_10 / C^2_20 = 9/38 $ 65 | $ P(A | H_2) = (C^1_10 C^1_20) / C^2_10 = 11/38 $ 66 | $ P(A | H_3) = C^2_12 / C^2_20 = 11/38 $ 67 | 68 | $ P(H_1 | A) = (P(H_1) P(A | H_1)) / (sum^3_(i = 1) P(H_i)P(A | H)i) $ 69 | 70 | == Задача 71 | 72 | 4 кубика: 73 | - 3 правильных 74 | - 1 фальшивый $P(6) = 1/2; P(i) = 0.1$ 75 | 76 | $H_1$ --- выбрали правильный 77 | $H_2$ --- выбрали фальшивый 78 | 79 | $A$ --- выпала шестерка 80 | 81 | $ P(A | H_1) = 1/6 $ 82 | $ P(A | H_2) = 1/2 $ 83 | $ P(H_2 | A) = (P(A | H_2)P(H_2)) / (P(A | H_2)P(H_2) + P(A | H_1)P(H_1)) $ 84 | -------------------------------------------------------------------------------- /utils/datestamp.typ: -------------------------------------------------------------------------------- 1 | #let _parse_date(date_str) = { 2 | let date_match = date_str.match(regex("^(\d{4})[-](\d{2})[-](\d{2})$")) 3 | if date_match == none { 4 | panic("failed to parse date (YYYY-MM-DD): " + date_str) 5 | } 6 | let (year, month, day) = date_match.captures 7 | 8 | datetime( 9 | year: int(year), 10 | month: int(month), 11 | day: int(day), 12 | ) 13 | } 14 | 15 | #let datestamp(date) = { 16 | // Parse date 17 | if type(date) == str { 18 | date = _parse_date(date) 19 | } 20 | assert(type(date) == datetime) 21 | 22 | // Set mark (label) 23 | [#metadata(date) ] 24 | 25 | // Print stamp 26 | let stroke = red + 0.5pt; 27 | block( 28 | breakable: false, 29 | grid( 30 | columns: (1fr, auto, 1fr), 31 | align: horizon + center, 32 | line(length: 100%, stroke: stroke), 33 | block( 34 | inset: 5pt, 35 | radius: 5pt, 36 | stroke: stroke, 37 | date.display() 38 | ), 39 | line(length: 100%, stroke: stroke), 40 | ) 41 | ) 42 | } 43 | 44 | #let datestamped_outline( 45 | title: "Содержание", 46 | depth: none, 47 | indent: 1cm, 48 | fill: repeat([.]), 49 | ) = context { 50 | let items = query(selector(label("datestamp")).or(selector(heading))) 51 | 52 | for item in items { 53 | if item.func() == heading { 54 | let level = item.level 55 | if depth == none or level <= depth { 56 | let ind = h((level - 1) * indent) 57 | let name = item.body 58 | let dots = box(width: 1fr, fill) 59 | let loc = item.location() 60 | let page = loc.page() 61 | link(loc)[#ind#name #dots #page\ ] 62 | } 63 | } else if item.func() == metadata { 64 | let date = item.value 65 | let loc = item.location() 66 | 67 | let data = grid( 68 | columns: (auto, 1fr), 69 | align: horizon + center, 70 | column-gutter: 5pt, 71 | 72 | text(fill: red, date.display()), 73 | line(length: 100%, stroke: 0.5pt + red) 74 | ) 75 | 76 | link(loc, data) 77 | } else { 78 | panic("unreachable") 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /utils/math.typ: -------------------------------------------------------------------------------- 1 | #let def( 2 | body, 3 | supplement: "Опр.", 4 | ) = context { 5 | let sup = text(weight: "bold", supplement) 6 | let sup_wid = measure(sup).width 7 | par(hanging-indent: sup_wid)[#sup #body] 8 | } 9 | 10 | #let defitem(body) = { 11 | [#strong(body)] 12 | } 13 | 14 | // TODO: defenitions list 15 | 16 | #let blk( 17 | title: none, 18 | body, 19 | ) = context { 20 | let has_title = if type(title) == str or type(title) == content { 21 | true 22 | } else if title == none { 23 | false 24 | } else { 25 | panic("title must be content or string, not " + type(title)) 26 | } 27 | 28 | let stroke = black + 0.5pt 29 | let padding = 10pt 30 | let title_padding = 5pt 31 | 32 | let title_blk = block( 33 | inset: title_padding, 34 | radius: title_padding, 35 | stroke: stroke, 36 | fill: white, 37 | strong(title), 38 | ) 39 | 40 | let title_hei = measure(title_blk).height 41 | 42 | if has_title { 43 | v(5pt) 44 | } 45 | block( 46 | inset: padding, 47 | radius: padding, 48 | stroke: stroke, 49 | width: 100%, 50 | { 51 | if has_title { 52 | place( 53 | top + left, 54 | dy: -title_hei / 2 - padding, 55 | dx: -2 * padding, 56 | title_blk, 57 | ) 58 | v(5pt) 59 | } 60 | body 61 | } 62 | ) 63 | } 64 | 65 | #let proof( 66 | supplement: "Док-во", 67 | body 68 | ) = { 69 | blk(title: "Док-во", body) 70 | } 71 | 72 | 73 | #let match(..args) = { 74 | let cases = () 75 | 76 | let pushed_otherwise_case = false 77 | for arg in args.pos() { 78 | /// each line should be in form 79 | /// '{value}, {condition};' 80 | /// or (for the last line) 81 | /// '{value};' 82 | assert(arg.len() == 2 or arg.len() == 1); 83 | 84 | let value = arg.at(0) 85 | 86 | if arg.len() == 2 { 87 | assert(pushed_otherwise_case == false) 88 | 89 | let cond = arg.at(1) 90 | 91 | cases.push($#value", " space &"if" space #cond$) 92 | } else { 93 | cases.push($#value", " space &"otherwise"$) 94 | 95 | pushed_otherwise_case = true 96 | } 97 | } 98 | 99 | math.cases(..args.named(), ..cases) 100 | } 101 | 102 | -------------------------------------------------------------------------------- /edu/seminars/2024-09-11.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | Препод: Стремилова Екатерина Константиновна 4 | 5 | Email: `estremiloca@hse.ru` 6 | 7 | Нет четкой параллели между лекциями и семинарами 8 | 9 | Семинары о разработке занятий 10 | 11 | $ "Итог" = 0.5 dot "Задание" + 0.3 dot "Текущие" + 0.2 dot "Посещаемость" $ 12 | 13 | + Посещаемость + пунктуальность 14 | + Выполнение текущих заданий (их мало) 15 | - Работа с книгой 16 | - Работа с фильмами 17 | + Выполнение итогового задания 18 | 19 | Работа на семинарах поможет в итоговой работе 20 | 21 | Итоговый проект либо в парах, либо в одиночку 22 | 23 | Используем MTS Link и Miro 24 | 25 | = Современное образование 26 | 27 | Мегатренды: 28 | + Демографические диспропорции 29 | + Высокий темп урбанизации 30 | + Изменения в экономике и глобальный дисбаланс ресурсов 31 | + Конвергенции новый технологий: нано, био, ... 32 | + Пересмотр этический норм 33 | + Изменение модели взаимодействия государства и гражданина 34 | + Изменение структуры и роли семьи 35 | 36 | Контекст образования напрямую связан с требованиями к сотруднику 37 | 38 | Концепция BANI мира 39 | 40 | = Универсальные компетенции и грамотность 41 | 42 | Компетентность --- интегрированный набор знаний, навыков и деятельностных 43 | установок 44 | 45 | - Знания --- это факты, цифры, идеи, теории 46 | - Навыки --- это способности совершать конкретные действия 47 | - Деятельностное установки --- принципы, опираясь на которые человек реагирует 48 | на идеи, людей, ситуации 49 | 50 | Компетентность --- это мастерство в решении определенных задач 51 | 52 | Универсальные компетентности 53 | - Компетентность мышления 54 | - Компетентность взаимодействия с собой 55 | - Компетентность взаимодействия с другими людьми 56 | 57 | - Компетенция (более узкое) --- для конкретной работы, задачи 58 | - Компетентность (более широкое) --- способность применять свои навыки для разных 59 | ситуаций 60 | 61 | Проблема переноса: есть знания, но не знают, как приложить 62 | 63 | *4k*: 64 | - Критическое мышление 65 | - Креативноcть 66 | - Коммуникация 67 | - Кооперация 68 | 69 | = Принципы современного образования 70 | 71 | - Понимание, вместо запоминания 72 | - Развитие самостоятельности 73 | - Способы, вместо решения 74 | - Высокий уровень адаптивности 75 | - Акцент на навыке коммуникации 76 | 77 | == Активное и пассивное обучение 78 | 79 | - Пассивное --- основное делает учитель 80 | - Активное --- основное делает ученик 81 | 82 | Обычно подходы используются совместно 83 | 84 | == Новые роли учителя и ученика 85 | 86 | Учитель больше не носитель знаний, наставник 87 | 88 | Ученик --- активный участник процессор 89 | -------------------------------------------------------------------------------- /prob/seminars/2024-09-16.typ: -------------------------------------------------------------------------------- 1 | = Условная вероятность 2 | 3 | Обозначение $A$ при $B$: $P(A|B)$ или $P_B (A)$ 4 | 5 | $ P(A) P(B|A) = P(A B) = P(B) P(A|B) $ 6 | 7 | = Гипотезы 8 | 9 | Формула полной вероятности: $ P(A) = sum^n_(j = 1) P(H_j) P(A|H_j) $ 10 | 11 | Формула Баеса: $ P(H_i|A) 12 | = (P(H_i)P(A|H_i)) / (sum^n_(j = 1) P(H_j) P(A|H_j)) 13 | = (P(H_i)P(A|H_i))/P(A) $ 14 | 15 | $H_i$ --- гипотезы 16 | 17 | $A$ --- событие 18 | 19 | = Задачи 20 | 21 | == Задача 22 | Два стрелка 23 | 24 | $P_1 = 0.8$ 25 | $P_2 = 0.7$ 26 | 27 | $A$ --- поражение цели хотя бы одним 28 | $A_1$ --- поражение цели первым 29 | $A_2$ --- поражение цели вторым 30 | 31 | Методы: 32 | + $P(A) = P(A_1) + P(A_2) - underbrace(P(A_1 A_2), P(A_1) P(A_2))$ 33 | + $P(A) = P(A_1) P(overline(A_2)) + P(A_2) P(overline(A_1)) + P(A_1) P(A_2)$ 34 | + $P(A) = 1 - P(overline(A_1)) P(overline(A_2))$ 35 | 36 | == Задача про Золушку 37 | 38 | $A$ --- достала хрустальную 39 | 40 | $H_i$ --- выбрала $i$-ую коробку 41 | 42 | $D_1$ --- утеряна хрустальная, $D_2$ --- утеряна серебряная 43 | 44 | $ P(D_1) = 3/5, P(D_2) = 2/5 $ 45 | $ P(A|H_1) = P(D_1) dot 2/4 + P(D_2) dot 3/4 = 3/5 dot 2/4 + 2/5 dot 3/4 = 3/5 $ 46 | $ P(A|H_2) = 2/6 $ 47 | $ P(A|H_3) = 1 $ 48 | $ P(A) = sum^3_i_1 P(H_i)P(A|H_i) = 1/3 dot (3/5 + 1/3 + 1) = 29/45 $ 49 | 50 | == Задача про Завод 51 | 52 | $ P(A) = 0.05 $ 53 | $ P(B|A) = 0.1 $ 54 | $ P(B|overline(A)) = 0.01 $ 55 | $ P(overline(B)) = ? $ 56 | 57 | $ P(B) = P(A) P(B|A) + P(overline(A)) P(overline(A)) 58 | = 0.05 dot 0.1 + 0.95 dot 0.01 = 0.0145 $ 59 | 60 | $ P(overline(B)) = 1 - P(B) = 0.9855 $ 61 | 62 | == Задача про схему 63 | 64 | #figure(image("./scheme.svg", height: 3cm)) 65 | 66 | $ P_1 = 0.8 $ 67 | $ P_2 = 0.7 $ 68 | $ P_3 = 0.6 $ 69 | $ P(A_1) = P_1 $ 70 | 71 | $ P(A) = P(A_1) dot [1 - (1 - P(A_2)) dot (1 - P(A_3))] $ 72 | 73 | == Задача 31 74 | 75 | $A, B$ --- независимы 76 | $ P(A B) = P(B) = 1/4 $ 77 | $ P(A + B) = ? $ 78 | 79 | $ P(A) P(B) underbrace(=, "т.к. независимы") = P(A B) = 1/4 $ 80 | $ P(A + B) = P(A) + P(B) - P(A B) = ... $ 81 | 82 | == Задача 32 83 | 84 | $ P(A) = 1/2, P(B) = 2/3, P(A + B) underbrace(>=, ?) 1/6 $ 85 | 86 | $ P(A + B) = P(A) + P(B) - P(A B) = 7/6 - underbrace(P(A B), <=1) >= 1/6 $ 87 | 88 | == Задача 22 89 | 90 | $ 1 - (1 - p)^n >= 0.95 $ 91 | $ 1 - 0.99^n >= 0.95 $ 92 | $ 0.05 >= 0.99^n $ 93 | $ ln(0.05) >= n ln(0.99) $ 94 | $ ln(0.05)/ln(0.99) <= n $ 95 | $ 298.07... <= n $ 96 | $ n = 299 $ 97 | 98 | == Задача 23 99 | 100 | $ 1 - (1 - 0.9)^n >= 0.999 $ 101 | $ 0.001 >= 0.1^n $ 102 | $ ln(0.001)/ln(0.1) <= n $ 103 | $ 3 <= n $ 104 | $ n = 3 $ 105 | -------------------------------------------------------------------------------- /algo/lectures/2024-11-19.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Остовы 4 | 5 | Есть *связный, неориентированный, взвешенный* граф: $G = (V, E), w: E -> RR$ 6 | 7 | Пусть: 8 | - $n = |V|$ 9 | - $m = |E|$ 10 | 11 | Варианты хранения: 12 | - 13 | - `vector> g` --- список смежности 14 | - `vector> w` --- список весов 15 | - `vector>> g` --- вектор пар `(w, v)` 16 | - `vector> g` --- список ребер `(w, u, v)` 17 | 18 | #def[ 19 | #defitem[Остовное дерево] графа $G$ --- поддерево данного графа, содержащее 20 | все вершины: $G' = (V, E'), E' subset E$ 21 | ] 22 | 23 | #def[ 24 | #defitem[Минимальный остов (MST)] взвешенного графа $G$ --- остов $G$ с 25 | минимальный суммарным весом ребер 26 | ] 27 | 28 | #def[ 29 | #defitem[Безопасный подграф] $G_b$ графа $G$, если 30 | $exists "MST" G' "графа" G: G_b subset G'$ 31 | 32 | Т.е. $G_b$ можно дополнить до какого-то MST. 33 | 34 | "Промежуточный шаг на пути к МСТ" 35 | ] 36 | 37 | #def[ 38 | Безопасное #defitem[ребро] $e$ для безопасного подграфа $G_b$, если 39 | $G_b union e$ --- безопасный граф 40 | 41 | "Если к безопасному подграфу добавить безопасное ребро, то граф останется 42 | безопасный" 43 | ] 44 | 45 | #def[ 46 | #defitem[Разрез] $V = V_1 union.sq V_2$ --- разбиение графа на два 47 | *не пересекающихся* 48 | 49 | Другое обозначение: $$--разрез 50 | ] 51 | 52 | #def[ 53 | Ребро $e = (a, b)$ #defitem[пересекает разрез] $$--разрез, если 54 | $a in V_1$ и $b in V_2$ (или наоборот) 55 | ] 56 | 57 | #def[ 58 | Разрез #defitem[совместим] с безопасным графом $G_b = (V, E_b)$, если ребра 59 | из $G_b$ не пересекают разрез. 60 | ] 61 | 62 | #def[ 63 | #defitem[$E_"cross"$] --- все ребра, которые пересекают $$--разрез 64 | ] 65 | 66 | == Лемма о безопасном ребре 67 | 68 | $e$ --- одно из ребер минимального веса в $E_"cross"$, то $e$ --- безопасное 69 | ребро 70 | 71 | === Доказательство 72 | 73 | *\* Тут должно быть доказательство \** 74 | 75 | == Алгоритм Краскала (1956) 76 | 77 | - Сортируем ребра по весу $O(m log n) = O(m log m)$ 78 | - Идем в порядке сортировки. Берем очередное ребро в остов, если оно соединяет 79 | разные компоненты связности (для этого используем DSU) 80 | 81 | Итого, 82 | - $O(m log n + m + alpha(n) n) = O(m log n)$, если нужно сортировать 83 | - $O(m + alpha(n) n)$, если уже отсортировано 84 | 85 | == Алгоритм Борувки (1926) 86 | 87 | Старт: $n$ множеств 88 | 89 | Стадия: для каждого множества смотрим на минимальное ребро, из него торчащее, и 90 | добавляем его, если оно соединяет разные компоненты 91 | 92 | $O(m log n)$ 93 | 94 | Может найти полостова за линию 95 | -------------------------------------------------------------------------------- /prob/lectures/2024-09-06.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Введение 4 | 5 | $ "Итог" = 0.1 dot "ИДЗ" + 0.15 dot "Сем" + 0.25 dot "КР" + 0.5 dot "Экз" $ 6 | Нужно набрать $4$ --- не $3.5$ 7 | 8 | По ИДЗ бывают защиты 9 | 10 | На семинарах могут быть самостоятельные 11 | 12 | Кибзун, Горяинова, Наумов "ТВ и МС. Базовый курс с примерами к задачам" 2013 или 13 | 2014 14 | 15 | КР на тему "случайные события и случайные величины (одномерные)" примерно после 16 | 7-ми занятий, в начале 20-ого модуля 17 | 18 | Экз на тему "многомерные случайные величины" 19 | 20 | = Основные понятия 21 | 22 | #def[ 23 | #defitem[Теория Вероятностей] --- раздел математики, изучающий 24 | математические модели массовых случайных явлений 25 | ] 26 | 27 | При большом кол-ве событий величина $m / n -> P$ стабилизируется 28 | 29 | $omega_1, ..., omega_n$ --- элементарные случайные события 30 | 31 | #def[ 32 | #defitem[Пространство Элементарных Событий ($Omega$)] --- совокупность элементарных случайных событий 33 | ] 34 | 35 | #def[ 36 | #defitem[Случайное событие] --- $"любое" A subset Omega$ 37 | ] 38 | 39 | #def[ 40 | #defitem[Достоверное событие] --- событие, которое происходит в опыте 41 | всегда. Совпадает с $Omega$ 42 | ] 43 | 44 | #def[ 45 | #defitem[Невозможное событие] --- событие, которое не происходит в опыте никогда. 46 | Является $emptyset$ 47 | ] 48 | 49 | Операции над множествами/ событиями: 50 | - Произведение событий $A dot B$ --- событие из $A sect B$ 51 | - Сумма событий $A + B$ --- событие из $A union B$ 52 | - Разность событий $A without B$ 53 | - Противоположное событие $overline(A) = Omega without A$ 54 | 55 | Свойства операций над событиями: 56 | - $A + A = A$ 57 | - $A dot A = A$ 58 | - $A dot Omega = A$ 59 | - $A + Omega = Omega$ 60 | - $A + B = B + A$ 61 | - $A dot B = B dot A$ 62 | - $A + (B + C) = (A + B) + C$ 63 | - $A dot (B dot C) = (A dot B) dot C$ 64 | - $overline(overline(A)) = A$ 65 | - $overline(A + B) = overline(A) dot overline(B)$ 66 | 67 | #def[ 68 | #defitem[$sigma$-алгебра событий] класс подмножеств в $cal(A)$ на 69 | пространстве элементарных событий $Omega$, если: 70 | + $Omega in cal(A)$ 71 | + $A in cal(A) => overline(A) in cal(A)$ 72 | + $forall A_1, ..., A_n, ... in cal(A) => 73 | sum_(i = 1)^infinity A_i in cal(A) and 74 | "П"_(i = 1)^infinity A_i in cal(A)$ 75 | ] 76 | 77 | = Классическое определение вероятности 78 | 79 | #def[ 80 | Пусть $Omega$ содержит *конечное* число *равновозможных* *взаимоисключающих* 81 | исходов, тогда, #defitem[вероятность события $A$:] 82 | $ P(A) = abs(A) / abs(Omega), $ где |A| -- мощность события, количество событий, входящих в $A$ 83 | ] 84 | 85 | == Свойства вероятности 86 | - $P(A) in [0; 1]$ 87 | - $P(Omega) = 1$ 88 | - Если $A dot B = emptyset$, то $P(A + B) = P(A) + P(B)$ 89 | -------------------------------------------------------------------------------- /prob/homeworks/to-2024-09-30.typ: -------------------------------------------------------------------------------- 1 | = ДЗ 3 2 | 3 | == Задача 18 4 | 5 | Среди первых 19 человек ровно 9 подошло. 20-ый тоже подошел. 6 | 7 | $ P = P_19(9) dot 0.2 = C_19^9 0.2^9 0.8^10 dot 0.2 approx 0.0010157 $ 8 | 9 | == Задача 24 10 | 11 | + $A$ --- система работает 12 | 13 | Должны работать элементы 1, 6 и любой из 2--5: 14 | 15 | $ P_(2 - 5) = 1 - (1 - p_2)(1 - p_3)(1 - p_4)(1 - p_5) 16 | = 1 - 1/2^4 = 15/16 $ 17 | 18 | $ P(A) = p_1 dot p_6 dot P_(2 - 5) = 2/3 dot 3/4 dot 15/16 = 15/32 $ 19 | 20 | + $B$ --- ровно два элемента из 2 -- 5 отказали: 21 | 22 | $ P(B) = P_4(2) = C^2_4 (1/2)^2 (1/2)^2 = 3/8 $ 23 | 24 | + $A B$, если и $B$, и 1, 6 работают: 25 | 26 | $ P(A B) = P(B) dot p_1 dot p_2 = 3/8 dot 2/3 dot 3/4 = 3/16 $ 27 | 28 | + $ P = P(B | A) = P(A B) / P(A) = (3/16) / (15/32) = 2/5 = 0.4 $ 29 | 30 | == Задача 25 31 | 32 | $ p = 0.05 $ 33 | $ n = 3 $ 34 | $ (n + 1)p = 0.05 dot 3 = 0.15 $ 35 | $ floor(0.15) = 0 $ 36 | 37 | Ответ. $0$ 38 | 39 | == Задача 26 40 | 41 | Среди первых 3-ех мальчик 1. 4-ый ребенок -- мальчик. 42 | 43 | $ P = P_3(1) dot p = C^1_3 dot p^1 dot q^2 dot p approx 0.187 $ 44 | 45 | == Задача 60 46 | 47 | Нет. Событие (2, 1) не попадает ни в одну "гипотезу". 48 | 49 | == Задача 51 50 | 51 | $ n = 8 $ 52 | $ p = 1/5 $ 53 | 54 | - (а) 55 | 56 | $ P = P_n (3) = P_8 (3) = C_8^3 dot (1/5)^3 dot (4/5)^5 approx 0.1468 $ 57 | 58 | - (б) 59 | 60 | $ P = sum_(i = 0)^3 P_n (i) 61 | = sum_(i = 0)^3 C_8^i dot (1/5)^i dot (4/5)^(8 - i) approx 0.9437 $ 62 | 63 | == Задача 52 64 | 65 | $ p = 0.2 $ 66 | 67 | Среди первых 4-ех проверок, провалено 2-е. 5-ая тоже провалена. 68 | 69 | $ P = P_4 (2) dot p = C^2_4 dot 0.2^2 dot 0.8^2 dot 0.2 approx 0.0307 $ 70 | 71 | == Задача 53 72 | 73 | В семье 2, 3, или 4 девочки 74 | 75 | $ P = sum_(i = 2)^4 P_4(i) = 76 | sum_(i = 2)^4 C^i_4 dot q^i dot p^(4-i) approx 0.6647 $ 77 | 78 | == Задача 54 79 | 80 | Должны быть исправны 8 или 9 машин 81 | 82 | $ P = sum_(i = 8)^9 P_9 (i) = sum_(i = 8)^9 C^i_9 dot 0.9^i dot 0.1^(9 - i) 83 | approx 0.7748 $ 84 | 85 | == Задача 62 86 | 87 | Взяли группу из равного количества мужчин и женщин. Из группы выбрали одного 88 | человека. 89 | 90 | $H$ --- выбрали женщину 91 | 92 | $A$ --- выбранный человек --- дальтоник 93 | 94 | Вероятность дальтонизма у мужчин значительно выше, чем у женщин, значит: 95 | $ P(H | A) << 0.5 $ 96 | 97 | Т.к. в группе мужчин и женщин одинокого, то 98 | $ P(H) = 0.5 $ 99 | 100 | Итого: 101 | $ P(H | A) < P(H) $ 102 | 103 | Ответ. Может 104 | 105 | == Задача 61 106 | 107 | $ P(H_1) + P(H_2) + ... + P(H_10) = 1 $ 108 | $ P(H_1) = P(H_2) = ... = P(H_10) = 1/10 $ 109 | $ P(H_1 + H_10) = P(H_1) + P(H_10) = 2/10 = 1/5 $ 110 | 111 | == Задача 67 112 | 113 | Да. Можно представить каждый маршрут в дереве, как гипотезу, а каждый лист, как 114 | "финальное" событие. 115 | -------------------------------------------------------------------------------- /algo/lectures/2024-09-10.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Символы Ландау 4 | 5 | #def[ 6 | #defitem[$f(x) = O(g(x)):$] 7 | $ 8 | exists C > 0 9 | exists x_0 >= 0: 10 | forall x >= x_0: 11 | abs(f(x)) <= C abs(g(x)) 12 | $ 13 | ] 14 | 15 | #def[ 16 | #defitem[$f(x) = o(g(x)):$] 17 | $ 18 | forall epsilon > 0 19 | exists x_0: 20 | forall x >= x_0: 21 | abs(f(x)) <= epsilon abs(g(x)) 22 | $ 23 | ] 24 | 25 | 26 | #def[ 27 | #defitem[$f(x) = Theta(g(x)):$] 28 | $ 29 | exists 0 < C_1 <= C_2 30 | exists x_0: 31 | C_1 abs(g(x)) <= abs(f(x)) <= C_2 abs(g(x)) 32 | $ 33 | ] 34 | 35 | == Примеры 36 | 37 | + $3n + 5sqrt(n) = O(n)$ 38 | + $n = O(n^2)$ 39 | + $n! = O(n^n)$ 40 | + $log n^2 = O(log n)$ 41 | + $k log k = n => k = O(?)$ 42 | 43 | = Мастер-теорема 44 | 45 | $T(n)$ --- время работы (количество операций) 46 | 47 | *Теор.* Пусть $ 48 | a in NN, 49 | b in RR, 50 | b > 1, 51 | c >= 0 \ 52 | T(n) = cases( 53 | O(1) &" if" n <= n_0, 54 | a T(n/b) + O(n^c) &" otherwise" 55 | ) 56 | $ тогда: $ T(n) = cases( 57 | O(n^c) &" if " c > log_b a, 58 | O(n^c log n) &" if " c = log_b a, 59 | O(n^(log_b a)) &" if " c < log_b a, 60 | ) $ 61 | 62 | == Доказательство 63 | 64 | Max глубина $= log_b n$ 65 | 66 | На $i$-ом слое: $a^i dot (n/(b^i))^c$ операций 67 | 68 | В листьях (слой $log_b n$): $a^(log_b n)$ операций 69 | 70 | $ 71 | T(n) 72 | = sum^(log_b n)_(i = 0) O(a^i (n/(b^i))^c) 73 | = O(sum^(log_b n)_(i = 0) a^i (n/(b^i))^c) 74 | = O(n^c sum^(log_b n)_(i = 0) (a/(b^c))^i) 75 | $ 76 | 77 | Пусть $q = a/(b^c)$ 78 | 79 | При $q < 1 <=> a < b^c <=> log_b a < c:$ 80 | $ 81 | O(n^c sum_i q^i) 82 | <= O(n^c sum^infinity_i q^i) 83 | = O(n^c dot 1/(1-q)) 84 | = O(n^c) 85 | $ 86 | 87 | При $q = 1:$ 88 | $ 89 | O(n^c dot log_b n) 90 | $ 91 | 92 | При $q > 1:$ 93 | $ 94 | O(n^c dot (a/(b^c))^(log_b n)) 95 | = O(n^c dot (a^(log_b n))/(b^(c dot log_b n))) 96 | = O(n^c dot (a^(log_b n))/(n^c)) = \ 97 | = O(a^(log_b n)) 98 | = O(a^((log_a n)/(log_a b))) 99 | = O(n^(1/(log_a b))) 100 | = O(n^(log_b a)) 101 | $ 102 | 103 | == Примеры 104 | 105 | === Merge sort 106 | $ 107 | T(n) = 2 dot T(n/2) + O(n)\ 108 | a = 2\ 109 | b = 2\ 110 | c = 1 111 | $ 112 | 113 | $ log_2 2 = 1 => T(n) = O(n^c log n) = O(n log n) $ 114 | 115 | === Бинпоиск 116 | 117 | $ 118 | T(n) = T(n/2) + O(1)\ 119 | a = 1\ 120 | b = 2\ 121 | c = 0 122 | $ 123 | 124 | $ log_2 1 = 0 => T(n) = O(n^c log n) = O(log n) $ 125 | 126 | === Обход полного двоичного дерева 127 | 128 | $ 129 | T(n) = 2 T(n/2) + O(1)\ 130 | a = b = 2\ 131 | c = 0 132 | $ 133 | 134 | $ log_2 2 > 0 => T(n) = O(n^(log_b a)) = O(n^1) = O(n) $ 135 | 136 | == Обобщение 137 | 138 | $ T(n) = a T(n/b) + O(n^c dot log^k n) $ 139 | $ c = log_b a=> T(n) = O(n^c log^(k + 1) n) $ 140 | -------------------------------------------------------------------------------- /group_dynamics/lectures/2024-09-03.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Команда 4 | 5 | Команда: 6 | - имеет общую цель 7 | - *TODO* 8 | 9 | Команда эффективнее одиночки 10 | 11 | #def[ 12 | #defitem[Эффект Синергии] --- совместная эффективность людей, работающих 13 | вместе, выше, чем сумма эффективностей отдельных людей 14 | ] 15 | 16 | Реймонд Мередит Белбин придумал теория создания эффективных комманд 17 | 18 | #figure( 19 | table( 20 | columns: (3cm, 1fr, 1fr), 21 | table.header([*Роль*], [*Характеристика*], [*Недостаток*]), 22 | 23 | // Роли на действие 24 | [*Мотиваторы*], 25 | [помогают задействовать все возможные ресурсы для достижения цели], 26 | [любят спорить и навязывать свое мнение], 27 | 28 | [*Исполнитель*], 29 | ["рабочие челки", делают работу и выполняют задачу], 30 | [консервативны], 31 | 32 | [*Педант*], 33 | [выполняют работу с большой тщательностью], 34 | [могут необоснованно проявлять беспокойство], 35 | 36 | // Социальные роли 37 | [*Координаторы*], 38 | [Выполняют роль руководителя], 39 | [Могут возложить на подчиненного слишком много ответственности, склонны 40 | манипулировать людьми], 41 | 42 | [*Душа команды*], 43 | [Сглаживают конфликты в команде], 44 | [Бывают нерешительны], 45 | 46 | [*Исследователи ресурсов*], 47 | [Крайне нестандартны и любопытны. Расследуют возможные альтернативы.], 48 | [Могут быстро потерять энтузиазм. Часто чрезмерно оптимистичны.], 49 | 50 | [*Генератор идей*], 51 | [Творческие люди. Придумывают новые идеи и подходы], 52 | [Часто сложно с ними взаимодействовать. Часто высокомерны. Могут 53 | пренебрегать ограничениями и требованиями], 54 | 55 | [*Аналитики-стратеги*], 56 | [Анализируют и оценивают идеи. Взвешивают все "за" и "против"], 57 | [Воспринимаются членами команды как не эмоциональные и отстраненные. 58 | Иногда черствые и чрезмерно критичные.], 59 | 60 | [*Специалисты*], 61 | [Разбираются в узкой специальности. Часто отсутствует в команде.], 62 | [Вклад ограничен из-за узкой специализации. Часто высокомерны.], 63 | ), 64 | caption: [9 командных ролей], 65 | ) 66 | 67 | Принципы формирования эффективной команды: 68 | - В команде должны быть заняты все роли (кроме, возможно специалистов). 69 | Роли могут совпадать: у каждого человека есть главная роль и поддерживающая. 70 | - Мотиватор и координатор должен быть у одного человека. 71 | Если они у разных людей, то одна роль должна быть главной, а другая --- 72 | поддерживающей. 73 | - Тестирование должно быть честным. 74 | - Сильные и поддерживающие роли не должны пересекаться. 75 | 76 | Роли по тесту Хони-Мамфорда: 77 | - Деятель 78 | - Мыслитель 79 | - Теоретик 80 | - Прагматик 81 | 82 | Роли по тесту Майерс-Бриггс: 83 | - Экстраверт -- Интровертный 84 | - Сенсорный -- Интуитивный 85 | - Логический (Мыслящий) -- Этический (Чувствующий) 86 | - Рациональный (Решающий) -- Иррациональный (Воспринимающий) 87 | -------------------------------------------------------------------------------- /prob/seminars/2024-09-30.typ: -------------------------------------------------------------------------------- 1 | = Формула Пуанкаре 2 | 3 | Пять человек подбросили шляпы в воздух и каждый поймал одну случайную. 4 | 5 | Всего $5! = 120$ перестановок 6 | 7 | Никто не получил свою шляпу: 8 | $ 120 - 5 dot (5 - 1)! + 10 dot (5 - 2)! - 10 dot (5 - 3)! + 5 dot 1 - 1 = 44 $ 9 | 10 | Общая формула: 11 | 12 | $ n(A_1 + A_2 + ... + A_n) = sum_(s = 1)^n (-1)^(s - 1) C^s_n (n - s)! 13 | = n! sum_(s = 1)^n (-1)^s/s! $ 14 | 15 | $A_i$ --- $i$ человек получили свои шляпы 16 | 17 | $ P(A) = sum_(s = 0)^n (-1)^s/s! $ 18 | 19 | = Задачи 20 | 21 | == Задача 22 | 23 | Отрезок длина 5 на две части: 2 и 3. 24 | Десять точек бросают случайным образом. 25 | Найти вероятность того, что на отрезок длины 2 попадетне менее 9 точек 26 | 27 | A - случайная точка попадет на отрезок длины 2. 28 | p = P(A) = 0.4 29 | 30 | $ P_10(>=9) = P_10(9) + P_10(10) = ...$ 31 | 32 | == Задача #footnote[Спасибо Агилю за конспектирование этой и следующей задач.] 33 | 34 | Есть 3 шара. Шары бывают или черными, или белыми. Было проведено 4 опыта. Найти 35 | апостериорные вероятности всех цветовых составов урн 36 | Результат: бчбб 37 | 38 | A - выпало бчбб 39 | $ H_1 = H_"ччч" $ 40 | $ H_2 = H_"ччб" $ 41 | $ H_3 = H_"чбб" $ 42 | $ H_4 = H_"ббб" $ 43 | 44 | $ P(H_i) = 0.25 $ 45 | 46 | $ P(A | H_1) = 0 $ 47 | $ P(A | H_2) = (1/3)^3 dot (2/3) = 2/81 $ 48 | $ P(A | H_3) = (1/3) dot (2/3)^3 = 8/81 $ 49 | $ P(A | H_4) = 0 $ 50 | 51 | $ P(A) = sum(i = 0)^4 P(H_i) dot P(A|H_i) $ 52 | 53 | $ P(H_2 | A) = P(A | H_2) dot P(H_2)/P(A) $ 54 | $ P(H_3 | A) = P(A | H_3) dot P(H_3)/P(A) $ 55 | 56 | 57 | == Задача 58 | 59 | В группе учится 30 студентов. На каждом из 14 семинаров проводится рубежный 60 | контроль случайным образом выбирает 6 студентов, чьи работы проверяются. 61 | 62 | Найти вероятность того, что работы первого студента: 63 | + Ни разу не попадут на проверку 64 | + Попадут на проверку не менее 2 раз 65 | + Найти среднее количество проверенных работ 66 | 67 | $A$ --- работа первого студента попадет на проверку. 68 | $ P(A) = 6/30 = 0.2 $ 69 | 70 | + $P_0 (14) = C^0_14 dot p^0 dot q^14 = 1 dot 1 dot (0.8)^14 =0.04398$ 71 | + $P_14 (>=2) = 1 - P_14 (0) - P_14 (1) = 0.802$ 72 | + $M(x)= n p = 14 dot 1/5 = 2.8$ 73 | 74 | == Задача 75 | 76 | $ p = 0.8 $ 77 | Цель поражена, если не менее трех попаданий. 78 | $A$ --- цель поражена 79 | $ P_n (>= 3) = P_4 (3) + P_4 (4) = ... $ 80 | 81 | == Задача 82 | 83 | Два контролера проверяют деталь. 84 | 85 | $H_i$ --- деталь попадет к $i$-ому контролеру 86 | 87 | $A$ --- деталь одобрена 88 | 89 | #figure( 90 | caption: [Условие], 91 | table( 92 | columns: 3, 93 | table.header($i$, $P(H_i)$, $P(A | H_i)$), 94 | $1$, $0.4$, $0.95$, 95 | $2$, $0.6$, $0.98$, 96 | ) 97 | ) 98 | 99 | \*Формула Баеса\* 100 | 101 | == Задача 102 | 103 | Фирма участвует в проектах. Вероятность победы в проектах 104 | соответственно: $0.9$, $0.4$, $0.8$, $0.2$ 105 | 106 | Вероятность, что фирма выиграет хотя бы в двух проектах? 107 | 108 | $ 1 - 0.1 dot 0.6 dot 0.2 dot 0.8 - "*по два*" + ... $ 109 | -------------------------------------------------------------------------------- /prob/lectures/geom_prob.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 35 | 37 | 42 | 46 | 50 | Omega 61 | A 72 | 73 | 74 | -------------------------------------------------------------------------------- /prob/seminars/2024-11-11.typ: -------------------------------------------------------------------------------- 1 | = Задачи 2 | 3 | == Задача 4 | 5 | $ x ~ N(0; 1) $ 6 | 7 | - 8 | $ F_0 (x) = Phi_0 (x) + 1/2 $ 9 | 10 | $ P(x > epsilon) = 2 Phi_0 (x) $ 11 | 12 | $ Phi_0 (1.29) = 0.4074 $ 13 | 14 | $ 2 Phi_0 (1.29) >= 0.8 $ 15 | 16 | - $...$ 17 | 18 | == Задача 19 | 20 | + Вероятность *не* заболеть 0.9998 21 | + Из 10000 не менее четырех = ? 22 | + Матожидание и дисперсия числа заболевших = ? 23 | 24 | $ q = 1 - 0.9998 = 0.0002 $ 25 | 26 | $ a = n q = 2 $ 27 | 28 | $ x ~ "П"(q) = "П"(2) $ 29 | 30 | $ P(x = k) = (a^k) / (k!) e^(-a) $ 31 | 32 | $ P(0) = e^(-q) = exp(0.0002) = 0.135 $ 33 | 34 | $ P(1) = a dot e^(-a) = 0.274 $ 35 | 36 | $ P(2) = a^2 / 2 dot e^(-a) = 0.27 $ 37 | 38 | $ P(3) = a^3 / 6 dot e^(-a) = 0.183 $ 39 | 40 | $ P(A) = 1 - P(0) - P(1) - P(2) - P(3) = ... $ 41 | 42 | == Задача 43 | 44 | $ f(x) = cases( 45 | c/x"," &x in (1, 3), 46 | 0"," &x in.not(1, 3) 47 | ) $ 48 | 49 | $ integral_1^3 f(x) d x = c integral_1^3 1/x d x = c ln x |_1^3 50 | = c (ln 3 - ln 1) = 1 $ 51 | $ c = 1/(ln 3) $ 52 | 53 | $ E x = integral_1^3 x dot c / x d x = c integral_1^3 d x = 2 / (ln 3) $ 54 | 55 | $ E x^2 = integral_1^3 x^2 c/x d x = c integral_1^3 x d x 56 | = 1/(ln 3) (x^2/2 |_1^3) = 4/(ln 3) $ 57 | 58 | $ D x = E x^2 - (E x)^2 = 4/(ln 3) - 4/((ln 3)^2) $ 59 | 60 | $ P(x > 2) = c integral_2^3 1/x d x = (ln 3 - ln 2) / (ln 3) $ 61 | 62 | == Задача 63 | 64 | - $ x ~ N(500, sigma^2) $ 65 | - $ P(|x - 500| <= 9.8) = 0.95 $ 66 | - $ P(x < 480) = ? $ 67 | 68 | - $ P(|x - 500| <= 9.8) = 2 Phi_0 (9.8 / sigma) $ 69 | 70 | $ Phi_0 (9.8 / sigma) = 1/2 dot 0.95 = 0.475 $ 71 | 72 | По таблице: $ 9.8 / sigma = 1.95 $ 73 | 74 | $ sigma = 5 $ 75 | 76 | $ P(-oo < x < 480) = Phi((480 - 500) / sigma) - Phi(-oo) 77 | = Phi(-4) + Phi(oo) = ... $ 78 | 79 | == Задача 80 | 81 | $ f(x) = 1/sqrt(pi) e^(-(x + 5)^2) $ 82 | $ E(3 - 2 x + 4 x^2) = ? $ 83 | 84 | === Решение 85 | 86 | $ sigma = 1/sqrt(2)$ 87 | 88 | $ E = -5 $ 89 | 90 | $ E x^2 = D + (E x)^2 $ 91 | 92 | $ E(3) - 2 E(x) + 4 E(x^2) = 115 $ 93 | 94 | == Задача 95 | 96 | $ x ~ N(0; 1) $ 97 | $ P = 0.7 $ 98 | $ x_0.25 $ 99 | 100 | === Решение 101 | 102 | $ P(|x - a| < epsilon) = 2 Phi(epsilon/sigma) = 0.7 $ 103 | $ Phi(epsilon) = 0.35 $ 104 | Ищем $epsilon$ из таблицы 105 | 106 | $ ... $ 107 | 108 | == Задача 109 | 110 | Отрезок $L = 35$ поделили на части по $25$ и $10$. Бросают три точки. 111 | 112 | $x$ --- число точек, попавших на 10. 113 | 114 | Построить график $F(x)$, найти $M(x), D(x)$. 115 | 116 | === Решение 117 | 118 | $ x ~ "Ber"(5/7) $ 119 | 120 | #figure(table( 121 | columns: 5, 122 | align: center, 123 | $x$, $0$, $1$, $2$, $3$, 124 | $p$, $0.364$, $0.437$, $0.1749$, $0.0233$, 125 | )) 126 | 127 | == Задача 128 | 129 | Вероятность ошибки $p = 0.21$ 130 | 131 | Наименьшее число измерений $N_"min"$, чтобы с $P > 0.92$ хотя бы один 132 | результат неверный 133 | 134 | === Решение 135 | 136 | $ 1 - P_"все верные" = 1 - 0.79^2 > 0.92 $ 137 | $ 0.08 >= 0.79^n $ 138 | $ n >= log_(0.79) 0.08 approx 10.5 $ 139 | $ n >= 11 $ 140 | -------------------------------------------------------------------------------- /prob/seminars/2024-10-14.typ: -------------------------------------------------------------------------------- 1 | = Задачи 2 | 3 | == Задача 1 4 | 5 | $ F(x) = cases( 6 | 0.0 "," & x<=3, 7 | 0.2 "," & -32, 10 | ) $ 11 | 12 | #figure( 13 | caption: [Ряд распределения], 14 | table( 15 | columns: 4, 16 | $x$, $-3$, $1$, $2$, 17 | $p$, $0.2$, $0.2$, $0.2$ 18 | ) 19 | ) 20 | 21 | == Задача 2 22 | 23 | #figure( 24 | caption: [ряд распределения], 25 | table( 26 | columns: 5, 27 | $x$, $0$, $1$, $2$, $3$, 28 | $P$, $C^0_7 dot C^3_8 / C^3_15 = 56/455$, $... = 196/455$, $... = 168/455$, $... = 35/455$ 29 | ) 30 | ) 31 | 32 | $ E(x) = 0 dot 56/455 + 1 dot 196/455 + 2 dot 168/455 + 3 dot 35/455 = 1.4 $ 33 | $ D(x) = 3 dot 7 / 15 dot (1 - 7 / 15) dot (1 - 7-1 / 15-1) = 0.64 $ 34 | 35 | Общий вид (напоминание): 36 | 37 | $ p = C^m_M dot C^n-m_N-m / C^n_N $ 38 | 39 | $ M(x) = n dot M / N $ 40 | 41 | $ D(x) = n dot M / N dot (1 - M / N) dot (1 - n-1/N-1) $ 42 | 43 | 44 | == Задача 3 45 | 46 | $N = 7, M = 4, n = 4$ 47 | 48 | #figure( 49 | caption: [ряд распределения], 50 | table( 51 | columns: 5, 52 | $x$, $1$, $2$, $3$, $4$, 53 | $P$, $4/35$, $18/35$, $12/35$, $1/35$ 54 | ) 55 | ) 56 | 57 | 58 | ВАЖНО: здесь нельзя использовать формулу гипергеометрической вероятности, тк 59 | наше распределение начинается с 1 (не с 0) 60 | 61 | $ M = 1 dot 4 / 35 + 2 dot 18 / 35 + 3 dot 12 / 35 + 4 dot 1 / 35 = 2.217 $ 62 | 63 | $ D = 0.49 $ 64 | 65 | 66 | == Задача 4 67 | 68 | $ P(x > 3) = 1 / 3 $ 69 | 70 | $ F_x(3) - ? $ 71 | 72 | $ P(x<3) + P(x=3) + P(x>3) = 1 $ 73 | 74 | $ F_x (3) = P(x<3) = 1 - P(x>3) = 2/3 $ 75 | 76 | == Задача 77 | 78 | $ p = 0.8 $ 79 | 80 | #figure( 81 | caption: [ряд распределения], 82 | table( 83 | columns: 3, 84 | $x$, $2$, $3$, 85 | $P$, $p$, $1-p$ 86 | ) 87 | ) 88 | 89 | $ M(x) = 2 p + 3 (1 - p) = 2.2 $ 90 | 91 | TODO: complete the graph 92 | 93 | $ M(x^2) =4 dot 0.8 + 9 dot 0.2 = 5 $ 94 | $ D(x) = M(x^2) - (M(x))^2 = 5 - 4.84 = 0.16 $ 95 | $ sigma(x) = 0.4 $ 96 | 97 | == Задача 98 | 99 | #figure(table( 100 | columns: 4, 101 | [], [Вклад], [Годовых], [Вероятность банкротства], 102 | $A$, $20$, $40%$, $0.3$, 103 | $B$, $18$, $30%$, $0.2$ 104 | )) 105 | 106 | $X$ --- сумма вклада 107 | 108 | Через год: 109 | 110 | $x_1 = 0$ --- оба банкрота 111 | 112 | $x_2 =28$ --- банкрот $B$ 113 | 114 | $x_3 = 23.4$ --- банкрот $A$ 115 | 116 | $x_4 = 51.4$ --- нет банкрота 117 | 118 | #figure(table( 119 | columns: 5, 120 | $X$, $0$, $23.4$, $28$, $51.4$, 121 | $p$, $0.05$, $0.24$, $0.14$, $0.56$ 122 | )) 123 | 124 | $ M(x) = 38.32 $ 125 | $ M(x^2) = 1720.672 $ 126 | $ D(x) = 252.2496 $ 127 | 128 | == Задача 129 | 130 | $ N = 2000, p = 0.001 $ 131 | $ "П"(a) = "П"(1) $ 132 | $ P(x = 2) = 1/(2! e) = 0.184 $ 133 | $ P(x >= 2) = 1 - P(0) - P(1) = 1 - 1/e - 1/e = 0.264 $ 134 | 135 | == Задача 136 | 137 | $ N = 1000 $ --- всего деталей 138 | $ n > 2 $ --- система работает, пока 139 | $ q = 0.998 $ --- безотказная работа одной детали 140 | $ p = 0.002 $ 141 | $ x ~ "П"(2) $ 142 | $ E(x) = ... $ 143 | -------------------------------------------------------------------------------- /prob/seminars/func.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 36 | 38 | 43 | 47 | 51 | f(x) 62 | x 73 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /prob/seminars/hystogram.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 36 | 38 | 43 | 47 | 51 | f(x) 62 | x 73 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /cpp/lectures/2024-09-13.typ: -------------------------------------------------------------------------------- 1 | = Введение 2 | 3 | Препод: Афонин Сергей Александрович 4 | 5 | Оценка: 6 | $ "Итог" 7 | = 0.5 dot (0.1 dot "А" + 0.2 dot "Дз1" + 0.35 dot "Дз2" + 0.35 dot "Дз3") 8 | + 0.5 dot (0.3 dot "Кр" + 0.7 dot "Экз") $ 9 | 10 | Будет: 11 | - ООП 12 | - Параллельное и конкурентное программирование 13 | - Функциональное программирование 14 | - Всякое 15 | 16 | = Классы 17 | 18 | Классы --- исторически первое отличие C++ от C 19 | 20 | ```cpp 21 | class Matrix { 22 | private: 23 | size_t n_rows_; 24 | size_t n_cols_; 25 | double *data_; 26 | 27 | public: 28 | Matrix(size_t n_rows, size_t n_cols); 29 | Matrix(const Matrx& other); 30 | Matrix() = delete; // Явно удаляем default-ный конструктор, 31 | // хотя он, и так, не создается 32 | 33 | int rank() const; 34 | 35 | size_t n_rows() const { return n_rows_; } 36 | } 37 | 38 | int main() { 39 | Matrix m(10, 10); 40 | 41 | m.rank(); 42 | } 43 | ``` 44 | 45 | "Программы надо писать для людей" 46 | 47 | Методы, реализованные внутри объявления класса, часто становятся inline-овыми. 48 | 49 | Инкапсуляция --- скрытие внутреннего состояния (private в классах). Позволяет: 50 | + меньше косячить в программах 51 | + отделять реализацию от интерфейса 52 | 53 | #figure(caption: "Инкапсуляция в Си")[ 54 | `public.h`: 55 | ```c 56 | typedef void* Matrix; 57 | Matrix matrix_create(); 58 | int matrix_rank(Matrix m); 59 | ``` 60 | 61 | `public.h`: 62 | ```c 63 | Matrix matrix_create() { ... } 64 | int matrix_rank(Matrix m) { 65 | struct MatrixData* = (MatrixData*)m; 66 | ... 67 | } 68 | ``` 69 | ] 70 | 71 | const --- после называния метода, значит метод не меняет экземпляр 72 | 73 | ```cpp 74 | Matrix m; // default-ный конструктор 75 | Matrix m(1, 1); // конструктор 76 | Matrix m(); // объявление функции 77 | Matrix m{}; // default-ный консруктор 78 | Matrix m2 = m; // конструктор копирования 79 | ``` 80 | 81 | Удалять, как создавали: 82 | ```cpp 83 | Matrix* pm = new Matrix(1, 1); 84 | Matrix* a = new Matrix[100]; 85 | 86 | delete pm; 87 | delete[] a; 88 | ``` 89 | 90 | New по уже выделенной памяти: 91 | ```cpp 92 | void* addr = malloc(...); 93 | new (addr) Matrix(1, 1); 94 | a.~Matrix(); 95 | ``` 96 | 97 | Если у полей нет default-ного конструктора или поля константы или ссылки, то делать так: 98 | ```cpp 99 | class X {...}; 100 | 101 | X::X(int y) : a(y) { ... } 102 | ``` 103 | 104 | Поля инициализирются в том порядке, в котором указаны в классе 105 | 106 | `X&&` --- r-value 107 | 108 | ```cpp 109 | X::X(X&& other) {...} 110 | ``` 111 | 112 | Нельзя перегрузить оператор внутри класса, если первый аргумент другого типа 113 | 114 | Правило трех: 115 | - *TODO* 116 | - *TODO* 117 | - *TODO* 118 | 119 | Правило пяти: 120 | - .. правило трех 121 | - *TODO* 122 | - *TODO* 123 | 124 | Не стоит бросать exception в деструкторе тк exception во время обработки 125 | exception-а --- плохо 126 | 127 | exception в конструкторе --- можно 128 | 129 | Хорошо делать exception только с типами, унаследованными от std::exception 130 | -------------------------------------------------------------------------------- /edu/seminars/2024-10-09.typ: -------------------------------------------------------------------------------- 1 | = Техники организации обучения в онлайн и оффлайн средах 2 | 3 | == В оффлайн среде 4 | 5 | *Что важно учитывать?* 6 | - Есть ли нужное оборудование, есть ли к нему доступ?o 7 | - Подходит ли расстановка мебели 8 | 9 | *Варианты организации парт:* 10 | - *Классическая рассадка*: 11 | 12 | Подходящие форматы: 13 | - Лекция 14 | - Контрольные 15 | 16 | - *Рассадка кластерами*: 17 | 18 | Подходящие форматы: 19 | - Групповая работа 20 | - Дебаты 21 | - Проектные задания 22 | 23 | - *Рассадка полукругом*: 24 | 25 | Подходящие форматы: 26 | - Обсуждение проектов/ докладов 27 | - Дискуссия 28 | - Групповая рефлексия 29 | 30 | Кабинет должен работать на достижение образовательного результата 31 | 32 | *Note*: рассадка сама ничего не сделает, она только способствует 33 | образовательному процессу 34 | 35 | *Что важно в оффлайн уроке?* 36 | - Четкая структура изложения 37 | - Наличие примеров 38 | - Контакт с классом 39 | - Доброжелательная атмосфера 40 | - Качество речи 41 | - Движения, жесты 42 | 43 | == В онлайн среде 44 | 45 | *Что важно учитывать?* 46 | - Закладывать время на технические неполадки 47 | - Убедиться в наличии доступа к онлайн платформе (у себя и у учеников) 48 | 49 | *Что важно в онлайн уроке?* 50 | - Четкие инструкции 51 | - Качество видео, аудио 52 | 53 | Онлайн сильно ограничивает в возможностях 54 | 55 | == Смешанное обучение 56 | 57 | Хорошо работает на гуманитарных дисциплинах 58 | 59 | == Технология "ротация станций" 60 | 61 | - Есть несколько "станций": 62 | - онлайн обучение (индивидуально на компьютере) 63 | - фрональная работа с учителем 64 | - работа в группе (коллективный проект) 65 | - За занятие (пару) каждый ученик проходит все три станции 66 | - Класс разделяется на несколько групп по уровню (с каждой группой можно 67 | работать по-разному) 68 | 69 | Преимущества: 70 | - Повышение учебной мотивации 71 | - Повышение учебных результатов 72 | - Разный уровень сложности для разных учеников 73 | 74 | Часть организационной части можно возложить на тьютора (особенно актуально для 75 | младших классов) 76 | 77 | == Технология "перевернутый класс" 78 | 79 | Ученики теорию проходят дома, а отрабатывают на уроке с учителем. 80 | 81 | *Зачем нужно?* 82 | - Ученики имеют разный темп освоения 83 | - Больше времени на уроке 84 | - Разный темп 85 | 86 | Уровни запоминания и понимания уходят на дом 87 | 88 | *Что нужно для осуществления? Основные шаги:* 89 | - Составить план 90 | - Сделать видеозапись 91 | - Поделиться материалом 92 | - Обсудить материал 93 | - Использовать групповые активности 94 | - Сбор обратной связи 95 | 96 | == Техника "Проектное обучение" 97 | 98 | Студенты обучаются в процессе выполнения некоторого проекта от начала и до конца 99 | 100 | *Ключевые принципы*: 101 | - Конструктивистский подход 102 | - Релевантный контекст 103 | - Совместное обучение 104 | - Самостоятельность 105 | 106 | *Виды проектов*: 107 | - *Условные проекты*: проект "ни для кого" (то есть нет заказчика) 108 | - *Реалистичный проект*: проект, близкий к реальному; например, прототип 109 | - *Реальный проект* 110 | 111 | *Минусы*: 112 | - Требует много времени и усилий 113 | - Сложность управления 114 | - Неспособность покрыть всю программу 115 | -------------------------------------------------------------------------------- /os/lectures/2024-09-02.typ: -------------------------------------------------------------------------------- 1 | = Обзор. Введение 2 | 3 | Карпов Владимир Ефимович 4 | 5 | `carpson@mail.ru` 6 | 7 | Оценка: 8 | $ О_"теор" = (О_"кр" + О_"экз") / 2 $ 9 | 10 | $ О_"итог" = (2 * О_"практ" * О_"теор") / (О_"практ" + O_"теор") $ 11 | 12 | 0 за $O_"теор"$ или $O_"практ"$ обнулит $O_"итог"$ 13 | 14 | == Структура вычислительной системы 15 | 16 | - Пользователь (человек или устройство) 17 | - Программное обеспечение 18 | - Прикладные программы 19 | - Системные программы 20 | - Прочие системные программы 21 | - Операционная система 22 | - Техническое обеспечение 23 | 24 | Границы между прикладным и системными программами условны 25 | 26 | == Определение операционной системы. Основные точки зрения 27 | 28 | - Распорядитель ресурсов 29 | - Защитник (разграничитель) пользователей и программ 30 | - Виртуальная машина (создание абстракций для работы с файлами, памятью и тд) 31 | - "Кот в мешке" 32 | - Постоянно функционирующее ядро (программа, которая поддерживает работу других программ) 33 | - ... 34 | 35 | == Эволюция вычислительных систем 36 | 37 | Факторы отбора эволюции выч. систем: 38 | - Удобство пользования 39 | - Стоимость 40 | - Производительность 41 | 42 | Развитие hard- и software нужно рассматривать совокупно 43 | 44 | Периоды развития: 45 | 46 | === 1-ый период (1945 -- 1955) 47 | 48 | - Ламповые машины 49 | - Огромные 50 | - Часто перегорали 51 | - Нет разделения персонала 52 | - Ввод программы коммутацией или перфокартами 53 | - Одновременное выполнение только одной операции (те только либо 54 | программирование, либо расчеты, либо счет перфокарты и тд) 55 | - Появление прообразов первых компиляторов 56 | - Нет операционных систем 57 | 58 | Фон Нейман имеет минимальное отношение к принципам Фон Неймана 59 | 60 | ENIAC работал в 10-ой ссч 61 | 62 | === 2-ой период (1955 -- начало 60-ых) 63 | 64 | - Полупроводниковые компьютеры 65 | - Разделение персонала 66 | - Бурное развитии алгоритмических языков 67 | - Ввод задания колодой перфокарт 68 | - Вывод результатов на печать 69 | - Пакеты заданий и системы пакетной обработки (прообраз операционных систем) 70 | 71 | Начало использования ЭВМ в коммерческих и исследовательских целях 72 | 73 | === 3-период (начало 60-ых -- 1980) 74 | 75 | - Микросхемы, машины на интегральных схемах 76 | - Машины меньше 77 | - Сигнал идет быстрее, можно повысить тактовую частоту 78 | - Считыватели и принтеры становятся bottleneck 79 | - Использование спулинга (отдельные процессоры для ввода, вывода и счета) 80 | - Планирование заданий (из-за создания магнитных дисков) 81 | - Мультипрограммные пакетные системы 82 | - Системы разделения времени (time-sharing) 83 | 84 | Изменения из-за мультипрограммирования: 85 | #figure(table( 86 | columns: 2, 87 | table.header("Software", "Hardware"), 88 | [ 89 | - Планирование заданий 90 | - Управление памятью 91 | - Сохранение контекста 92 | - Планирование использования процессора 93 | - Системные вызовы 94 | - Средства коммуникации между программами 95 | - Средства синхронизации 96 | ], 97 | [ 98 | - Защита памяти 99 | - Сохранение контекста 100 | - Механизм прерываний 101 | - Привилегированные команды (в тч команды ввода/ вывода) 102 | ] 103 | )) 104 | -------------------------------------------------------------------------------- /lang/lectures/2025-01-17.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Введение 4 | 5 | Оценка: 6 | - 2 контрольных на лекциях (40 баллов) 7 | - Письменный экзамен (60 баллов) 8 | - Задачи в ejudge (ДЗ) (10, 10, 5, 10 баллов) 9 | - Бывают частичные баллы 10 | - Контест на Regexp (5 баллов) 11 | - Бывают частичные баллы 12 | 13 | Сайт курса: #link("https://earth.ispras.ru") 14 | 15 | = Основные определения 16 | 17 | #def[ 18 | #defitem[Алфавит ($V$)] --- конечное непустое множество символов. 19 | 20 | Символы --- некоторые произвольные объекты. 21 | ] 22 | 23 | #def[ 24 | #defitem[Слово (строка, предложение)] --- любая цепочка конечной длины, 25 | из символов алфавита. 26 | ] 27 | 28 | #def[ 29 | #defitem[$epsilon$] --- пустое слово 30 | ] 31 | 32 | #def[ 33 | #defitem[$V^*$] --- множество всех слов из символов $V$. 34 | ] 35 | 36 | #def[ 37 | #defitem[$V^+$] = $V* \\ {epsilon}$ 38 | ] 39 | 40 | #def[ 41 | #defitem[$|x|$] --- длина строки 42 | ] 43 | 44 | #def[ 45 | #defitem[$x y$] --- конкатенация 46 | ] 47 | 48 | #def[ 49 | #defitem[Язык $L$] --- подмножество слов: $L subset V^*$ 50 | ] 51 | 52 | #def[ 53 | #defitem[$overline(L)$] = $V^* \ L$ 54 | ] 55 | 56 | = Как задать язык? 57 | 58 | Языков континуум, а нотаций --- конечно. Поэтому не все языки можно задать. 59 | 60 | Способы задания: 61 | - Распознавание 62 | Процедура, которая для конкретного слова говорит, принадлежит ли оно языку. 63 | Если процедура не завершилась, то слово языку не принадлежит 64 | - Порождение 65 | Процедура, которая последовательно выдает слова 66 | 67 | Процедура vs Алгоритм (в контексте курса): 68 | - Процедура --- просто последовательность инструкция 69 | - Алгоритм --- процедура, которая завершается за конечное время 70 | 71 | Типы языков: 72 | - Рекурсивно перечислимые --- существует *процедура* распознавания 73 | - Рекурсивный --- существует *алгоритм* распознавания 74 | - Не перечислимые 75 | 76 | #blk(title: [Теорема])[intersect 77 | Если $L$ и $overline(L)$ рекурсивно перечислимы, то $L$ рекурсивен. 78 | ] 79 | 80 | = Грамматики 81 | Способ порождения языков 82 | 83 | #def[ 84 | #defitem[Грамматика]: $G = (V_N, V_T, P, S)$, где 85 | - $V_N$ --- алфавит нетерминальных символов, 86 | - $V_T$ --- алфавит терминальных символов, причем $V_N in V_T = 87 | emptyset, V_N union V_T = V$ 88 | - $P$ --- конечное множество правил вида $alpha -> beta, alpha in V^* V_N 89 | V^*, beta in V^*$, 90 | - $S$ --- стартовый символ (начальный нетерминал, аксиома грамматики). 91 | ] 92 | 93 | #def[ 94 | #defitem[Язык порождаемый грамматикой $G$] --- множество всех терминальных 95 | строк, выводимых из начального символа. 96 | 97 | $ L(G) = { omega | omega in V_T^*, S =>_G^* omega } $ 98 | ] 99 | 100 | #def[ 101 | #defitem[Сентенциальная форма] --- любая "промежуточная" строка: 102 | 103 | $ alpha in V^* and S =>_G^* alpha $ 104 | ] 105 | 106 | #def[ 107 | Грамматики #defitem[эквивалентны], если $L(G_1) = L(G_2)$ 108 | ] 109 | 110 | #blk(title: [Пример грамматики])[ 111 | ``` 112 | G = ( 113 | {S}, 114 | {0, 1}, 115 | {S -> 0S1, S -> 01}, 116 | S 117 | ) 118 | ``` 119 | 120 | ``` 121 | S => 0S1 => 00S11 => ... => 0...0S1...1 122 | ``` 123 | 124 | $ L(G) = {0^n_1^n | n > 0} $ 125 | ] 126 | 127 | -------------------------------------------------------------------------------- /algo/lectures/2024-09-03.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Введение 4 | 5 | Препод: Мамай Игорь Борисович 6 | 7 | $ "Накоп" = 0.25 dot "Кол" + 0.25 dot "КР" + 0.4 dot "ДЗ" + 0.1 dot "Сем" $ 8 | 9 | $ 10 | "Итог" = cases( 11 | round("Накоп")\, &" if НЕ идти на экзамен", 12 | 0.5 dot "Накоп" + 0.5 dot "Экз"\, &" if идти на экзамен" 13 | ) 14 | $ 15 | 16 | Контесты на 1--2 недели 17 | 18 | = Структуры данных 19 | 20 | #def[ 21 | #defitem[Абстрактный тип данных] --- определяем, какие операции делает структура, но не 22 | определяем конкретную реализацию 23 | ] 24 | 25 | Контейнеры: 26 | - Последовательные (напр, вектор) 27 | - Ассоциативные (напр, map) 28 | - Адаптеры (не имеют итераторов) 29 | 30 | = Линейные структуры данных 31 | 32 | == Стек и очередь 33 | 34 | #figure(table( 35 | columns: 2, 36 | table.header("Стек", "Очередь"), 37 | "LIFO", "FIFO", 38 | )) 39 | 40 | Реализации: 41 | - Массив 42 | - Список 43 | - Deque 44 | - (для очереди) на двух стеках 45 | 46 | == Список 47 | 48 | Односвязный: 49 | - `begin()` указывает на первый эл-т 50 | - каждый элемент указывает на следующий 51 | - `end()` указывает в пустоту 52 | 53 | Двусвязный: 54 | - каждый элемент указывает ещё и на прошлый эл-т 55 | 56 | Список может быть зациклен 57 | 58 | Зацикленный список может иметь незацикленное начало 59 | 60 | == Стек с минимумом 61 | 62 | Помимо основного стека поддерживаем стек минимумов (на префиксе) 63 | 64 | #figure(table( 65 | columns: 2, 66 | table.header(`st`, `min_st`), 67 | $2$, $2$, 68 | $5$, $3$, 69 | $3$, $3$, 70 | $6$, $4$, 71 | $4$, $4$, 72 | )) 73 | 74 | Минимум в стеке -- `min_st.top()` 75 | 76 | == Очередь через два стека 77 | 78 | Имеем два стека: `st1` и `st2` 79 | 80 | Push: 81 | ``` 82 | st1.push(x) 83 | ``` 84 | 85 | Pop: 86 | ``` 87 | if st2 is empty: 88 | переложить весь st1 в st2 89 | st2.pop() 90 | ``` 91 | 92 | === Асимптотика 93 | 94 | аморт. $O(1)$ 95 | 96 | Над каждым элементом совершается не более 3 операций: 97 | + Положить в `st1` 98 | + Переложить из `st1` в `st2` 99 | + Вытащить из `st2` 100 | 101 | == Вектор 102 | 103 | + Изначально выделяется память под несколько эл-в 104 | + Можем `push`-ить, пока `v.size() < v.capacity()` 105 | + Когда место кончается, вектор выделяет в два раза больше памяти и копирует 106 | туда элементы 107 | + При удалении `capacity()` не меняется 108 | 109 | === Асимптотика 110 | 111 | аморт. $O(1)$ 112 | 113 | На $n$ операций уходит $n + n/2 + n/4 + ... + 1 -> 2n = O(n)$ копирований 114 | 115 | = Метод потенциалов 116 | 117 | Метод подсчета асимптотики 118 | 119 | $ phi_0 -> phi_1 -> ... -> phi_n $ 120 | 121 | #def[ 122 | #defitem[Потенциал] --- функция от наших структур данных 123 | ] 124 | 125 | #def[ 126 | #defitem[Аморт. время работы] --- $a_i = t_i + Delta phi$ 127 | ] 128 | 129 | $ sum a_i = sum (t_i + Delta phi) = sum t_i + (phi_n - phi_0) $ 130 | 131 | $ 132 | (sum t_i) / n 133 | = (phi_0 - phi_n) / n + (sum a_i) / n 134 | <= (phi_0 - phi_n) / n + max(a_i) 135 | $ 136 | 137 | Хотим минимизировать $max(a_i)$ и $(phi_0 - phi_n) / n$ 138 | 139 | == Для стека 140 | 141 | $ phi_i := 2n_1 $ 142 | 143 | #figure(table( 144 | columns: 2, 145 | table.header(`push`, `pop`), 146 | $t_i = 1$, $t_i = 1 " или " 2n_1 + 1$, 147 | $a_i = 1 + 2 = 3$, $a_i = 1 " или " 2n_1 + 1 + (0 - 2n_1) = 1$, 148 | )) 149 | -------------------------------------------------------------------------------- /algo/lectures/2024-10-08.typ: -------------------------------------------------------------------------------- 1 | = Численное интегрирование 2 | 3 | Дана функция $y = f(x)$. Хотим посчитать $integral_a^b f(x)$. 4 | 5 | == Метод Монте-Карло 6 | 7 | Работает, но сходится медленно 8 | 9 | Возьмем $sin(x), x in [0, pi]$. 10 | 11 | Будем генерировать точки в прямоугольнике $x in [0, pi]; y in [0, pi]$ и 12 | смотреть, сколько попало под график. 13 | 14 | == Детерминированный метод 15 | 16 | Разбиваем отрезок на равные кусочки: 17 | $ a = x_0 < x_1 < ... < x_n = b $ 18 | $ x_(i + 1) - x_i = h = (b - a) / n $ 19 | 20 | Один кусок ($x in [x_i, x_(i + 1)]$) --- криволинейная трапеция. Её можно 21 | приближать разными фигурами: 22 | - Прямоугольником: 23 | - $S = h dot f(x_i)$ --- метод левых прямоугольников 24 | - $S = h dot f(x_(i + 1))$ --- метод правых прямоугольников 25 | - $S = h dot f((x_i + x_(i + 1)) / 2)$ --- метод средних прямоугольников 26 | - Трапецией: 27 | - $S = h/2 (f(x_i) + f(x_(i + 1)))$ 28 | - Криволинейной трапецией (с параболой сверху): 29 | - $S= h/6 (f(x_i) + 4f((x_i + x_(i + 1)) / 2) + f(x_(i + 1))$ --- формула 30 | Симпсона 31 | 32 | У формулы Симпсона сходимость на два порядка выше 33 | 34 | === Пример 35 | 36 | Ищем площадь круга: 37 | $ (x - 1)^2 + (y - 5)^2 = 9 $ 38 | 39 | Разбиваем на две полуокружности: верхнюю ($f_1 (x)$) и нижнюю ($f_2 (x)$) 40 | 41 | $ S = integral_(-2)^4 (f_1 (x) - f_2 (x)) d x $ 42 | 43 | == Сетки переменной плотности 44 | 45 | Интегрируем верхнюю половину окружности. Будем использовать метод левых 46 | прямоугольников. Если разрезать на четыре части, то два центральные кусочка 47 | дают хорошее приближение, а два крайних --- очень плохое. 48 | 49 | Вывод: сетка с постоянным шагом --- часто плохой вариант. 50 | 51 | Алгоритм: 52 | - Делим на несколько частей 53 | - Проверяем, на каких кусках получили хорошее приближение, а на каких плохое. 54 | 55 | Для этого всё же измельчаем сетку в этом месте и проверяем, сильно ли 56 | изменилось приближение. Если слабо, то приближение хорошее: 57 | $ abs(S_1 - S_2) < epsilon $ 58 | 59 | - Там, где получили плохое приближение, запускается от него рекурсивно. 60 | 61 | Метод хорошо сходится, но мы плохо можем оценивать приближение. 62 | 63 | == Задача (похожая на 2-ую и 3-ю из контеста) 64 | 65 | Есть набор фигур на экране. Найти площадь объединения 66 | 67 | Методы решения (по увеличению эффективности): 68 | + *Монте-Карло*: плохо сходится 69 | + *Сетка*: 70 | 71 | Разрежем на сеточку (по вертикали и горизонтали). 72 | Смотрим на центр: считаем, что если входит центр, то входит весь 73 | прямоугольник 74 | 75 | + *Квадродерево*: 76 | 77 | - Режем на сетку. Смотрим на каждый квадратик. 78 | - Если квадратик заполнен полностью или полностью пустой, то сразу добавляем 79 | его в ответ 80 | - Иначе (если заполнен частично), то продолжаем рекурсивно. 81 | - Останавливаемся, если получили квадратик площади меньше $epsilon$ 82 | 83 | + *Вертикальные полосы переменной плотности + Сканлайн* 84 | 85 | - Режем на полоски, которые дают элементарные огибающие. Можно порезать и сильнее. 86 | 87 | - Каждая фигура идет от начала до конца полосы (то есть по горизонтали начинается и 88 | заканчивается либо на границе полосы, либо вне её). 89 | 90 | - Внутри каждой полосы, заменяем каждую фигуру на прямоугольник, дальше 91 | сканлайном ищем площадь пересечения. 92 | 93 | - Потом делим вертикальную линию пополам, проверяем хорошее ли получилось 94 | приближение, если плохое, запускаемся дальше 95 | -------------------------------------------------------------------------------- /edu/seminars/2024-09-18.typ: -------------------------------------------------------------------------------- 1 | = Домашнее задание 2 | 3 | Дедлайн: 4 | - загрузка таблицы -- 1 октября 5 | - загрузка эссе -- 2 октября 6 | 7 | Книга: "Взгляд Кролика" Хайтани Кэндзиро 8 | 9 | Прочитать, заполнить вопросы в таблице 10 | 11 | Эссе пишется уже после семинара 12 | 13 | = Постановка целей, задач, образовательные результаты 14 | 15 | Типы занятий: 16 | - Изучение нового материала 17 | - Совершенствование знаний, умений, навыков (отработка отдельных тем) 18 | - Обобщение и систематизация (отработка нескольких тем) 19 | - Контроль 20 | - Комплексное применение знаний 21 | 22 | Образовательный процесс должен планироваться от цели 23 | 24 | Ошибка проектирования от содержания: 25 | - получается поток сознания 26 | - ученики могут многое знать или быть неготовы 27 | - отсутствие логики и структуры 28 | 29 | Цель vs Задача: 30 | - Цель --- конечная точка (только одна) 31 | - Задача --- шаги, необходимые для достижения цели (много) 32 | 33 | Задачи принято формулировать через глагол 34 | 35 | Плохо формулировать задачу через "научиться" тк это сложно проверить/ измерить 36 | 37 | Ошибки при формулировке образовательной цели: 38 | - Цель слишком абстрактна 39 | - Цель невозможно измерить/ оценить 40 | - Цель недостижима 41 | - Цель формулируется от лица преподавателя --- делает цель менее осязаемой 42 | - Цель заменяется форматом или содержанием занятия 43 | 44 | == Как правильно формулировать цель? 45 | 46 | Анализ целевой аудитории: 47 | - Учет возраста обучающихся 48 | - Выявление предшествующего опыта и знаний 49 | - Учет интересов обучающихся 50 | 51 | == SMART 52 | 53 | Алгоритм для постановки цели 54 | 55 | #figure( 56 | caption: [SMART-критерии], 57 | table( 58 | columns: 3, 59 | align: (center, left, left), 60 | [*S*], [Specific], [конкретная, прозрачная], 61 | [*M*], [Measurable], [измеримая], 62 | [*A*], [Attainable], [достижимая, реалистичная], 63 | [*R*], [Relevant], [актуальная], 64 | [*T*], [Time-Bound], [ограниченная по времени], 65 | ) 66 | ) 67 | 68 | == Таксономия Блума-Андерсона 69 | 70 | Иерархическая система учебных целей 71 | 72 | - Создание: применение знаний для создания нового 73 | - Оценка: "зачем нам это всё" 74 | - Анализ: понимание структуры, применение и понимание вместе 75 | - Применение: использование полученных знаний в новых ситуациях 76 | - Понимание: осознание сути материала 77 | - Запоминание: запоминание и воспроизведение материала 78 | 79 | Каждый уровень опирается на предыдущий 80 | 81 | Задачи нужно давать в порядке снизу вверх 82 | 83 | == Образовательный результат 84 | 85 | В англоязычных источниках результат и цель --- один термин 86 | 87 | ПРО --- планируемый образовательный результат 88 | 89 | - Может быть шире (менее конкретным), чем цель 90 | - Позволяет отобрать материал для работы в процессе обучения 91 | - Позволяет определить элементы контроля 92 | 93 | === На что опираться при формулировке ПРО 94 | 95 | + ФГОС 96 | + Учебная программа 97 | + Дополнительные образовательные программы 98 | + Профессиональный стандарт 99 | + Независимые международные рамки 100 | + Программа дисциплины 101 | 102 | == Метод ABC 103 | 104 | Помогает формулировать ПРО 105 | 106 | #figure( 107 | table( 108 | columns: 3, 109 | align: (center, left, left), 110 | [*A*], [Actor], [кто учится], 111 | [*B*], [Behaviour], [поведение], 112 | [*C*], [Condition], [в каком контексте происходит действие], 113 | ) 114 | ) 115 | -------------------------------------------------------------------------------- /prob/lectures/2024-12-13.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Неравенство Берри-Эссена 4 | 5 | Пусть $xi_1, ..., xi_n$ --- независимые, одинокого распределены и $D xi_i < oo$, 6 | $ eta_n = (sum_(i = 1)^n xi_i - E sum_(i = 1)^n xi_i) / sqrt(sum_(i = 1)^n xi_i) $ 7 | То 8 | $ sup_x abs(F_eta_n (x) - Phi(x)) <= (C dot E abs(xi_1 - m_1)^3) / (sqrt(n) 9 | sigma^3) $ 10 | 11 | Где $C$ --- некоторая константа, которая постоянно уточняется. Сейчас известно, 12 | что $1/sqrt(2 pi) <= C < 0.478.$ 13 | 14 | = Закон больших чисел (ЗБЧ) 15 | 16 | Говорят, что случайная последовательность $xi_1, ..., xi_n$ удовлетворяет ЗБЧ, 17 | если 18 | $ 1/n sum_(i = 1)^n xi_i - 1/n sum_(i = 1)^n E xi_i ->^P_(n -> oo) 0 $ 19 | 20 | == Теорема Чебышева 21 | 22 | Пусть $xi_1, ..., xi_n$ некоррелированы и $D xi_1, ..., D xi_n$ ограничены в 23 | совокупности (т.е. $exists C > 0: forall k: D xi_k <= C$), тогда ЗБЧ. 24 | 25 | #proof[ 26 | $ forall epsilon > 0: 27 | P(abs(1/n sum_(i = 1)^n xi_i - 1/n sum_(i = 1)^n E xi_i) > epsilon) 28 | <= D(1/n sum_(i = 1)^n xi_i) / epsilon^2 <= ... 29 | $ 30 | 31 | $ D(1/n sum_(i = 1)^n xi_i) 32 | underbrace(=, #[т.к. некоррелированы]) 1/n^2 sum_(i = 1)^n D xi_i 33 | <= (C dot n) / n^2 34 | = C/n 35 | $ 36 | 37 | $ ... <= C / (epsilon^2 dot n) ->_(n -> oo) 0 $ 38 | ] 39 | 40 | == Теорема 41 | 42 | Пусть $xi_1, ..., xi_n$ одинокого распределены и $D xi_i < oo$, тогда ЗБЧ. 43 | 44 | #proof[ 45 | $ forall epsilon > 0: 46 | P(abs(1/n sum_(i = 1)^n xi_i - 1/n sum_(i = 1)^n E xi_i) > epsilon) 47 | <= D(1/n sum_(i = 1)^n xi_i) / epsilon^2 48 | = (n dot D) / (n^2 dot epsilon^2) 49 | = sigma^2 / (n epsilon^2) ->_(n -> oo) 0 50 | $ 51 | ] 52 | 53 | == Теорема 54 | 55 | Пусть $xi_k$ --- количество "успехов" в $k$ испытаниях Бернулли с вероятностью $p$. 56 | 57 | $p^* = xi_n / n$ --- СВ, частота успеха 58 | 59 | $ xi_n = eta_1 + ... + eta_n, #[где] eta_i ~ "Bi"(p) $ 60 | 61 | $ p^* = 1/n sum_(i = 1)^n eta_i $ 62 | 63 | $ E p^* = E(1/n sum_(i = 1)^n eta_i ) = p $ 64 | $ D eta_i = p q < oo $ 65 | 66 | По ЗБЧ: 67 | $ p^* = 1/n xi_n ->_(n -> oo)^P p $ 68 | 69 | = Усиленный закон больших чисел 70 | 71 | Говорят, что случайная последовательность $xi_1, ..., xi_n$ удовлетворяет УЗБЧ, 72 | если 73 | $ 1/n sum_(i = 1)^n xi_i - 1/n sum_(i = 1)^n E xi_i ->^"п. н."_(n -> oo) 0 $ 74 | 75 | Если УЗБЧ, то и ЗБЧ. 76 | 77 | == Теорема Колмогорова 78 | 79 | Пусть $xi_1, ..., xi_n, ...$ независимы, одинокого распределены и 80 | $m < oo$, тогда УЗБЧ: т.е $1/n sum_(i = 1)^n xi_i ->_(n -> oo)^"п. н." m$ 81 | 82 | = Метод Монте-Карло 83 | 84 | Пример. Хотим посчитать $integral_a^b g(x) d x$ 85 | 86 | $ xi_1, ..., xi_n ~ R(a, b) $ 87 | 88 | $xi_1, ..., xi_n$ независимы 89 | 90 | По УЗБЧ: $1/n sum_(i = 1)^n g(xi_i) ->_(n -> 0)^"п. н." E g(xi_i) 91 | = integral_a^b g(x) underbrace(f_xi (x), 1 / (b - a)) d x$ 92 | 93 | $ I^* = (b - a) / n sum_(i = 1)^n g(xi) ->^"п. н." integral_a^b g(x) d x $ 94 | 95 | Имеет смысл применять в многомерных случаях. 96 | 97 | $I$ --- истинное значение интеграла 98 | 99 | $ P(|I^* - I| < delta) = p $ 100 | 101 | По ЦПТ: 102 | $ (1/n sum_(i = 1)^n g(xi_i) - I) / sqrt(D(1/n sum_(i = 1)^n g(xi_i))) 103 | ->^d_(n -> oo) U, 104 | $ 105 | 106 | где $U ~ N(0, 1)$ 107 | 108 | $ sqrt(D(1/n sum_(i = 1)^n g(xi_i))) = n/n^2 D(g(xi_1)) = (D g(xi_1)) / n $ 109 | 110 | $ P(|I^* - I| < delta) = 2 Phi_0(delta/sqrt(D(1/n sum_(i = 1)^n g(xi_i)))) = p 111 | = 2Phi_0((delta sqrt(n)) / sqrt(D g(xi_1))) 112 | $ 113 | 114 | Для применения этой формулы полезно ограничить дисперсию, а не считать её 115 | напрямую. 116 | -------------------------------------------------------------------------------- /prob/lectures/2024-09-27.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Формула Байеса 4 | 5 | $ P(H_i | A) = P(A H_i) / P(A) 6 | = (P(H_i) P(A | H_i)) / (sum_(j = 1)^n P(H_j) P(A | H_j)) $ 7 | 8 | $ sum_(i = 1)^n P(H_i) = 1 $ 9 | 10 | $ sum_(i = 1)^n P(H_i | A) = 1 $ 11 | 12 | == Задача 13 | 14 | #figure( 15 | caption: [Условие], 16 | table( 17 | columns: 3, 18 | table.header[*Завод*][*Процент поставленных деталей*][*Вероятность 19 | исправной детали*], 20 | [№ 1], $65%$, $0.9$, 21 | [№ 2], $35%$, $0.8$, 22 | ) 23 | ) 24 | 25 | $A$ --- деталь с дефектом оказалась в самолете 26 | 27 | $H_1$ --- деталь взяли и 1-ого завода 28 | $ P(H_1) = 0.65 $ 29 | $ P(A | H_1) = 0.1 $ 30 | 31 | $H_2$ --- деталь взяли и 2-ого завода 32 | $ P(H_1) = 0.35 $ 33 | $ P(A | H_1) = 0.2 $ 34 | 35 | $ P(A) = P(H_1) P(A | H_1) + P(H_2)P(A | H_2) = 0.65 dot 0.1 + 0.35 dot 0.2 $ 36 | $ P(H_1 | A) = (P(H_1) P(A | H_1)) / P(A) = 65 / 135 = 0.48 $ 37 | $ P(H_2 | A) = (P(H_2) P(A | H_1)) / P(A) = 70 / 135 = 0.52 $ 38 | 39 | = Случайные величины 40 | 41 | #def[ 42 | #defitem[Случайная величина (СВ)] --- величина, которая после эксперимента принимает 43 | заранее неизвестное значение. 44 | 45 | Числовая функция $xi: Omega-> RR$, которая удовлетворяет условию 46 | измеримости #footnote[почти всегда исполняется]: 47 | $ forall x in RR: { omega: xi(omega) <= x } in cal(A) $ 48 | ] 49 | 50 | #figure( 51 | caption: [Пример с кубиком], 52 | table( 53 | columns: 6, 54 | stroke: none, 55 | $Omega = {$, $omega_1,$, $omega_2,$, $...,$, $omega_6$, $}$, 56 | $$, $arrow.b$, $arrow.b$, $$, $arrow.b$, $$, 57 | $xi = {$, $1,$, $2,$, $...,$, $3$, $}$, 58 | ) 59 | ) 60 | 61 | #def[ 62 | #defitem[Функция распределения (вероятностей)] случайно величины $xi$ 63 | называется функция $ F_xi (x) = P(omega: xi(omega) <= x) $ 64 | ] 65 | 66 | Свойства $F(x)$: 67 | + $F(+oo) = 1$ 68 | 69 | $F(-oo) = 0$ 70 | 71 | $forall x: 0 <= F(x) <= 1$ 72 | 73 | + $F(x)$ не убывает: $x_1 < x_2 => F(x_1) <= F(x_2)$ 74 | 75 | + $F(x)$ непрерывна справа: 76 | 77 | $ F(x_0) = lim_(epsilon -> 0+) F(x_0 + epsilon), $ 78 | где $x_0$ --- точка разрыва 79 | 80 | Если некоторая $F(x)$ удовлетворяет условиям, то она является функцией 81 | распределения некоторой величины. 82 | 83 | Случайные величины: 84 | - Дискретные 85 | - Непрерывные 86 | 87 | = Дискретные случайные величины 88 | 89 | #def[ 90 | Случайную величину называют #defitem[дискретной], если множество её 91 | возможных значений конечно или счетно. 92 | ] 93 | 94 | #def[ 95 | #defitem[Ряд распределения] для дискретной СВ --- табличка из $xi$ в $P$: 96 | 97 | #figure( 98 | table( 99 | columns: 5, 100 | $xi$, $x_1$, $x_2$, $...$, $x_n$, 101 | $P$, $p_1$, $p_2$, $...$, $p_n$, 102 | ) 103 | ) 104 | ] 105 | 106 | #blk(title: "Пример")[ 107 | #figure( 108 | table( 109 | columns: 4, 110 | $xi$, $-1$, $0$, $2$, 111 | $P$, $0.2$, $0.3$, $0.5$, 112 | ) 113 | ) 114 | 115 | $ x < -1: F(x) = 0 $ 116 | $ F(-1) = 0.2 $ 117 | $ F(-0.5) = 0.2 $ 118 | $ F(0) = 0.2 + 0.3 $ 119 | $ F(2) = 1 $ 120 | $ x > 2: F(x) = 1 $ 121 | ] 122 | 123 | == Числовые характеристики дискретных случайных величин 124 | === Математическое ожидание 125 | 126 | #def[ 127 | #defitem[Математическим ожиданием $E$ (среднее значение)] дискретной СВ $xi$ 128 | называется число $ E xi = sum_(i = 1)^oo x_i p_i $ 129 | 130 | Предполагается, что ряд $sum_(i = 1)^oo abs(x_i) p_i$ сходится 131 | ] 132 | -------------------------------------------------------------------------------- /utils/template.typ: -------------------------------------------------------------------------------- 1 | #import "datestamp.typ": datestamped_outline 2 | 3 | #let _heading_builder( 4 | is_bold: true, 5 | is_smallcapsed: false, 6 | is_underlined: false, 7 | font_size: 16pt, 8 | line_len: 2cm, 9 | vspace: 0.5cm, 10 | body 11 | ) = { 12 | if is_smallcapsed { 13 | body = smallcaps(body) 14 | } 15 | 16 | if is_underlined { 17 | body = underline(body) 18 | } 19 | 20 | let body = text( 21 | size: font_size, 22 | weight: if is_bold { "bold" } else { "regular" }, 23 | body 24 | ) 25 | 26 | let line = line( 27 | length: line_len, 28 | stroke: if is_bold { 1pt } else { 0.5pt }, 29 | ) 30 | 31 | v(vspace, weak: true) 32 | grid( 33 | columns: (1fr, auto, 1fr), 34 | align: (horizon + right, horizon + center, horizon + left), 35 | column-gutter: 5pt, 36 | line, 37 | body, 38 | line, 39 | ) 40 | v(vspace, weak: true) 41 | } 42 | 43 | #let conf( 44 | title: none, 45 | subtitle: none, 46 | notes_author: none, 47 | teacher: none, 48 | year: none, 49 | outline_opts: none, 50 | body 51 | ) = { 52 | // Set metadata 53 | set document( 54 | title: [#title. #subtitle], 55 | author: notes_author, 56 | ) 57 | 58 | [ 59 | #metadata(( 60 | title: title, 61 | subtitle: subtitle, 62 | )) 63 | ] 64 | 65 | // Set language and font size 66 | set text(lang: "ru", size: 11pt) 67 | set par(justify: true) 68 | 69 | // Title page 70 | align(center + horizon, [ 71 | #text(27pt, weight: "bold", title) 72 | 73 | #text(25pt, weight: "bold", subtitle) 74 | 75 | #text(16pt, grid( 76 | columns: 2, 77 | align: (right, left), 78 | row-gutter: 1em, 79 | column-gutter: 0.5em, 80 | 81 | [Автор конспектов:], 82 | notes_author, 83 | 84 | if teacher != none { [Преподаватель:] }, 85 | if teacher != none { teacher }, 86 | )) 87 | 88 | #text(16pt, year) 89 | ]) 90 | 91 | // Outline 92 | datestamped_outline(..outline_opts) 93 | pagebreak(weak: true) 94 | 95 | // Page style 96 | set page( 97 | header: align(center)[ 98 | #title. #subtitle 99 | #line(length: 100%, stroke: 0.5pt) 100 | ], 101 | footer: align(center, { 102 | line(length: 100%, stroke: 0.5pt) 103 | context counter(page).display("1") 104 | }), 105 | ) 106 | 107 | // Headings style 108 | show heading.where(level: 1): h => _heading_builder( 109 | is_bold: true, 110 | font_size: 16pt, 111 | line_len: 2cm, 112 | h.body 113 | ) 114 | 115 | show heading.where(level: 2): h => _heading_builder( 116 | is_bold: false, 117 | is_smallcapsed: true, 118 | font_size: 14pt, 119 | line_len: 1cm, 120 | h.body 121 | ) 122 | 123 | show heading.where(level: 3): h => _heading_builder( 124 | is_bold: false, 125 | is_smallcapsed: true, 126 | is_underlined: true, 127 | font_size: 12pt, 128 | line_len: 0cm, 129 | h.body 130 | ) 131 | 132 | // Terms style 133 | show terms.item: it => [ 134 | *Опр. * 135 | #text(weight: "bold", it.term): #it.description 136 | ] 137 | 138 | // Table style 139 | set table(align: left) 140 | 141 | // Figure style 142 | set figure.caption(position: top) 143 | 144 | // Body 145 | body 146 | } 147 | -------------------------------------------------------------------------------- /stat/lectures/2025-01-10.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Введение 4 | 5 | - Теория вероятностей: по известной модели ищем параметры 6 | - Математическая статистика: по наблюдаемой величине строим модель 7 | 8 | = Определения 9 | 10 | #def[ 11 | #defitem[Однородной выборкой] объема $N$ называется случайный вектор $X = 12 | (X_1, ..., X_n)$, компоненты которого --- независимые и одинокого 13 | распределенные. 14 | 15 | _Примечание_: в ближайшее время будем обсуждать только *однородные* выборки. 16 | ] 17 | 18 | #def[ 19 | Компоненты однородной выборки называются #defitem[элементами выборки]. 20 | ] 21 | 22 | #def[ 23 | Если все элементы выборки $X_1, ..., X_n$ выборки имеют распределение $F_xi 24 | (x)$, то говорят, что #defitem[выборка соответствует распределению $F_xi (x)$ или 25 | выборка порождена случайной величиной $xi$]. 26 | 27 | _Примечание_: обычно $F_xi (x)$ мы не знаем. Часто известно только семейство 28 | распределения: например, "гауссово" или "непрерывное". 29 | ] 30 | 31 | #def[ 32 | Детерминированный вектор $x = (x_1, ..., x_n)$, где $X_i$ есть реализация 33 | СВ $X_i, i = overline(1 ... n)$ называется #defitem[реализацией выборки $X$]. 34 | ] 35 | 36 | #def[ 37 | #defitem[Выборочным пространством] $S$ называется множество всех возможных 38 | реализаций выборки. 39 | ] 40 | 41 | #def[ 42 | Пара $(S, cal(F))$, где $cal(F)$ -- семейство распределений, порождающих 43 | $X$, называется #defitem[моделью]. 44 | ] 45 | 46 | #def[ 47 | Упорядочим реализацию $x_((1)) <= x_((2)) <= ... <= x_((n))$. 48 | 49 | Пусть СВ $X_(k)$ есть такой элемент выборки, реализация которого, который при любой реализации 50 | $X_1, ..., X_n$, принимает значение $X_((k))$. 51 | 52 | Тогда пос-ть $X_((1)), ..., X_((n))$ называется #defitem[вариационным 53 | рядом] выборки, а $X_((k))$ --- $k$-ой порядковой статистикой. 54 | ] 55 | 56 | #def[ 57 | Порядковые статистики $X_((1))$ и $X_((n))$ называются #defitem[экстремальными]. 58 | ] 59 | 60 | Когда мы зафиксируем конкретную реализацию, $X_((i))$ станет числом, до этого 61 | $X_((i))$ --- СВ. 62 | 63 | == Эмпирическая функция распределения 64 | 65 | #def[ 66 | Пусть $X_1, ..., X_n$ соответствует распределению $F_xi (x)$, 67 | тогда функция: 68 | $ accent(F, hat)_n (x) = 1/n sum_(k = 1)^n I(x_k <= x) $ 69 | называется #defitem[эмпирической функцией распределения]. 70 | ] 71 | 72 | === Свойства 73 | 74 | - $E accent(F, hat)_n (x) = P(x_k <= x) = F_xi (x) $ 75 | - По УЗБЧ: 76 | $ 1/n sum_(k = 1)^n I(x_k <= x) ->_(n -> oo)^"п. н." F_xi (x) $ 77 | 78 | = Гистограмма 79 | 80 | $x_1, ..., x_n$ --- реализация 81 | 82 | Для построения гистограммы: 83 | + Разбить $R^1$ на $m + 2$ не пересекающихся интервала 84 | + Обычно рассматривают *размах* выборки $r = x_((n)) - x_((1))$ 85 | + Первый и последний интервалы ($(-oo, x_((1)))$ и $(x_((n)), +oo)$) пустые, 86 | остальные --- длинны равной $Delta = r / m$ 87 | + Для каждого интервала вычисляем частоту попаданию в него: $nu_k$ 88 | + На каждом интервале строим прямоугольник высотой $h_k = nu_k / Delta$ 89 | 90 | При увеличении $m$ гистограмма стремится к плотности. 91 | 92 | #blk(title: [Гистограмма ростов])[ 93 | $ 94 | x_((1)) = 163\ 95 | x_((39)) = 203\ 96 | m = 5\ 97 | r = 203 - 163 = 40\ 98 | Delta = 8\ 99 | $ 100 | 101 | #figure(table( 102 | columns: 3, 103 | align: center, 104 | table.header[*Интервал*][*Частота*][*Высота*], 105 | $[163, 171)$, $ 8/39$, $...$, 106 | $[171, 179)$, $11/39$, $...$, 107 | $[179, 187)$, $18/39$, $...$, 108 | $[187, 195)$, $ 1/39$, $...$, 109 | $[195, 203)$, $ 1/39$, $...$, 110 | )) 111 | ] 112 | 113 | 100 наблюдений = ~7 интервалов 114 | -------------------------------------------------------------------------------- /algo/lectures/2024-09-17.typ: -------------------------------------------------------------------------------- 1 | = Информация 2 | 3 | Коллок предварительно в начале второго модуля (2 ноября, 1--4 пары) 4 | 5 | Все задачи в контесте стоят одинокого 6 | 7 | = Алгоритм Карацубы 8 | 9 | Алгоритм перемножения двух многочленов (или чисел) 10 | 11 | $ A(x) = a_0 + a_1 x + ... + a_(n-1) x^(n-1) $ 12 | $ B(x) = b_0 + b_1 x + ... + b_(n-1) x^(m-1) $ 13 | 14 | // Будем считать $deg A = deg B = n$, не $n - 1$. 15 | 16 | $ C(x) = A(x) B(x) = c_0 + c_1 x + ... c_(n + m - 2) x^(n + m - 2) $ 17 | 18 | bruteforce (в столбик) за $O(n^2)$: $ c_k = sum^k_(i = 0) a_i dot b_(k - i) $ 19 | 20 | В Карацубе лучше останавливаться при $deg approx 16$ и перемножать в столбик 21 | 22 | Добиваем многочлены до одинаковой длины и до степени двойки. 23 | 24 | Разобьем многочлен на два: 25 | $ A(x) 26 | &= a_0 + a_1 x + ... + a_(n - 1) x^(n-1) \ 27 | &= 28 | underbrace([a_0 + a_1 x + ... + a_(n/2 - 1) x^(n/2 - 1)], A_0(x)) 29 | + underbrace([a_(n/2) + ... + a_(n - 1) x^(n/2-1)], A_1(x)) x^(n/2) \ 30 | &= A_0(x) + A_1(x) x^(n/2) $ 31 | 32 | $ B(x) = B_0(x) + B_1(x) x^(n/2) $ 33 | 34 | Перемножим (складываем за линию, перемножаем рекурсивно): 35 | $ A(x)B(x) 36 | &= (A_0 + A_1 x^(n/2))(B_0 + B_1 x^(n/2)) 37 | &= A_0 B_0 + (A_1 B_0 + A_0 B_1)x^(n/2) + A_1 B_1 x^n $ 38 | 39 | Найдем асимптотику: 40 | $ T(n) = 4T(n/2) + O(n) => T(n) = O(n^2) $ 41 | 42 | Так перемножать не выгодно. Проблема в четырех произведениях. 43 | 44 | Сокращаем число произведений до трех: 45 | $ (A_0 + A_1)(B_0 + B_1) 46 | = underbrace(A_0 B_0 + A_1 B_1, "уже знаем") 47 | + underbrace(A_0 B_1 + A_1 B_0, "сможем найти") $ 48 | 49 | Найдем новую асимптотику: 50 | $ T(n) = underbrace(3T(n/2), "на умножения") + underbrace(O(n), "на сложения") 51 | => T(n) = O(n^(log_2 3)) approx O(n^1.585) $ 52 | 53 | Так перемножать значительно быстрее. 54 | 55 | == Длинная арифметика 56 | 57 | $ 2105789 = 9 + 8x + 7x^2 + 5x^3 + x^5 + 2x^6 |_(x=10) $ 58 | 59 | $ a, b < 10^1000 $ 60 | 61 | Нужно делать перенос разряда. 62 | 63 | Можно сменить систему счисления для ускорения в константу раз. Удобно брать $x = 10^n$. 64 | 65 | == Алгоритм Штрассена 66 | 67 | Обобщение Карацубы на матрицы 68 | 69 | brutforce за $O(n^3)$: $C_i_j = sum^(n - 1)_(k = 0) a_(i k) b_(k j)$ 70 | 71 | Размер матрицы: $n = 2^k$ 72 | 73 | Пилим матрицу на четыре куска. Куски будут перемножаться, как обычные матрицы. 74 | $ 75 | mat( 76 | a_(1 1), a_(1 2); 77 | a_(2 1), a_(2 2); 78 | ) dot 79 | mat( 80 | b_(1 1), b_(1 2); 81 | b_(2 1), b_(2 2); 82 | ) = 83 | mat( 84 | a_(1 1) b_(1 1) + a_(1 2) b_(2 1), a_(1 1) b_(1 2) + a_(1 2) b_(2 2); 85 | a_(2 1) b_(1 1) + a_(2 2) b_(2 1), a_(2 1) b_(1 2) + a_(2 2) b_(2 2); 86 | ) 87 | $ 88 | 89 | Можно посчитать не за 8, а за 7 умножений 90 | 91 | Посчитаем сложность: 92 | $ T(n) = 7 T(n/2) + O(n^2) => T(n) = O(n^(log_2 7)) approx O(n^2.81) $ 93 | Выгодно только для очень больших матриц 94 | 95 | === Аналоги Штрассена 96 | 97 | #table( 98 | columns: 3, 99 | table.header[*Год*][*Название*][*Асимптотика*], 100 | [1990], [Коперсмита-Виноградова], $O(n^(2.3755))$, 101 | [2020], [Алмана-Вильямса], $O(n^2.3728)$ 102 | ) 103 | 104 | *Гипотеза Штрассена*: $forall epsilon > 0: 105 | exists "алгоритм": 106 | forall n >= N: 107 | O(n^(2+epsilon))$ 108 | 109 | == Fast Fourier Transform (FFT) 110 | 111 | Сложность $O(n log n)$, но с большой константой 112 | 113 | *Основной принцип*: храним многочлен, как список его значений в некоторых точках. 114 | Знаем $A(x_0), A(x_1), ..., A(x_(n-1))$ 115 | 116 | Коэффициенты при умножении меняются нетривиально, а значения в точках --- 117 | намного проще, если удачно выбрать точки: $x_i = omega^i$, где $omega in CC$ или 118 | $omega in ZZ_p$. 119 | 120 | Проблема: переход в `double`. 121 | -------------------------------------------------------------------------------- /edu/seminars/2024-10-23.typ: -------------------------------------------------------------------------------- 1 | = Про итоговое задание 2 | 3 | Нужно: 4 | - Выложить в SmartLMS план-сценарий или презентацию для занятия 5 | - Провести часть вашего занятия для одногруппников и преподавателя (20 минут): 6 | - Нужно сказать, какую аудиторию должны отыграть другие 7 | 8 | Оценивается тремя способами: 9 | - Оценивание учителем 10 | - Взаимооценивание 11 | - Самооценивание 12 | 13 | Все критерии есть в SmartLMS 14 | 15 | = Итоговое и формирующее оценивание 16 | 17 | == Что такое оценивание 18 | 19 | Оценка в представлении многих --- это "что-то уже случившееся". Оценка уже есть, 20 | изменить нельзя. Но должно быть по-другому. 21 | 22 | == Разница между оценкой и отметкой 23 | 24 | - Оценка --- это процесс оценивания знаний 25 | - Отметка --- это числовая или буквенная оценка 26 | 27 | == Основные принципы оценивания 28 | 29 | - Дифференцирующий характер (индивидуализация) 30 | - Открытость 31 | - Объективность критериев 32 | - Накопительный характер (оценка должна сопровождать процесс) 33 | - Отсылка к планируемым образовательным результатам 34 | 35 | == Виды оценивания 36 | 37 | - Формирующее: на основе оценки можно что-то изменить (суп пробует повар) 38 | - Итоговое: уже ничего не изменить (суп пробуют гости) 39 | 40 | == Итоговое оценивание 41 | 42 | Цель: определить уровень достижения целей 43 | 44 | - Более объективно 45 | - В более сильных рамках 46 | - Больше для учителя 47 | 48 | === Принципы составления итогового теста 49 | 50 | - Начните с легких вопросов 51 | - Структурируйте тест 52 | - Предлагайте 3--4 варианта ответа 53 | - Формулируете привлекательные неверные ответы 54 | - Убедитесь, что задание измеряет именно то, что вы хотите измерить 55 | 56 | ==== Принципы формулирования заданий с выбором ответа 57 | 58 | - Принцип *противоречивости* --- во вариантах использовать отрицание 59 | - Принцип *противоположность* --- во вариантах использовать антонимы 60 | - Принцип *однородности* --- в ответах используются члены одного множества, одного 61 | гомологического ряда 62 | - Принцип *градуирования* --- используется градация по одной из характеристик 63 | - Принцип *комуляциии* -- каждый предыдущий ответ включается в последующих 64 | - Принцип *сочетания* --- вариант ответа складывается из нескольких элемент группы 65 | 66 | === Формы тестовых заданий 67 | 68 | - Задания в закрытой форме 69 | - Выбор ответа 70 | - Выбор одного ответа 71 | - Выбор нескольких ответов 72 | - Градуированный ответ 73 | - Установление соответствия 74 | - Установление последовательности 75 | - Задания в открытой форме 76 | - Дополнение 77 | - Свободное изложение 78 | 79 | == Формирующее оценивание 80 | 81 | Ничего не подытоживает 82 | 83 | === Критерии формирующего оценивания 84 | 85 | - Обезличено 86 | - Облегчает активное обучение 87 | - Обратная связь 88 | - Рефлексия и постановка целей на будущее 89 | - Сосредоточено на обучение 90 | - Гибкое 91 | - Быстрое 92 | - Частое, регулярное 93 | - Можно совмещать с игрой 94 | 95 | === Формирующее оценивание отвечает на вопросы 96 | 97 | - Где ученик сейчас? 98 | - Куда нужно прийти в результате? 99 | - Как это сделать? 100 | 101 | === Приемы формирующего оценивания 102 | 103 | - Билет на выход 104 | - Вопрос одной минуты 105 | - Парковка вопросов --- ученики клеят стикеры с тем, что им [не] понравилось на 106 | уроке 107 | - Фишбоун 108 | 109 | == Критериальное оценивание 110 | 111 | - Повышает объективность оценки, повышает доверие к результату 112 | - Критерии являются основой для самооценки учеников 113 | - Критерии позволяют четко структурировать деятельность учеников 114 | - Способствует организации взаимооценивания 115 | - Критерии являются основной для получения обратной связи 116 | - Критериальные рубрики обеспечивают единый стандарт оценивания 117 | 118 | В идеале критерии разрабатывать вместе с учениками 119 | -------------------------------------------------------------------------------- /prob/lectures/2024-09-13.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Геометрическое определение вероятности 4 | 5 | Рассматриваем подмножества на $RR^n$, которые имеют конечную меру 6 | 7 | Пример эксперимента: попадет ли случайная точка в подмножество 8 | 9 | #figure(image("./geom_prob.svg", height: 5cm)) 10 | 11 | $ P(A) = mu(A) / mu(Omega) $ 12 | 13 | #def[ 14 | События #defitem[несовместны] --- $A dot B = emptyset$ 15 | ] 16 | 17 | == Свойства $P(A)$ 18 | 19 | + $P(A) >= 0 forall A subset Omega$ 20 | + $P(Omega) = 1$ 21 | + если $A_1$ и $A_2$ несовместны, то $P(A_1 + A_2) = P(A_1) + P(A_2)$ 22 | 23 | == Задача 24 | 25 | $x$ --- время прихода Джульеты 26 | 27 | $y$ --- время прихода Ромео 28 | 29 | $abs(x - y) < 1\4$ 30 | 31 | #figure(image("./romeo.svg", height: 5cm)) 32 | 33 | $ P(overline(A)) = mu(overline(A))/mu(Omega) = (9/16)/1 $ 34 | $ P(A) = 1 - 9/16 = 7/16 $ 35 | 36 | = Частотное (статистическое) определение 37 | 38 | #def[ 39 | Пусть опыт проведен $N$ раз, и событие произошло $m_A$ раз. Тогда *частота* 40 | события $A$: $ nu(A) = m_A/N $ 41 | ] 42 | 43 | #def[ 44 | $ P(A) = lim_(N -> oo) nu(A) = lim_(N -> oo) m_A/N $ 45 | ] 46 | 47 | = Аксиоматическое определение Колмагорова 48 | 49 | Пусть $cal(A)$ --- $sigma$-алгебра событий на пространстве $Omega$. Числовая функция 50 | $P: cal(A) -> RR$ --- *вероятность*, если: 51 | + $forall A in cal(A): P(A) >= 0$ --- аксиома неотрицательности 52 | + $P(Omega) = 1$ --- условие нормировки 53 | + если $A_1, ..., A_n, ...$ попарно несовместны, то 54 | $P(sum_(i=1)^oo A_i) = sum_(i=1)^oo P(A_i)$ 55 | 56 | Число $P(A)$ называется вероятностью события $A$ 57 | 58 | Тройка $(Omega, cal(A), P)$ --- вероятностное пространство 59 | 60 | == Свойства $P(A)$ 61 | 62 | + $P(overline(A)) = 1 - P(A)$ 63 | #proof[ 64 | $ Omega = A + overline(A) $ 65 | $ A dot overline(A) = emptyset $ 66 | $ 1 = P(Omega) = P(A + overline(A)) = P(A) + P(overline(A)) $ 67 | ] 68 | 69 | + $P(emptyset) = 1 - P(Omega) = 0$ 70 | + $A subset B => P(A) <= P(B)$ 71 | #proof[ 72 | $ B = A + (B \\ A) $ 73 | $ P(B) = P(A + (B \\ A)) = P(A) + underbrace(P(B \\ A), >=0) $ 74 | ] 75 | 76 | + $forall A: 0 <= P(A) <= 1$ 77 | 78 | + Теорема сложения: $P(A + B) = P(A) + P(B) - P(A dot B)$ 79 | #proof[ 80 | $ A = A Omega = A B + A overline(B) $ 81 | $ B = B Omega = A B + overline(A) B $ 82 | $ A + B = underbrace( 83 | A B + A overline(B) + overline(A) B, 84 | "попарно несовместны" 85 | ) $ 86 | 87 | $ P(A) = P(A B) + P(A overline(B)) => P(A) - P(A B) = P(A overline(B)) $ 88 | $ P(B) = P(A B) + P(overline(A) B) => P(B) - P(A B) = P(overline(A) B) $ 89 | $ P(A + B) 90 | = P(A B) + P(A overline(B)) + P(overline(A) B) =\ 91 | = P(A B) + P(A) - P(A B) + P(B) - P(A B) 92 | = P(A) + P(B) - P(A B) $ 93 | ] 94 | 95 | + Обобщение теоремы сложения: 96 | $ P(underbrace(A_1 + A_2, A) + underbrace(A_3, B)) 97 | = P(A) + P(B) =\ 98 | = P(A_1) + P(A_2) + P(A_3) - P(A_1 A_2) - P(A_1 A_3) - P(A_2 A_3) + P(A_1 A_2 A_3) $ 99 | 100 | $ P(sum_i A_i) 101 | = sum_i P(A_i) 102 | - sum_(i < j) P(A_i A_j) 103 | + sum_(i < j < k) P(A_i A_j A_k) 104 | - ... 105 | + (-1)^(n+1)P(A_1 ... A_n) $ 106 | 107 | = Условная вероятность 108 | 109 | #figure(image("./cond_prob.svg", height: 5cm)) 110 | 111 | Переходим из $Omega$ в $B$ 112 | 113 | Пусть $A, B in Omega$ и $P(B) != 0$, тогда вероятность $A$ при условии $B$: 114 | $ P(A|B) = P(A B) / P(B) $ 115 | 116 | #def[ 117 | $A$ и $B$ #defitem[независимые], если $P(A|B) = P(A)$ 118 | ] 119 | 120 | #def[ 121 | $A$ и $B$ #defitem[независимые], если $P(A B) = P(A)P(B)$ 122 | ] 123 | 124 | Любые несовместные события зависимы 125 | -------------------------------------------------------------------------------- /algo/lectures/2024-11-05.typ: -------------------------------------------------------------------------------- 1 | = Графы 2 | 3 | Граф $G = (V, E)$ --- множество вершин $V$ и ребер $E$ 4 | 5 | == Виды графов 6 | 7 | - *Ориентированный (орграф)*: каждое ребро направлено в одну из сторон 8 | - *Не ориентированный* 9 | 10 | #line(length: 100%) 11 | 12 | - *Взвешенный*: к каждому ребру дописано некоторое число -- его вес 13 | - *Не взвешенный* 14 | 15 | #line(length: 100%) 16 | 17 | Граф может иметь: 18 | - *Петли*: ребро из вершины в саму себя 19 | - *Кратные ребра*: несколько ребер между одной парой вершин 20 | 21 | == Как хранить граф? 22 | 23 | === Матрица смежности 24 | 25 | Храним матрицу `g[n][n]` 26 | 27 | `g[i][j]` --- вес ребра $(i, j)$ (или 0/1 для неориентированного) 28 | 29 | Требует очень много ($O(n^2)$) памяти 30 | 31 | === Список смежности 32 | 33 | Храним `vector> g` 34 | 35 | `g[i]` --- список всех ребер из вершины `i` 36 | 37 | Требует $O(m)$ памяти, где $m = abs(E)$ 38 | 39 | *Самый базовый вариант* 40 | 41 | === Множество смежности 42 | 43 | Аналогично списку смежности, но `vector> g` 44 | 45 | === Список ребер 46 | 47 | Храним `vector> edges` --- список ребер 48 | 49 | == Определения 50 | 51 | Для неориентированного: 52 | - *Компонента связности* --- подмножество вершин, где из каждой можно попасть в 53 | каждую 54 | - *Двудольный граф* --- можно раскрасить вершины в два цвета, что ребра соединают 55 | разные цвета 56 | - *Остов* --- подграф, содержащий все вершины и являющийся деревом 57 | 58 | Для ориентированного: 59 | - *Компоненты сильной связности (КСС)* --- подмножество вершин, где из каждой можно попасть в 60 | каждую 61 | - *DAG (Directed Acyclic Graph)* --- ориентированный граф без циклов 62 | - *TopSort* --- нумерация вершин таким образом, что ребро всегда ведет из вершины 63 | с меньшим номером в вершину с большим 64 | 65 | Для взвешенного: 66 | - *Минимальный остов* --- остов минимального веса 67 | 68 | Для всех: 69 | - *Кратчайшее расстояние между двумя вершинами* 70 | 71 | = BFS (breadth first search) 72 | 73 | Хотим найти кратчайшие расстояние от вершины $Q$ до всех остальных 74 | 75 | Аналогия с пожаром 76 | 77 | ``` 78 | dist[Q] = 0 79 | dist[соседи Q] = 1 80 | dist[ещё не рассмотренные соседи соседей Q] = 2 81 | ... 82 | ``` 83 | 84 | Используем `queue` 85 | 86 | = 0-1 BFS 87 | 88 | Модификация BFS для графов, где ребра имеют вес либо 1, либо 0 89 | 90 | Используем не `queue`, а `deque` 91 | 92 | = DFS 93 | 94 | Пишется приятнее, чем BFS 95 | 96 | Заводим массив `used[n]`: `used[i]` --- были ли мы в вершине `i` 97 | 98 | Во время работы алгоритма ребра делятся на несколько типов: 99 | - Для орграфа: 100 | - *Ребро обхода* --- ребро, по которому мы прошли 101 | - *Прямое ребро* --- ребро, ведущее в потомка, по которому мы не ходили 102 | - *Обратное ребро* --- ребро, ведущее в предка 103 | - *Перекрестное ребро* --- ребро, ведущее ни в предка, ни в потомка 104 | - Для неорграфа: 105 | - Нет перекрестных ребер 106 | - Обратные и прямые ребра не отличимы 107 | 108 | Код: 109 | ```cpp 110 | void dfs(int v) { 111 | used[v] = 1; 112 | for (int to : g[v]) { 113 | if (!used[v]) { 114 | dfs(v); 115 | } 116 | } 117 | } 118 | ``` 119 | 120 | Альтернативный код: 121 | ```cpp 122 | void dfs(int v) { 123 | if (used[v]) return; 124 | used[v] = 1; 125 | 126 | for (int to : g[v]) { 127 | dfs(v); 128 | } 129 | } 130 | ``` 131 | 132 | Применения: 133 | - Количество компонент связности 134 | - Поиск остовного дерева (леса) 135 | - Проверка двудольности 136 | - Поиска цикла 137 | - Поиск эйлерого пути 138 | - Много всего ещё ... 139 | 140 | При обходе дерева можно не хранить `used`, а просто передавать предка: 141 | `void dfs(int v, int p)` 142 | 143 | Через dfs можно считать динамику: 144 | - ДП снизу: `sz[v]` 145 | - ДП сверху: `dep[v]` 146 | -------------------------------------------------------------------------------- /algo/lectures/2024-09-24.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Детерминированные и вероятностные алгоритмы 4 | 5 | == Детерминированные алгоритмы 6 | 7 | #def[ 8 | #defitem[Сложность] --- максимальное время работы на данных размера $n$. 9 | ] 10 | 11 | #def[ 12 | #defitem[Сложность в среднем] --- математическое ожидание количества 13 | действий. 14 | 15 | Для конечномерных: $ E = sum_(x in chi) P(x) dot "cut"(x) $ 16 | Для бесконечномерных: \*какой-то интеграл\* 17 | ] 18 | 19 | От бесконечномерного случая часто можно перейти к конечномерному. Например, в 20 | случае сортировок делать сжатие координат (превращать ) 21 | 22 | == Вероятностные алгоритмы 23 | 24 | #def[ 25 | #defitem[Вероятностные алгоритмы] --- алгоритмы, которые при одних выходных 26 | данных могут иметь разное время работы или разный вывод. Используют 27 | генератор случайных чисел. 28 | ] 29 | 30 | *Виды вероятностных алгоритмов*: 31 | - *Без ошибки*: всегда выдает правильный ответ 32 | - *С односторонней ошибкой*: ошибается только в одну сторону 33 | 34 | Пример: вероятностные алгоритмы проверки на простоту 35 | 36 | - *С двусторонней ошибкой*: ошибается в обе стороны 37 | 38 | #def[ 39 | #defitem[Ожидаемое время работы] --- математическое ожидание времени работы 40 | (для конкретного набора входных данных) 41 | ] 42 | 43 | #def[ 44 | #defitem[Ожидаемая сложность] --- максимальное ожидаемое время на данных 45 | размера $n$. 46 | ] 47 | 48 | == $k$-ая порядковая статистика (вероятностный) 49 | 50 | Выбрали случайный опорный элемент, разделили массив на две части по опорному: 51 | $ underbrace(..., m - 1 "элемент") <= x_i <= underbrace(..., n - m "элементов") $ 52 | 53 | Медиана будет либо опорным элементом, либо элементов в бОльшем куске. 54 | 55 | Оценим ожидаемое время работы. Если массив разбился на куски по $m - 1$ и $n - m$ 56 | $ T(n) = underbrace(T(max(m - 1, n - m)), "в худшем случае ищем в большем куске") 57 | + underbrace(O(n), "на разделение по опорному") $ 58 | 59 | Итого: 60 | $ E(T(n)) &= sum^n_(m=1) P(n) E(T(max(m - 1, n - m))) + O(n) 61 | = sum^n_(m = n/2) 1/n dot 2 E(T(m)) + O(n) = \ 62 | &= 2/n sum_(m = n/2)^(n - 1) E(T(m)) + O(n) 63 | = 2/n (O(n/2) + ... + O(n - 1)) + O(n) = \ 64 | &= 2/n O((3n^2) / 8) + O(n) 65 | = O(3/4 n) + O(n) = O(n) $ 66 | 67 | == $k$-ая порядковая статистика (детерминированный) 68 | 69 | + Делим массив на чанки размера 5 70 | + Сортируем каждый чанк: $7/5 n$ действий 71 | + Берем медиану каждого чанка: $m_1 , ... , m_(n/10)$ 72 | + Ищем медиану медиан рекурсивно 73 | + Используем найденное число в виде опорного элемента в прошлом алгоритме 74 | 75 | $ T(n) = underbrace(T((7n)/10), "прошлый алгоритм") 76 | + underbrace(T(n/5), "рекурсия") 77 | + underbrace(O(n), "разделение") 78 | -> T(n) = O(n) $ 79 | 80 | == Алгоритм Фрейвалдса 81 | 82 | Правда ли, что $A dot B = C$? ($A$, $B$ и $C$ даны) 83 | 84 | Берем случайный вектор из $0$ и $1$: $v = (""_0^1, ""_0^1, ..., ""_0^1)$ 85 | 86 | Если $A B = C$, то $A dot (B dot v) = C dot v$ 87 | 88 | Алгоритм с односторонней ошибкой. Если получили равенство, то 89 | вероятность неудачи не больше одной второй 90 | 91 | Можно повторит процедуру и улучшить вероятность. За $k$ испытаний получаем 92 | вероятность $P_"неуд" <= 1/(2^k)$, а сложность $O(k n^2)$. 93 | 94 | == Лемма Шварца-Зиппеля 95 | 96 | $f(x_1 , ... , x_k)$ --- многочлен степени $n$ 97 | 98 | Считаем, что умеем находить значение $f$ в точке 99 | 100 | Хотим проверить, является ли он тождественным нулем 101 | 102 | + Берем случайный набор данных $(y_1 , ... , y_k) in S^k$ 103 | + Для ненулевого $f: P(f(y_1, ..., y_n) = 0) <= n/abs(S)$ 104 | 105 | == Дерандомизация 106 | 107 | Превращение вероятностного алгоритма в детерминированный 108 | 109 | Для леммы Шварца-Зиппеля и $k = 1$ достаточно проверить $n + 1$ разную точку 110 | -------------------------------------------------------------------------------- /prob/lectures/cond_prob.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 35 | 37 | 42 | 46 | 50 | 54 | Omega 65 | A 76 | B 87 | 88 | 89 | -------------------------------------------------------------------------------- /edu/seminars/2024-11-06.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Информация 4 | 5 | В папке есть таблица записи на итоговое задание 6 | 7 | К следующему занятию придумать тему 8 | 9 | = Коммуникация 10 | 11 | *Коммуникация vs Общение*: 12 | - *Коммуникация*: хотя бы у одного из участников есть цель 13 | - *Общение*: может быть бесцельным 14 | 15 | *Формы коммуникации*: 16 | - *Вербальная*: речь 17 | - *Невербальная*: жесты, мимика 18 | - *Письменная*: текст 19 | - *Визуальная*: рисунки, чертежи 20 | 21 | Источников коммуникации должно быть не слишком мало, но и не слишком много 22 | 23 | #blk(title: [Теория когнитивной нагрузки])[ 24 | Рабочая память не может держать более 7 элементов одновременно. Они попадают 25 | в мозг по разным каналам. Нужно, чтобы эти каналы друг другу не мешали. 26 | ] 27 | 28 | == Принципы эффективной коммуникации 29 | 30 | - Не перебивать 31 | - Не устраивать ненужные споры 32 | - Ясно обозначать свои намерения 33 | - Избегать категоричности 34 | - Говорить тезисами, чётко выражать главную мысль 35 | - Говорить в режиме диалога (верно не для всех контекстов) 36 | - Избегать упреков и обвинений 37 | 38 | == Техники коммуникации 39 | 40 | - *Техника "Я-сообщение"* 41 | 42 | "Когда ты A, я чувствую B, потому что C. Мне бы хотелось, чтобы в будущем D." 43 | 44 | - *Парафраз* 45 | 46 | "Прием активного слушания" 47 | 48 | Перефразировать и переспрашивать то, о чем сказал собеседник, чтобы 49 | убедиться, что вы говорите об одном 50 | 51 | == Основные элементы коммуникации 52 | 53 | - *Отправитель*: тот, кому есть, что сказать 54 | - *Получатель* 55 | - *Сообщение* 56 | - *Канал*: среда, через которую передается сообщение 57 | - *Обратная связь*: реакция получателя на сообщение 58 | 59 | == Виды коммуникации 60 | 61 | - Внутриличностная коммуникация 62 | - Межличностное общение 63 | - Групповая коммуникация 64 | - Общественная коммуникация 65 | - Массовая коммуникация 66 | 67 | == Барьеры для эффективного общения 68 | 69 | - Физические 70 | - Психологические 71 | - Культурные 72 | - Семантические 73 | - Технологические 74 | 75 | = Конфликты в образовании 76 | 77 | #def[ 78 | #defitem[Конфликт] --- это скрытое или явное противодействие сторон, чьи 79 | интересы в какой-либо сфере начали конкурировать между собой 80 | ] 81 | 82 | Ключевой тип конфликта в образовании --- "Учитель-ученик" 83 | 84 | Причины: 85 | - Чрезмерное количество требований к ученику 86 | - Непостоянство требований учителя 87 | - Невыполнение требований учеником 88 | - Несоответствие ожиданий 89 | - Различия в ценностях и убеждениях 90 | - Личностные особенности 91 | 92 | Особенности: 93 | - Неравенство позиций сторон 94 | - Невозможность ученику "выйти из конфликта" 95 | - Зачастую расширение реальных границ конфликта за счет наблюдателей 96 | 97 | == Ловушки конфликта 98 | 99 | #def[ 100 | #defitem[Ловушки конфликта] --- это мысли и желания, которые уводят от 101 | разрешения конфликта, затягивают и нагнетают его 102 | ] 103 | 104 | - *Ловушка крайностей* --- участники не рассматриваем возможность компромисса и видят 105 | только крайности 106 | - *Эмоциональная ловушка* --- гнев, обида, страх заставляют действовать 107 | импульсивно 108 | - *Подмена темы* 109 | - *Неуместные обобщения* 110 | 111 | == Циклы конфликта 112 | 113 | - Образование конфликта 114 | - Выбор стратегии 115 | - Открытое столкновение 116 | - Угасание конфликта 117 | 118 | == Стратегии конфликта 119 | 120 | - *Противоборство*: преследуем только свои цели 121 | - *Уступка*: уступаем другому человеку в ущерб своим интересам 122 | - *Избегание*: стараемся проблему не замечать 123 | - *Компромисс*: каждый получает желаемое, но только частично 124 | 125 | В разных ситуациях разные стратегии более или менее оптимальны 126 | 127 | Хорошо бы попробовать перевести конфликт в мирное русло 128 | 129 | == Алгоритм решения конфликта 130 | 131 | - Спокойствие 132 | - Анализ ситуации 133 | - Открытый диалог между конфликтующими сторонами, умения выслушать и высказать 134 | своё видение ситуации 135 | - Выявление общей цели, способов решения проблемы 136 | -------------------------------------------------------------------------------- /algo/lectures/2024-11-12.typ: -------------------------------------------------------------------------------- 1 | = Приливания 2 | 3 | Делаем динамику на дереве 4 | 5 | В поддеревьях хотим считать какую-то штуку, размер которой имеет размер порядка 6 | размера поддерева. На первый взгляд, для несбалансированного дерева это долгая 7 | операция. 8 | 9 | == На примере 10 | 11 | Пусть есть некоторые "выделенные" вершины. Их примерно $O(n)$. 12 | 13 | Для каждой вершины в какой-то момент времени хотим иметь множество всех 14 | выделенных вершин в её поддереве: $S(v)$. 15 | 16 | Пусть у $v$ есть дочерние вершины $v_1, ..., v_n$. $S(v_1), ..., S(v_n)$ уже 17 | посчитали. Хотим $S(v)$. 18 | 19 | Пусть $"sz"(v_1) >= "sz"(v_2) >= ... >= "sz"(v_n)$. В $"sz"(v_1)$ добавляем 20 | ("приливаем") остальные множества. В конце получим $"sz"(v)$. 21 | 22 | В итоге будет $O(n log n)$ *добавлений*. 23 | 24 | == Доказательство времени работы 25 | 26 | Рассмотрим конкретную вершину $x$. 27 | 28 | $x$ в начале попадет в какое-то множество с размером $1$. $x$ будет перемещаться 29 | только в множество, с бОльшим размером. Итого, размер множества, где лежит $x$ 30 | увеличивается хотя бы в два раза. Значит, каждый элемент "приливается" не более 31 | $log n$ раз. Всего не более $O(n log n)$ приливаний. 32 | 33 | = Система непересекающихся множеств\ (Disjoint Set Union) 34 | 35 | - Изначально есть $n$ множеств по одному элементу. 36 | - Делаем $m$ запросов следующих видов: 37 | - Можно объединить два множества (множество идентифицируется по любому его 38 | элементу) 39 | - Узнать "цвет" (идентификатор) множества 40 | - Проверить, в одном ли множестве лежат две вершины 41 | - Узнать размер (или другую характеристику) множества 42 | 43 | Пусть элементы пронумерованы $0, ..., n - 1$ 44 | 45 | == Первая версия 46 | 47 | Заведем массив цветов `col[n]` и размеров `size[color]`. 48 | 49 | Изначально: `col[i] = i` 50 | 51 | `unite` работает за $O(n)$ (просто перекрашиваем одно множество в другое), 52 | остальное --- за $O(1)$ 53 | 54 | Итого, $O(n^2 + m)$ т.к. максимум $n$ объединений 55 | 56 | == Вторая версия (с приливаниями) 57 | 58 | Для каждого цвета храним позиции элементов этого цвета в 59 | списке#footnote[используем именно список, чтобы можно было быстро их объединять] 60 | `ind[color]`. 61 | 62 | Для `unite` перекрашиваем элементы *меньшего* множества в цвет *большего*. Для 63 | этого обновляем массивы `col` и `ind`. 64 | 65 | Так как приливания, то $O(n log n + m)$. 66 | 67 | == Третья версия 68 | 69 | "Ранговая эвристика" 70 | 71 | Каждое множество --- это дерево 72 | 73 | Для хранения дерева просто храним предка каждой вершины (список дочерних 74 | элементов не храним) -- массив `p[v]`. Пусть в для корня: `p[root] = root` 75 | 76 | Изначально: `p[i] = i` 77 | 78 | Цвет --- номер корня дерева 79 | 80 | ```python 81 | def unite(a, b): 82 | a = col(a) # Перешли от самих вершин, к их корням 83 | b = col(b) 84 | 85 | if a == b: 86 | return 87 | 88 | # Подвешиваем меньшее к большему 89 | if sz(a) < sz(b): 90 | swap(a, b) 91 | 92 | p[a] = b 93 | sz[a] += sz[b] 94 | ``` 95 | 96 | В качестве "размера" дерева можно брать либо размер поддерева, либо высоту, но 97 | лучше брать размер поддерева. 98 | 99 | Получаем $O(n log n + m underbrace(log n, "т.к. col за" log n))$ 100 | 101 | == Четвертая версия (со сжатием путей) 102 | 103 | "Эвристика сжатия путей" 104 | 105 | Улучшение четвертой версии 106 | 107 | `unite` такой же 108 | 109 | ```python 110 | def col(a): 111 | # Если a --- корень дерева, то вернем его 112 | if p[a] == a: 113 | return a 114 | 115 | # Переподвесим вершину к корню. Так мы уменьшим глубину дерева. 116 | p[a] = col(p[a]) 117 | 118 | return p[a] 119 | ``` 120 | 121 | Получаем $O(n dot alpha(n) + m)$ 122 | 123 | $alpha(n)$ --- обратная функция Аккермана. При всех нормальных значениях 124 | $alpha(n) < 4$ 125 | 126 | Есть гипотеза, что сложность будет $O(n + m)$, но это доказано. 127 | 128 | == СНМ с откатами 129 | 130 | Откаты (rollbacks) --- самая слабая версия персистентности. Можем откатиться на шаг назад. 131 | 132 | Нужно делать без сжатия путей 133 | 134 | Храним "лог изменений": массив вершин, которую мы подвешивали в очередном `unite` 135 | -------------------------------------------------------------------------------- /cpp/lectures/2024-10-18.typ: -------------------------------------------------------------------------------- 1 | = Параллельное программирование 2 | 3 | Зачем: 4 | - хотим выполнять разные операции в одно и то же время (например, одновременно 5 | считать и взаимодействовать с пользователем) 6 | - ускорение на многоядерной системой 7 | 8 | Параллельное или конкурентное: 9 | - Параллельное --- хотим решить одну задачу быстрее 10 | - Конкурентное --- есть много задач, которые мы хотим решать одновременно 11 | 12 | Возможности C++: 13 | - Потоки 14 | - Асинхронный вызов 15 | - Сопрограмммы (не совсем конкурентность) 16 | - Параллельные алгоритмы STL 17 | 18 | Средства создать параллельных приложений: 19 | - Примитивы C++ 20 | - OpenMP (стандарт для написания параллельных программ) 21 | - MPI (для кластеров) 22 | - Сторонние библиотеки (Intel TBB, HPX) 23 | 24 | == Параллельные алгоритмы STL 25 | 26 | ```cpp 27 | #include 28 | #include 29 | #include 30 | 31 | int main() { 32 | std::vector vec{1, 5, 2, 10, 3}; 33 | std::sort(std::execution::par, vec.begin(), vec.end()); 34 | } 35 | ``` 36 | 37 | == OpenMP 38 | 39 | ```cpp 40 | double res[LEN]; 41 | int i; 42 | 43 | #pragma omp parallel for num_threads(10) 44 | for (i = 0; i < LEN; ++i) { 45 | res[i] = long_running(i); 46 | } 47 | 48 | g++ -openmp file.cpp 49 | ``` 50 | 51 | == С процессом 52 | 53 | ```c 54 | int main(void) { 55 | pid_t pid; 56 | if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) { 57 | exit(EXIT_FAILURE); 58 | } 59 | pid = fork(); 60 | switch(pid) { 61 | case -1: // ошибка 62 | case 0: // родитель 63 | default: // родитель 64 | } 65 | } 66 | ``` 67 | 68 | == Потоки (thread) 69 | 70 | С функцией: 71 | ```cpp 72 | void do_some_work(); 73 | std::thread my_thread(do_some_work); 74 | ``` 75 | 76 | С функтором: 77 | ```cpp 78 | void do_some_work(); 79 | struct X { 80 | void operator()() { ... } 81 | } 82 | 83 | std::thread my_thread{X()}; 84 | ``` 85 | 86 | У нового thread-а и его родителя общее адресное пространство. 87 | До удаления std::thread нужно сделать либо: 88 | - `join()` --- блокируемся до завершения 89 | - `detach()` --- отсоединяем процесс, он работает в фоне 90 | 91 | Отсоединенный (detach) процесс завершится либо сам, либо вместе с main 92 | 93 | ```cpp 94 | #include 95 | #include 96 | 97 | void f() { 98 | for (size_t i = 0; i < 100; ++i) { 99 | std::cout << i << std::endl; 100 | } 101 | } 102 | 103 | int main() { 104 | std::thread t(f); 105 | t.detach(); // ничего не выведетя 106 | // t.join(); // так выведется всё 107 | } 108 | ``` 109 | 110 | === Передача аргументов 111 | ```cpp 112 | void f(int val); 113 | struct X { 114 | f(int val); 115 | }; 116 | 117 | // Вызов функции 118 | std::thread t1(f, 42): 119 | 120 | // Вызов метода 121 | X obj; 122 | std::thread(&X::f, &obj, 42); 123 | ``` 124 | 125 | Аргументы копируются во внутреннее хранилище, а затем передаются, как r-value. 126 | 127 | === Проблемы с life-time-ом 128 | ```cpp 129 | void f(int*); 130 | 131 | void caller() { 132 | int data[100]; 133 | std::thread t(f, data); // UB: data умирает раньше завершения f 134 | t.detach(); 135 | } 136 | ``` 137 | 138 | === Полезные вещи 139 | - `std::thread` 140 | - `std::thread::hardware_concurrency()` 141 | - `std::this_thread::get_id()` 142 | - `std::this_thread::sleep_for(/* time */)` --- надо делать так, ибо обычный 143 | `sleep` усыпит весь процесс (все thread-ы) 144 | - `std::this_thread::sleep_until(/* ... */)` 145 | - `std::this_thread::yield()` 146 | 147 | === Проблема совместного доступа 148 | 149 | Всё хорошо только тогда, когда есть 150 | - либо только много читающих thread-ов 151 | - либо только один пишущий thread 152 | 153 | === Алгоритм Дейкстры (нет, другой) 154 | 155 | ``` 156 | status[i] in {competing, out, crit} 157 | turn in {1, ..., N} 158 | repeat 159 | while turn != i do 160 | if status[turn] == out then 161 | turn := i 162 | end if 163 | end while 164 | status[i] = cs 165 | until not exists other : satus[other] = cs 166 | CS 167 | status[i] = out 168 | ``` 169 | 170 | === `std::mutex` и `std::lock_guard` 171 | 172 | Реализует взаимное исключение 173 | -------------------------------------------------------------------------------- /prob/homeworks/to-2024-10-13.typ: -------------------------------------------------------------------------------- 1 | = ДЗ 5 2 | 3 | == Задача 3 4 | 5 | #figure( 6 | table( 7 | columns: 3, 8 | align: center, 9 | $x$, $a$, $-a$, 10 | $P$, $1/2$, $1/2$, 11 | ) 12 | ) 13 | 14 | $ M(x) = a dot 1/2 + (-a) dot 1/2 = 0 $ 15 | $ M(x^2) = a^2 dot 1/2 + (-a)^2 dot 1/2 = a^2 $ 16 | $ D(x) = M(x^2) - (M(x))^2 = a^2 - 0^2 = a^2 $ 17 | 18 | Ответ. Не верно 19 | 20 | == Задача 4 (в) 21 | 22 | #figure( 23 | table( 24 | columns: 6, 25 | align: center, 26 | $x$, $-0.5$, $0$, $0.5$, $1$, $1.5$, 27 | $P$, $0.1$, $0.4$, $0.1$, $0.3$, $0.1$, 28 | $2^x$, $0.707$, $1$, $1.414$, $2$, $2.828$, 29 | $(2^x)^2$, $0.5$, $1$, $2$, $4$, $8$, 30 | ) 31 | ) 32 | 33 | $ M(2^x) = 0.707 dot 0.1 + 1 dot 0.4 + 1.414 dot 0.1 + 2 dot 0.3 + 2.828 dot 0.1 = 1.495 $ 34 | $ M((2^x)^2) = 0.5 dot 0.1 + 1 dot 0.4 + 2 dot 0.1 + 4 dot 0.3 + 8 dot 0.1 = 2.65 $ 35 | $ D(2^x) = M((2^x)^2) - (M(2^x))^2 = 0.415 $ 36 | 37 | Ответ. $M(2^x) = 1.495, D(2^x) = 2.65$ 38 | 39 | == Задача 9 40 | 41 | #figure(table( 42 | columns: 3, 43 | $X$, $-1$, $1$, 44 | $P$, $1/2$, $1/2$, 45 | )) 46 | 47 | $ F_X (1/2) = P(X <= 1/2) = P(-1) = 1/2 $ 48 | $ F_X (-1/2) = P(X <= -1/2) = P(-1) = 1/2 $ 49 | 50 | Ответ. $F_X (1/2) = F_X (-1/2) = 1/2$ 51 | 52 | == Задача 10 53 | 54 | $ xi ~ "Bi"(1, 0.2) $ 55 | 56 | #figure(table( 57 | columns: 3, 58 | $xi$, $0$, $1$, 59 | $p$, $C_1^0 p^0 q^1 = 0.8$, $C_1^1 p^1 q^0 = 0.2$, 60 | $y = 1 - x^n$, $1 - 0^n = 1$, $1 - 1^n = 0$, 61 | )) 62 | 63 | Ответ. $y ~ "Bi"(1, 0.8)$ 64 | 65 | == Задача 11 66 | 67 | $ X ~ "Bi"((1, 1/2))$ 68 | 69 | #figure(table( 70 | columns: 3, 71 | align: center, 72 | $x$, $0$, $1$, 73 | $p$, $1/2$, $1/2$, 74 | $x^2$, $0$, $1$, 75 | )) 76 | 77 | $ M(x) = 0 dot 1/2 + 1 dot 1/2 = 1/2 $ 78 | $ M(x^2) = 0 dot 1/2 + 1 dot 1/2 = 1/2 $ 79 | $ D(x) = M(x^2) - (M(x))^2 = 1/2 - 1/4 = 1/4 $ 80 | 81 | Ответ. равны 82 | 83 | == Задача 12 84 | 85 | $ X ~ "Bi"(4, 0.1) $ 86 | 87 | $X$ принимает значения $0, 1, 2, 4$. 88 | 89 | $ F_X (-10) = P(X <= -10) = 0 $ 90 | 91 | Ответ. 0 92 | 93 | == Задача 19 94 | 95 | $ X ~ R(-1, 1) $ 96 | 97 | - (а) 98 | $ M(x) = (-1 + 1) / 2 = 0 $ 99 | $ P(x < M(x)) = F_x (M(x)) = F_x (0) = (0 - (-1)) / (1 - (-1)) = 1/2 $ 100 | $ P(x > M(x)) = 1 - F_x (M(x)) = 1/2 $ 101 | 102 | Ответ. $P(x < M(x)) = P(x > M(x)) = 1/2$ 103 | 104 | - (б) 105 | $ sqrt(D(x)) = sqrt((1 - (-1))^2 / 12) = 1/sqrt(3)$ 106 | $ abs(x - M(x)) = abs(x) ~ R(0, 1) $ 107 | $ P(abs(x) < 1/sqrt(3)) = F_abs(x) (1/sqrt(3)) = (1/sqrt(3) - 0) / (1 - 0) 108 | = 1/sqrt(3) = 0.577 $ 109 | 110 | Ответ. $1/sqrt(3) = 0.577$ 111 | 112 | 113 | == Задача 27 114 | 115 | - Чтобы агент обратился к ровно $k (k <= 4)$ покупателям, $k - 1$ первых должны ему 116 | отказать, а $k$-ый должен согласиться. 117 | 118 | - Чтобы агент обратился к ровно пяти покупателям, 4 первых должны ему отказать 119 | 120 | #figure(caption: [Ряд распределения], table( 121 | columns: 6, 122 | $x$, $1$, $2$, $3$, $4$, $5$, 123 | $p$, $0.5$, $0.2$, $0.12$, $0.054$, $0.126$, 124 | )) 125 | 126 | $ M(x) = 1 dot 0.5 + 2 dot 0.2 + 3 dot 0.12 + 4 dot 0.054 + 5 dot 0.126 = 2.106 $ 127 | $ M(x^2) = 1 dot 0.5 + 4 dot 0.2 + 9 dot 0.12 + 16 dot 0.054 + 25 dot 0.126 = 6.394 $ 128 | $ D(x) = M(x^2) - (M(x))^2 = 1.959 $ 129 | 130 | Ответ. $M(x) = 2.106, D(x) = 1.959$ 131 | 132 | == Задача 28 133 | 134 | $ x ~ "Bi"(200, 0.3) $ 135 | 136 | - (а) 137 | 138 | $ M(x) = n p = 200 dot 0.3 = 60 $ 139 | $ D(x) = n p q = 200 dot 0.3 dot 0.7 = 42 $ 140 | 141 | - (б) 142 | $ P(x = [M(x)]) = P(x = 60) = C_200^60 dot 0.3^60 dot 0.7^140 = 0.06146$ 143 | 144 | == Задача 29 (а) 145 | 146 | Вероятность, что некоторая карта совпадет равна $1/36$. 147 | Тогда $x ~ "Bi"(36, 1/36)$. 148 | 149 | $ M(x) = n p = 36 dot 1/36 = 1 $ 150 | 151 | == Задача 32 152 | 153 | $ x ~ "Bi"(10'000, 0.2) $ 154 | 155 | $ M(x) = n p = 10'000 dot 0.2 = 2000 $ 156 | $ D(x) = n p q = 10'000 dot 0.2 dot 0.8 = 1600 $ 157 | $ sigma(x) = sqrt(D(x)) = 40 $ 158 | -------------------------------------------------------------------------------- /notes: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | set -o pipefail 5 | 6 | EXEC="$0" 7 | 8 | usage() { 9 | cat << END 1>&2 10 | Usage: 11 | $EXEC help 12 | $EXEC [OPTIONS] [DIR] 13 | 14 | Description: 15 | Compiles notes in . must contain main.typ file. 16 | A name of output file is generated from input file's metadata. 17 | Using current directory if is not provided. 18 | 19 | Modes: 20 | help Print this message. 21 | compile Compile a note in . 22 | open Compiles and opens note in . 23 | name Prints output file name for note in . 24 | 25 | Options: 26 | -r Recurcievly run for all sutable subdiectroies of . 27 | -o Explicitly specify output file name. 28 | END 29 | } 30 | 31 | # args: scripts_args 32 | # globals defined: mode, is_recursive, dir, output_file 33 | parse_args() { 34 | case "$1" in 35 | 'help') 36 | usage 37 | exit 0 38 | ;; 39 | 40 | 'name') 41 | mode='name' 42 | ;; 43 | 44 | 'compile') 45 | mode='compile' 46 | ;; 47 | 48 | 'open') 49 | mode='open' 50 | ;; 51 | 52 | *) 53 | echo "error: undefined mode '$1'" 1>&2 54 | usage 55 | exit 1 56 | ;; 57 | esac 58 | 59 | is_recursive=false 60 | output_file="" 61 | OPTIND=2 62 | while getopts ':ro:' arg; do 63 | case "$arg" in 64 | 'r') 65 | is_recursive=true 66 | ;; 67 | 68 | 'o') 69 | output_file="$OPTARG" 70 | ;; 71 | 72 | *) 73 | echo "error: undefined flag '$arg'" 1>&2 74 | usage 75 | exit 1 76 | ;; 77 | esac 78 | done 79 | 80 | dir="${!OPTIND}" 81 | 82 | if [ -z "$dir" ]; then 83 | dir='.' 84 | fi 85 | } 86 | 87 | # globals used: dir 88 | # globlas defined: typst_file 89 | get_typst_file() { 90 | if [ ! -d "$dir" ]; then 91 | echo "error: '$dir' is not a directory" 1>&2 92 | exit 1 93 | fi 94 | 95 | typst_file="$dir/main.typ" 96 | 97 | if [ ! -f "$typst_file" ]; then 98 | echo "error: '$dir' does not contain a main.typ file" 1>&2 99 | exit 1 100 | fi 101 | } 102 | 103 | # globals used: dir, typst_file, output_file 104 | # globals defined: output_file 105 | get_output_file() { 106 | if [ ! -z "$output_file" ]; then 107 | return 108 | fi 109 | 110 | local document_info="$(typst query --root . "$typst_file" '' --field 'value')" 111 | 112 | if [ -z "$document_info" ] || [ "$(echo "$document_info" | jq -r 'length')" == '0' ]; then 113 | echo 'error: failed to read document info' 1>&2 114 | exit 1 115 | fi 116 | 117 | local title="$(echo "$document_info" | jq -r '.[0].title')" 118 | 119 | if [ -z "$title" ]; then 120 | echo 'error: failed to get document title' 1>&2 121 | exit 1 122 | fi 123 | 124 | local subtitle="$(echo "$document_info" | jq -r '.[0].subtitle')" 125 | 126 | if [ -z "$subtitle" ]; then 127 | echo 'error: failed to get document subtitle' 1>&2 128 | exit 1 129 | fi 130 | 131 | output_file="$dir/${title// /_}_${subtitle// /_}.pdf" 132 | } 133 | 134 | main() { 135 | parse_args "$@" 136 | 137 | if [ "$is_recursive" == true ]; then 138 | fd 'main.typ' "$dir" -x "$EXEC" "$mode" '{//}' 139 | exit 0 140 | fi 141 | 142 | get_typst_file 143 | get_output_file 144 | 145 | if [ "$mode" == 'name' ]; then 146 | echo "$output_file" 147 | fi 148 | 149 | if [ "$mode" == 'compile' ] || [ "$mode" == 'open' ]; then 150 | echo "Compiling '$typst_file' into '$output_file'..." 151 | typst compile --root . "$typst_file" "$output_file" 152 | echo 'Compilation successful' 153 | fi 154 | 155 | if [ "$mode" == 'open' ]; then 156 | echo "Opening '$output_file'..." 157 | xdg-open "$output_file" > /dev/null 2>&1 & 158 | fi 159 | } 160 | 161 | main "$@" 162 | -------------------------------------------------------------------------------- /algo/lectures/2024-10-01.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | == Время работы quicksort-а 4 | 5 | Случайно выбираем опорный элемент $x$ 6 | 7 | Мысленно отсортируем массив: 8 | $ a_1, a_2, ..., a_n --> b_1, b_2, ..., b_n $ 9 | 10 | Опорный элемент $x$ сравнивается со всем и исключается из работы. 11 | Значит, два элемента никогда не сравниваются больше одного раза. 12 | 13 | Пусть $delta_(i j) = "int"(b_i " сравнивали с " b_j)$. 14 | Для времени работы считаем количество сравнений: 15 | $ E(T(n)) = E(sum_(i = 0)^(n-1) sum_(j = i + 1)^n delta_(i j)) 16 | = sum sum E(delta_(i j)) = sum sum P(b_i " сравнивали с " b_j) $ 17 | 18 | Два элемента $b_i$ и $b_j$ НЕ будут сравниваться, если между ними когда-то 19 | выбирался опорный. Они будут сравниваться только, если среди элементов 20 | $b_i, ..., b_j$ первым был выбран $i$-ый или $j$-ый. 21 | 22 | $ E(T(n)) = sum_(i = 0)^(n-1) sum_(j = i + 1)^n 2/(j - i + 1) 23 | = sum_(i = 0)^(n - 1) sum_(k = 1)^(n - i) 2/(k + 1) 24 | = sum_(i = 0)^(n - 1) 2 underbrace((1/2 + 1/3 + ... + (n - i + 1)), O(log n)) 25 | = O(n log n) $ 26 | 27 | == Skip List 28 | 29 | Вероятностная структура данных на основе list-а и операциями, как у дерева 30 | поиска 31 | 32 | Элементы лежат по возрастанию. Есть фиктивные элементы $-oo$ и $oo$ 33 | в начале и конце. 34 | 35 | $ -oo -> -4 -> 0 -> 1 -> 3 -> 7 -> 12 -> 15 -> +oo $ 36 | 37 | Хотим прыгать по списку большими шагами, а не только шагами по 1. 38 | 39 | Делаем новый список ("уровень"), в который включаем элементы данного с 40 | вероятностью $P = 1/2$. Бесконечности всегда переходят на новый уровень. 41 | 42 | В каждом элементе храним указатель направо и вниз. Отдельно храним указатель на 43 | $-oo$ верхнего уровня. 44 | 45 | #figure( 46 | caption: [Структура списка], 47 | table( 48 | columns: 18, 49 | stroke: none, 50 | align: center, 51 | [], $arrow.b$, $$, $$, $$, $$, $$, $$, $$, $$, $$, $$, $$, $$, $$, $$, $$, $$, 52 | [Уровень 2:], $-oo$, $->$, $-4$, $->$, $ $, $ $, $ $, $ $, $ $, $ $, $7$, $->$, $ $, $ $, $ $, $ $, $+oo$, 53 | [Уровень 1:], $-oo$, $->$, $-4$, $->$, $ $, $ $, $ $, $ $, $3$, $->$, $7$, $->$, $ $, $ $, $15$, $->$, $+oo$, 54 | [Уровень 0:], $-oo$, $->$, $-4$, $->$, $0$, $->$, $1$, $->$, $3$, $->$, $7$, $->$, $12$, $->$, $15$, $->$, $+oo$, 55 | ) 56 | ) 57 | 58 | Операции: 59 | - Поиск: спускаемся по дереву 60 | - Удаление: удаляем из всех слоев 61 | - Добавление: случайно выбираем в каких слоях элемент будет, а в каких --- нет (количество 62 | слоев может увеличиться), потом добавляем. 63 | 64 | Способы реализации: 65 | - multiple nodes: несколько уровней с node-ами 66 | - fat nodes: один уровень, но в каждой node-е несколько указателей 67 | 68 | Преимущество перед деревом: 69 | - Легко пишется 70 | - Легко распараллеливается (можно вставлять несколько элементов одновременно) 71 | - Легко печатается 72 | 73 | $ P("есть i-ый уровень") = 1 - (1 - 1/(2^i))^n 74 | underbrace(<=, "неравенство бернули") 1 - (1 - n/(2^i)) = n / (2^i) $ 75 | 76 | $ i = 4 log_2 n: P(i) <= n/(2^(4 log n)) = n/(n^4) = 1/(n^3) $ 77 | 78 | === Модификации Skip List-а 79 | 80 | - $p != 1/2$. 81 | - количество слоев: $log_(1/p) n$ 82 | - $O(1/p log_(1/p) n)$ 83 | - Лучший вариант $p = 1/e$, но на практике, вероятно, бесполезно. 84 | - Можно сделать только два слоя: получим корневую декомпозицию 85 | 86 | == Метод имитации отжига 87 | 88 | Пытаемся минимизировать некоторую величину -- функционал качества (например, какой-нибудь путь в графе, 89 | расставить на доску ферзей, которые друг друга не бьют). 90 | 91 | Будем пытаться улучшить значение функционала: $Q_0 -> Q_1 -> ...$ 92 | 93 | #blk(title: [Плохой способ])[ 94 | Будем рандомно генерировать новое состояние и переходить на него только, 95 | если оно лучше. 96 | 97 | Не работает, так как можно попасть в локальный минимум, а не глобальный. 98 | ] 99 | 100 | Вводим понятие температуры $T_i$, функции, которая как-то убывает с каждой итерацией. 101 | 102 | Делаем случайное, небольшое изменение. Если функционал стал меньше, то 103 | переходим, иначе переходим с вероятностью: 104 | $ P = e^(-(Q_(i + 1) - Q_i) / T_i) $ 105 | 106 | Идея в том, что изначально (когда $T_i$ большое) у нас плохое состояние и не 107 | страшно его "потерять", перепрыгнув в другое. Потом (когда $T_i$ маленькое), 108 | состояние более хорошее и перепрыгивать мы хотим меньше. 109 | -------------------------------------------------------------------------------- /prob/lectures/2024-11-15.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | === Свойства коэффициента корреляции 4 | 5 | - $rho_(xi eta) <= 1$ 6 | - $rho_(xi xi) = 1$ 7 | - Если $eta = a xi + b, a != 0$, то 8 | $ rho_(xi eta) = match( 9 | 1, a > 0; 10 | -1, a < 0; 11 | ) $ 12 | 13 | #proof[ 14 | $ rho_(xi eta) &= "cov"(xi, eta) / sqrt(D xi D eta) 15 | = (E_(xi eta) - E_xi E_eta) / sqrt(D xi D eta) 16 | = (E xi (a xi + b) - E xi E (a xi + b)) / sqrt(D xi D(a xi + b)) =\ 17 | &= (a E xi^2 + cancel(b E xi) - a (E xi)^2 - cancel(b E xi)) / sqrt(a^2 (D xi)^2) 18 | = (a (E xi^2 - (E xi)^2)) / (abs(a) D xi) 19 | = (a D xi) / (abs(a) D xi) 20 | $ 21 | ] 22 | 23 | - Пусть $abs(rho_(xi eta)) = 1 => eta = a xi + b$ 24 | 25 | #proof[ 26 | - Пусть $rho_(xi eta) = 1$: 27 | 28 | $ D(xi^* - eta^*) &= D xi^* + D eta^* + 2 "cov"(xi^*, - eta^*) =\ 29 | &= D xi^* + D eta^* - 2 "cov"(xi^*, eta^*) 30 | = 2 - 2 rho_(xi eta) = 2 (1 - rho_(xi eta)) = 0 $ 31 | 32 | $ D (xi^* - eta^*) = 0 $ 33 | 34 | $ xi^* - eta^* = c $ 35 | 36 | $ (xi - m_xi) / sigma_xi - (eta - m_eta) / sigma_eta = c $ 37 | 38 | - Пусть $rho_(xi eta) = -1$: 39 | 40 | $ D(xi^* + eta^*) = D xi^* + D eta^* + 2 "cov"(xi^*, eta^*) 41 | = 2 (1 + rho_(xi eta)) = 0 $ 42 | ] 43 | 44 | #blk(title: [Пример: зависимы, но не коррелированы])[ 45 | $ x ~ R(-a, a) $ 46 | 47 | $ n = xi^2 $ 48 | 49 | $ "cov" (xi, eta) = E xi eta - underbrace(E xi, = 0) E eta 50 | = E xi^3 = integral_(-a)^(a) xi^3 dot 1/(2 a) d x = 0 $ 51 | 52 | Так получается, потому что ковариация "отлавливает" только линейные 53 | зависимости 54 | ] 55 | 56 | == Ковариационная матрица 57 | 58 | #def[ 59 | #defitem[Ковариационной матрицей] вектора $xi = (xi_1, ..., xi_n)$ 60 | называется матрица $K_xi = (k_(i j))$, где $k_(i j) = "cov"(xi_i, xi_j)$ 61 | ] 62 | 63 | === Свойства ковариационной матрицы 64 | 65 | - $k_(i j) = k_(j i)$ 66 | - $k_(i i) = D xi_i$ 67 | - $K_xi$ --- неотрицательно определенная: 68 | 69 | $ forall lambda_1, ..., lambda_n in RR: 70 | sum_i sum_j lambda_i lambda_j k_(i j) >= 0 $ 71 | 72 | #proof[ 73 | $ 0 &<= E(sum_(i = 1)^n lambda_i xi_i^0)^2 74 | = E (sum_i sum_j lambda_i lambda_j xi_i^0 xi_j^0) 75 | = lambda_i lambda_j sum_i sum_j E (xi_i^0 xi_j^0) 76 | = lambda_i lambda_j sum_i sum_j k_(i j) 77 | $ 78 | ] 79 | 80 | == Корреляционной матрица 81 | 82 | #def[ 83 | #defitem[Корреляционной матрицей] вектора $xi = (xi_1, ..., xi_n)$ 84 | называется матрица $R_xi = (rho_(i j))$, где $rho_(i j) = rho(xi_i xi_j)$ 85 | ] 86 | 87 | === Свойства корреляционной матрицы 88 | 89 | - $rho_(i j) = rho_(j i)$ 90 | - $rho_(i i) = 1$ 91 | - $rho_xi$ --- неотрицательно определенная 92 | 93 | По ковариационной матрице можно построить корреляционную, а наоборот -- не можем 94 | 95 | == Формула свертки 96 | 97 | Пусть $xi_1$ и $xi_2$ --- независимы, тогда 98 | $ f_(xi_1 + xi_2) (y) 99 | = integral_(-oo)^(+oo) f_xi_1 (x) f_xi_2 (y - x) d x. $ 100 | 101 | #proof[ 102 | $ F_(xi_1 + xi_2) (y) = P(xi_1 + xi_2 <= y) =\ 103 | = integral.double_(x_1 + x_2 <= y) f_(xi_1) (x_1) f_(xi_2) (x_2) d x_2 d x_1 104 | = integral_(-oo)^(+oo) integral_(-oo)^(z - x) f_(xi_1) (x) f_(xi_2) (y) d x_2 d x_1 $ 105 | 106 | $ f_(xi_1 + xi_2) (y) 107 | = d/(d y) F_(xi_1 + xi_2) (y) 108 | = integral_(-oo)^(+oo) f_(xi_1) (x) f_(xi_2)(y - x) d x $ 109 | ] 110 | 111 | 112 | === Пример 113 | 114 | $ xi_1 ~ N(0, 1); xi_2 ~ N(0, 1) $ 115 | 116 | $xi_1, xi_2$ --- независимы 117 | 118 | $ eta = xi_1 + xi_2 $ 119 | 120 | $ f_eta (z) &= integral_(-oo)^(+oo) 1/sqrt(2 pi) e^(- x^2 / 2) 1/sqrt(2 pi) e^(-(z - x)^2 / 2) 121 | = integral_(-oo)^(+oo) 1/sqrt(2 pi) e^(-x^2/2 - (z^2/2 - (2 x z) / 2+ x^2/2)) d x =\ 122 | &= e^(-z^2/2)/(sqrt(2 pi) sqrt(2)) integral_(-oo)^(+oo) 1/(sqrt(2pi) sqrt(1/2)) e^(-(x - z/2)^2) 123 | = e^(-z^2/2)/(sqrt(2 pi) sqrt(2)) $ 124 | 125 | Снова получили гауссово распределение 126 | 127 | #blk[ 128 | Пусть $xi_1, ..., xi_n$ --- независимые случайные величины такие, что 129 | $xi_i ~ N(m_i, sigma_i^2)$, то 130 | $ (eta = xi_1 + ... + xi_n) ~ N(m_eta, D_eta), $ 131 | где 132 | $ m_eta = sum m_i $ 133 | $ D_eta = sum D_i $ 134 | ] 135 | -------------------------------------------------------------------------------- /prob/homeworks/to-2024-09-16.typ: -------------------------------------------------------------------------------- 1 | = ДЗ 1 2 | 3 | == Задача 25 (1) 4 | 5 | - (а) 6 | + При $k > 17$ все карманы пусты. $ P = 1 $ 7 | + При $k <= 17$, $k - 1$ карманов пусты, всего карманов $17$. $ P = (k - 1)/17 $ 8 | 9 | - (б) $ P = 2/17 dot 1/16 dot 15/15 dot 14/14 = 2/17 dot 1/16 = 1/136 $ 10 | 11 | - (в) $ P = 1/10 dot 1/10 = 1/100 $ 12 | 13 | == Задача 26 (4) 14 | 15 | - (A) 16 | + Способов выбрать два туза для первой пачки: $C^2_4$ 17 | + Способов выбрать остальные карты для первой пачки: $C^24_48$ 18 | + Всего способов разделить на две части: $C^26_52$ 19 | + Итого, $ P = (C^2_4 C^24_48)/(C^26_52) $ 20 | 21 | - (B) Все тузы либо в первой пачке, либо во второй: 22 | $ P=(C^22_48 + C^26_48)/(C^26_52) $ 23 | 24 | - (C) Либо в первой один туз, а во второй --- три, либо наоборот. Выберем 25 | первую: 26 | $ P=(2 dot C^1_4 C^25_48) / (C^26_54) $ 27 | 28 | == Задача 27 (5) 29 | 30 | - Первый человек родился в некий день из $365$ 31 | - Под второго осталось $365 - 1 = 364$ 32 | - Под третьего --- $365 - 2 = 363$ 33 | - ... 34 | - Под $r$-того --- $365 - r + 1$ 35 | 36 | $ P = 365/365 dot 364/365 dot ... dot (365 - r + 1)/365 $ 37 | 38 | При $r = 23: P approx 0.49$ 39 | 40 | == Задача 28 (6) 41 | 42 | #figure( 43 | caption: [Число перестановок], 44 | table( 45 | columns: 2, 46 | [Всего], $6!$, 47 | [Буквы А], $3!$, 48 | [Буквы Н], $2!$, 49 | [Буквы С], $1!$, 50 | [*Различных*], $(6!)/(3! 2! 1!) = 60$, 51 | [*Подходящих*], $1$, 52 | ) 53 | ) 54 | 55 | $ P = 1/60 $ 56 | 57 | == Задача 29 (7) 58 | 59 | Аналогично задаче 5. 60 | 61 | $ P = 30/30 dot 29/30 dot ... dot 26/30 = 0.7037(3) $ 62 | 63 | == Задача 30 (11) 64 | 65 | Выбрать получивших номера: $C^6_10$ 66 | 67 | - (а) Выбрать 6 мужчин: $C^6_6 = 1$. $ P = 1/C^6_10 = 1/210 $ 68 | 69 | - (б) Выбрать 4 муж --- $C^4_6$, 2 жен --- $C^2_4$. 70 | $ P=(C^4_6 C^2_4)/C^6_10 = 3/7 $ 71 | 72 | - (в) Обратно пункту а. $ P = 1 - 1/210 = 209/210 $ 73 | 74 | == Задача 31 (12) 75 | 76 | Не все из 12-ти комбинаций равновероятны. Так, например, комбинация `6-4-1` 77 | соответствует шести ситуациям: 78 | #table( 79 | columns: 3, 80 | table.header[*1-ая кость*][*2-ая кость*][*3-ая кость*], 81 | $1$, $4$, $6$, 82 | $1$, $6$, $4$, 83 | $4$, $1$, $6$, 84 | $4$, $6$, $1$, 85 | $6$, $1$, $4$, 86 | $6$, $4$, $1$, 87 | ) 88 | 89 | Комбинация `4-4-3` --- трем: 90 | #table( 91 | columns: 3, 92 | table.header[*1-ая кость*][*2-ая кость*][*3-ая кость*], 93 | $3$, $4$, $4$, 94 | $4$, $3$, $4$, 95 | $4$, $4$, $3$, 96 | ) 97 | 98 | А комбинация `4-4-4` --- только одной: 99 | #table( 100 | columns: 3, 101 | table.header[*1-ая кость*][*2-ая кость*][*3-ая кость*], 102 | $4$, $4$, $4$, 103 | ) 104 | 105 | == Задача 32 (13) 106 | 107 | - (а) выберем в одну (первую или вторую) из подгрупп шесть лидирующих и ещё три не лидирующие: 108 | $ P = (2 dot C^6_6 dot C^3_12) / C^9_18 = (2 dot C^3_12) / C^9_18 $ 109 | 110 | - (б) выберем три лидирующие команды и шесть не лидирующих команд в первую группу: 111 | $ P = (C^3_6 dot C^6_12) / C^9_18 $ 112 | 113 | == Задача 33 (14) 114 | 115 | #table( 116 | columns: 4, 117 | stroke: none, 118 | [шампанское], $5$, $->$, $4$, 119 | [белое вино], $3$, $->$, $2$, 120 | [красное вино], $2$, $->$, $1$, 121 | table.hline(), 122 | [всего], $10$, $->$, $7$, 123 | ) 124 | 125 | $ P = (C^4_5 dot C^2_3 dot C^1_2) / C^7_10 $ 126 | 127 | == Задача 34 (15) 128 | 129 | - (а) Рассмотрим обратное событие: 130 | 131 | #table( 132 | columns: 4, 133 | stroke: none, 134 | [Айова], $2$, $->$, $0$, 135 | [Остальные], $98$, $->$, $50$, 136 | table.hline(), 137 | [Всего], $100$, $->$, $50$, 138 | ) 139 | 140 | $ P = 1 - (C^0_2 dot C^50_98) / C^50_100 = 1 - C^50_98 / C^50_100 $ 141 | 142 | - (б) 143 | 144 | #table( 145 | columns: 4, 146 | stroke: none, 147 | [Штат 1], $2$, $->$, $1$, 148 | [Штат 2], $2$, $->$, $1$, 149 | table.cell(colspan: 4)[...], 150 | [Штат 50], $2$, $->$, $1$, 151 | table.hline(), 152 | [Всего], $100$, $->$, $50$, 153 | ) 154 | 155 | $ P = (C^1_2)^50 / C^50_100 = 2^50 / C^50_100 $ 156 | 157 | == Задача 35 158 | 159 | Рассмотрим обратное событие: все ботинки из разных пар. 160 | 161 | $ P = 1 - 20/20 dot 18/19 dot 16/18 dot 14/17 $ 162 | -------------------------------------------------------------------------------- /cpp/lectures/2024-09-20.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Обобщенное программирование (шаблоны) 4 | 5 | #def[ 6 | #defitem[Обобщенное программирование] --- набор методов для создания структур 7 | и алгоритмов, которые могут работать в различных ситуациях и с различными 8 | исходными данными. 9 | ] 10 | 11 | Пример: 12 | ```cpp 13 | double total(const double* data, size_t len) { 14 | double sum = 0; 15 | for (size_t i = 0; i < len; ++i) { 16 | sum += data[i]; 17 | } 18 | return sum; 19 | } 20 | ``` 21 | 22 | Плохой вариант: трижды сделать `Ctrl-C, Ctrl-V` 23 | 24 | Мета программирование --- программы, которые пишут программы 25 | 26 | Пример с шаблонами: 27 | ```cpp 28 | template 29 | V total(const V* data, size_t len) { 30 | V sum = 0; 31 | for (size_t i = 0; i < len; ++i) { 32 | sum += data[i]; 33 | } 34 | return sum; 35 | } 36 | ``` 37 | 38 | Обращение к функции от конкретного типа создает реализацию перегруженной функции. 39 | Т.е. шаблон создает семейство функций. 40 | 41 | Улучшение. Из 42 | ```cpp 43 | V sum = 0; 44 | ``` 45 | в 46 | ```cpp 47 | V sum{}; 48 | ``` 49 | 50 | Посчитать сумму: 51 | ```cpp 52 | auto result = std::accumulate(A.begin(), A.end(), decltype(A)::value_type(0)); 53 | 54 | auto result = std::reduce(A.begin(), A.end()); 55 | 56 | std::for_each(A.begin(), A.end(), [&](int n) { 57 | result += n; 58 | }); 59 | ``` 60 | 61 | == Правила вывода типов шаблонов 62 | 63 | ```cpp 64 | template 65 | void f(const T& param); 66 | 67 | int x = 1; 68 | f(x); // Чему равно T? 69 | // T = int 70 | // ParamType = const int& 71 | ``` 72 | 73 | Правила: 74 | + Если в `f(expr)`, `expr` --- ссылка, то ссылка отбрасывается 75 | + Тип `T` получается из сопоставления (pattern matching) типа `expr` и 76 | `ParamType` 77 | 78 | *TODO:* см презентацию 79 | 80 | == Виды шаблонов 81 | 82 | - Функции 83 | ```cpp 84 | template void f(T arg); 85 | ``` 86 | 87 | - Классы 88 | ```cpp 89 | template class Matrix; 90 | ``` 91 | 92 | - Переменные 93 | ```cpp 94 | template 95 | T pi = T(3.1415926L); 96 | ``` 97 | 98 | - Типы (псевдонимы типов) 99 | ```cpp 100 | template using ptr = T*; 101 | ptr x; 102 | ``` 103 | 104 | - Концепты (будет позднее) 105 | ```cpp 106 | template 107 | concept C1 = sizeof(T) != sizeof(int); 108 | ``` 109 | 110 | == Специализация 111 | 112 | Специализации должны быть написаны до первого использования 113 | 114 | === Полная специализация 115 | 116 | ```cpp 117 | // Общая реализация 118 | template 119 | class Matrix {...}; 120 | 121 | // Более эффективная 122 | // реализация для bool-ок 123 | template<> 124 | class Matrix {...}; 125 | ``` 126 | 127 | === Частичная специализация 128 | 129 | ```cpp 130 | template 131 | class A {}; // основной шаблон 132 | 133 | template 134 | class A {}; // T2 --- указатель на T1 135 | 136 | template 137 | class A {}; // T1 --- указатель 138 | 139 | template 140 | class A {}; // T1 = int, T2 --- указатель, I = 5 141 | ``` 142 | 143 | === Контроль подставляемых типов 144 | 145 | ```cpp 146 | template 147 | void swap(T& a, T& b) noexcept { 148 | static_assert(std::is_copy_constructable_v, "Swap requires copying"); 149 | static_assert( 150 | std::is_nothrow_copy_constructable_v && 151 | std::is_nothrow_copy_assinable_v, 152 | "Swap requires copying" 153 | ); 154 | 155 | auto c = b; 156 | b = a; 157 | a = c; 158 | } 159 | ``` 160 | 161 | === Предикаты времени компиляции 162 | 163 | ```cpp 164 | #include 165 | ``` 166 | 167 | *TODO*: ... 168 | 169 | === Концепты 170 | 171 | #def[ 172 | #defitem[Концепт] --- семейство типов, обладающих определенными свойствами 173 | ("утинная типизация") 174 | ] 175 | 176 | ```cpp 177 | template 178 | concept C1 = sizeof(T) != sizeof(int); 179 | 180 | template 181 | struct S1 {...}; 182 | ``` 183 | 184 | === Требования 185 | 186 | ```cpp 187 | #include 188 | 189 | template 190 | requires std::is_copy_constructible_v 191 | T get_copy(T* pointer) { 192 | if (!pointer) { 193 | throw std::runtime_error{"Null-pointer dereference"}; 194 | } 195 | return *pointer; 196 | } 197 | ``` 198 | -------------------------------------------------------------------------------- /prob/lectures/2024-09-20.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Независимость в совокупности 4 | 5 | #def[ 6 | События $A_1, ..., A_n$ #defitem[независимы в совокупности], если 7 | $ forall 1 <= i_1 < i_2 < ... < i_k <= n: P(A_1 A_2 ...) = P(A_(i_1)) P(A_(i_2)) ... $ 8 | ] 9 | 10 | - Независимы в совокупности $->$ независимы попарно 11 | - Независимы все подмножества $->$ независимы совокупно 12 | 13 | #blk(title: [Пример])[ 14 | Дан тетраэдр. Четыре стороны покрашены в красный, синий, зеленая и все три 15 | цвета соответственно. 16 | 17 | $A_1$ --- выпала грань с *красным* цветом 18 | 19 | $A_2$ --- выпала грань с *синим* цветом 20 | 21 | $A_3$ --- выпала грань с *зеленым* цветом 22 | 23 | $ P(A_1) = P(A_2) = P(A_3) = 2/4 = 1/2 $ 24 | 25 | $ P(A_1 A_2) = P(A_1 A_3) = P(A_2 A_3) = 1/4 $ 26 | 27 | $ P(A_1 A_2 A_3) = 1/4 eq.not P(A_1) P(A_2) P(A_3) $ 28 | ] 29 | 30 | = Теорема умножения вероятностей 31 | 32 | Пусть $P(A_1 A_2 ... A_n) > 0$, $ P(overbrace(A_1 ... A_n, A)) 33 | = P(A_1) P(A_2 | A_1) P(A_3 | A_1 A_2) ... P(A_n | A_1 ... A_(n-1)) $ 34 | 35 | #proof[ 36 | Пусть: 37 | $ 38 | B_(n-1) = A_1 ... A_(n-1) \ 39 | B_(n-2) = A_1 ... A_(n-2) \ 40 | dots.v \ 41 | B_1 = A_1 42 | $ 43 | 44 | Тогда 45 | $ A = B_(n-1) A_n $ 46 | $ 47 | P(A) &= P(B_(n-1) A_n) =\ 48 | &= P(overbrace(B_(n-1), B_(n-2) A_(n-1))) P(A_n | B_(n-1)) =\ 49 | &= P(A_n | A_1 ... A_(n-1))P(B_(n-2))P(A_(n-2) | B_(n-2)) = ... 50 | $ 51 | ] 52 | 53 | #blk(title: [Пример])[ 54 | Перестановки: МАТАН 55 | 56 | $ P("'М'" "'А'" "'Т'" "'А'" "'Н'") =\ 57 | = P("'М'") 58 | P("'А'" | "'М'" ) 59 | P("'Т'" | "'М'" "'А'") 60 | P ("'А'" | "'М'" "'А'" "'Т'") 61 | P("'Н'" | "'М'" "'А'" "'Т'" "'А'") =\ 62 | = 1/5 dot 2/4 dot 1/3 dot 1/2 dot 1 $ 63 | ] 64 | 65 | = Биномиальная схема испытаний Бернулли 66 | 67 | Схема испытаний, которая удовлетворяет условиям: 68 | - Исход двоичен. Происходит $A$ (успех) или $overline(A)$ (неудача) 69 | - Всех испытания независимы в совокупности 70 | - $p = P(A)$ не изменяется от опыта к опыту 71 | 72 | $k$ успехов из $n$ испытаний: 73 | $ P_n (k) = C_n^k p^k (1 - p)^(n - k) = C_n^k p^k q^(n-k) $ 74 | 75 | #proof[ 76 | Если все успехи в начале: 77 | $ P(underbrace("УУ...У", k)"НН...Н") = p^k q^(n-k) $ 78 | 79 | Учтем перестановки. Выберем, где места будут успехи ($C_n^k$ способов): 80 | $ P_n (k) = C_n^k p^k q^(n-k) $ 81 | ] 82 | 83 | $ P(k_1 <= k <= k_2) = sum^(k_2)_(i = k_1) C_n^i p^i q^(n-i) $ 84 | 85 | $ 1 = sum^n_(k=0) P_n(k) = sum^n_(k=0) C_n^i p^i q^(n-i) = (p + q)^n = 1^n = 1 $ 86 | 87 | == Наиболее вероятное число успехов 88 | 89 | По определению: 90 | $ k_0 = "argmax"_(1 <= i <= n) C_n^i p^i q^(n-i) $ 91 | 92 | По удобному: 93 | $ k_0 = cases( 94 | [(n + 1)p] &" если " (n + 1)p in.not ZZ, 95 | (n + 1)p " и " (n + 1)p - 1 &" если " (n + 1)p in ZZ, 96 | ) $ 97 | 98 | = Формула полной вероятности 99 | 100 | #def[ 101 | Пусть $H_1, ..., H_n in Omega$. Если 102 | + $forall i eq.not j: H_i dot H_j = emptyset$ 103 | + $H_1 + ... + H_n = Omega$ 104 | то $H_1, ..., H_n$ #defitem[полная группа событий (гипотезы)] 105 | ] 106 | 107 | #figure( 108 | caption: [Полная группа событий (гипотезы)], 109 | image("./hypotises.svg", height: 5cm) 110 | ) 111 | 112 | Пусть $A subset Omega, H_1, ... H_n$ --- полная группа событий 113 | 114 | $ P(A) &= P(A dot Omega) = P(A dot (H_1 + ... + H_n)) =\ &= P(A H_1 + ... + A H_n) 115 | overbrace(=, "т.к несовместны") P(H_1) P(A | H_1) + ... + P(H_n) P(A | H_n) $ 116 | 117 | #blk(title: "Пример")[ 118 | $N$ --- всего билетов 119 | 120 | $m$ --- билетов студент Сидоров выучил 121 | 122 | $A$ --- Сидорову попался счастливый билет 123 | 124 | Иванов заходит первый. Сидоров заходит второй. 125 | 126 | $H_1$ --- Иванов вытащил счастливый (для Сидорова) 127 | 128 | $H_2$ --- Иванов вытащил *не* счастливый (для Сидорова) 129 | 130 | $ P(H_1) = m / N $ 131 | 132 | $ P(H_2) = (N - m) / N $ 133 | 134 | $ P(A) &= P(H_1) P(A | H_1) + P(H_2) P(A | H_2) =\ 135 | &= m/N dot (m-1)/(N-1) + (N-m)/N dot m/(N-1) $ 136 | ] 137 | 138 | Для гипотез: 139 | - Априорные вероятности --- знаем ещё до опыта: 140 | $ P(H_1), ..., P(H_n) $ 141 | - Апостериорные вероятности --- вероятности гипотез после эксперимента (когда 142 | знаем, что некоторое событие уже произошло): 143 | $ P(H_1 | A), ..., P(H_n | A) $ 144 | -------------------------------------------------------------------------------- /os/lectures/2024-12-16.typ: -------------------------------------------------------------------------------- 1 | = Сети и сетевые ОС 2 | 3 | == Одноуровневая адресация 4 | 5 | - Пользователь запрашивает свою ОС о возможности использовать адрес 6 | - ОС спрашивает все другие ОС о возможности присвоения адреса 7 | - После сбора всех ответов ОС принимает решение 8 | - ОС извещает процесс о принятом решении 9 | 10 | Используется в небольших сетях, ибо в больших очень сильно тормозит. 11 | 12 | == Двухуровневая адресация 13 | 14 | Каждый узел получает имя (удаленный адрес). Внутри узла каждый процесс тоже 15 | получает имя (локальный адрес). Полный адрес = удаленный адрес + локальный 16 | адрес. 17 | 18 | Возникают проблемы: 19 | - уникальности адресов 20 | - разрешения адресов: человеку понятнее символьные адреса, машине --- цифровые 21 | 22 | Есть несколько крайних подходов. На самом деле используется что-то среднее. 23 | 24 | === Централизованный подход 25 | 26 | Есть выделенный сервер, на котором в специальном файле хранится соответствие 27 | между символьными и числовыми адресами 28 | 29 | Файл с изменениями время от времени рассылается всем 30 | 31 | Используется в малых сетях 32 | 33 | === Распределенный подход 34 | 35 | На примере DNS 36 | 37 | Используем идею, как я файловой системе: построим иерархию 38 | 39 | Всё разбивается на ранги: от 0 до 3-4 40 | 41 | В каждом ранге назначаем "главного" -- сервер 42 | 43 | Каждому серверу назначается некоторое множество числовых адресов, которые он 44 | распределяет 45 | 46 | В каждом ранге есть сервер DNS 47 | 48 | Это решает обе проблемы для удаленных адресов 49 | 50 | === Как строить локальные адреса? 51 | 52 | PID не подходит в качестве локального адреса, так как соответствует процессу, а 53 | не приложению 54 | 55 | Создается отдельное пространство *сетевых портов* 56 | 57 | За приложением закрепляется некоторый порт 58 | 59 | Для разных протоколов разное сетевое пространство 60 | 61 | Полный адрес получил название socket 62 | 63 | == Маршрутизация 64 | 65 | Как выбирается маршрут от отправителя до получателя 66 | 67 | === Маршрутизация от источника передачи данных 68 | 69 | В пакет вписывается весь путь -- полная последовательность узлов 70 | 71 | Требует знания топологии сети от программиста 72 | 73 | Пересылка очень быстрая 74 | 75 | === Одношаговая маршрутизация 76 | 77 | Пакет знает только адреса отправителя и получателя 78 | 79 | Программист не думает о топологии сети 80 | 81 | Даже при изменении топологии сети всё работает 82 | 83 | Требует особые алгоритмы маршрутизации 84 | 85 | Виды алгоритмов маршрутизации: 86 | - Фиксированной маршрутизации 87 | 88 | В каждом узле есть таблица маршрутов 89 | 90 | Быстро работает 91 | 92 | Нужно настраивать вручную 93 | 94 | - Простая маршрутизация 95 | 96 | - Лавинная 97 | 98 | Полученный пакет рассылается по всем линиям связи, кроме той, откуда 99 | пришел 100 | 101 | Очень нагружается трафик 102 | 103 | - Случайная 104 | 105 | Полученный пакет рассылается по случайной линии связи, кроме той, откуда 106 | пришел 107 | 108 | Пакет доходит за неопределенное время 109 | 110 | - По прецедентам 111 | 112 | Строим табличку: `адрес назначения -> адрес линии связи` 113 | 114 | Если записи в табличке нет, то используем один из прошлых подходов 115 | 116 | Если запись есть, то отправляем, куда надо 117 | 118 | - Динамическая маршрутизация 119 | 120 | - Векторно-дистанционные 121 | 122 | Хранится таблица маршрутов + расстояние по каждому маршруту 123 | 124 | Время от времени маршрутизаторы переправляют друг другу таблицы, чтобы 125 | обновлять информацию. Это происходит часто: раз в секунду или чаще 126 | 127 | Дополнительно вводится время жизни записи. Если оно истекло, то запись 128 | удаляется. 129 | 130 | - Алгоритмы состояния связей 131 | 132 | Каждый маршрутизатор должен: 133 | + Обнаруживать адреса соседей и узнавать их 134 | + Задавать вес связи каждого из соседей 135 | + Создавать пакет с собранной информацией 136 | + Пересылать пакеты других маршрутизаторов 137 | + Коллективно решать задачу оптимизации 138 | 139 | == Интерфейсы 140 | 141 | Модели передачи данных 142 | - Потоковая 143 | - Сообщений 144 | 145 | На локальном компьютере проще реализовать потоковую модель, в сети --- модель 146 | сообщений. 147 | 148 | Модели передачи данных 149 | - datagramm -- connection-less 150 | 151 | Разные пакеты могут идти по разным маршрутам. Порядок получения пакетов не 152 | установлен 153 | 154 | - connection-oriented 155 | 156 | Все пакеты идут по одному заранее установленному маршруту, приходят в том же 157 | порядке 158 | -------------------------------------------------------------------------------- /prob/lectures/2024-10-18.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | #blk[ 4 | Пусть есть генератор случайно величины $xi ~ R(0; 1)$. 5 | 6 | Хотим получить случайную величину $eta ~ F_eta (y)$ 7 | 8 | $ eta = F_eta^(-1) (xi) $ 9 | 10 | Обратная функция всегда существует т.к. $F$ возрастает 11 | ] 12 | 13 | === Экспоненциальное (показательное) распределение 14 | 15 | $ xi ~ E(lambda), lambda > 0 $ 16 | 17 | $ f(x) = cases( 18 | lambda e^(-lambda x) "," & x >= 0, 19 | 0 "," & x < 0 20 | ) $ 21 | 22 | $ E xi = integral_0^oo x lambda e^(-lambda x) d x 23 | = { "по частям" } =\ 24 | = underbrace(-e(-lambda x) |_0^oo, 0) 25 | + 1/lambda underbrace(integral_0^(+oo) lambda e^(-lambda x) d x, = 1 "(из усл. нормировки)") 26 | = 1/lambda $ 27 | 28 | $ D xi = E xi^2 - 1/lambda^2 29 | = integral_0^oo x^2 lambda e^(-lambda x) d x - 1/lambda^2 30 | = ... = 2/lambda^2 - 1/lambda^2 = 1/lambda^2 $ 31 | 32 | $ F(x) = cases( 33 | 0 "," & x <= 0, 34 | integral_0^x lambda e^(-lambda x) d t 35 | = -e^(-lambda t) |_0^x= 1 - e^(-lambda x) "," & x >= 0 36 | ) $ 37 | 38 | #blk(title: [Характеристическое свойство экспоненциального распределения])[ 39 | Пусть: 40 | $ xi ~ E(lambda) $ 41 | Тогда: 42 | $ forall t > 0 forall tau > 0: P(xi > t + tau | xi > t) = P(xi > tau) $ 43 | 44 | #proof[ 45 | $ P(xi > t + tau | xi > t) = P(xi > t + tau) / P(xi > t) 46 | = (1 - F(t + tau)) / (1 - F(t)) =\ 47 | = (e^(-lambda (t + tau)))/(e^(-lambda t)) = e^(-lambda tau) 48 | = 1 - F(tau) = P(xi > tau) $ 49 | ] 50 | 51 | Из непрерывных только экспоненциальное обладает этим свойством. 52 | Из дискретных --- только геометрическое. 53 | ] 54 | 55 | Пример применения: теория массового обслуживания (например, обслуживание 56 | клиентов, обработка интернет-запросов) 57 | 58 | === Распределение Гаусса (Нормальное распределение) 59 | 60 | $ xi ~ N(m, sigma^2) $ 61 | 62 | $m$ --- математическое ожидание 63 | 64 | $sigma^2$ --- дисперсия 65 | 66 | $ f(x) = 1/(sqrt(2 pi) sigma) exp(- (x-m)^2 / (2 sigma^2)) $ 67 | 68 | Симметрична относительно прямой $x = m$ 69 | 70 | $ f_max = f(m) = 1/(sqrt(2 pi) sigma) $ 71 | 72 | $ lim_(x -> plus.minus oo) f(x) = 0 $ 73 | 74 | При увеличении $sigma$ график становится шире, но ниже. 75 | 76 | Интеграл от $f(x)$ не берется, $F(x)$ записать нельзя, поэтому используют таблички. 77 | 78 | $ E xi = integral_(-oo)^(+oo) x f(x) d x 79 | = integral_(-oo)^(+oo) x/(sqrt(2 pi) sigma) exp(- (x-m)^2 / (2 sigma^2)) d x 80 | = integral_(-oo)^(+oo) (x - m + m)/(sqrt(2 pi) sigma) exp(- (x-m)^2 / (2 sigma^2)) d x =\ 81 | = integral_(-oo)^(+oo) underbrace((x - m)/(sqrt(2 pi) sigma) exp(- (x-m)^2 / (2 sigma^2)), "нечетная") d x 82 | + m underbrace(integral_(-oo)^oo f(x) d x, = 1) 83 | = m $ 84 | 85 | $ D xi = integral_(-oo)^(+oo) (x - m)^2/(sqrt(1 pi) sigma) exp(- (x-m)^2 / (2 sigma^2)) 86 | = {y = (x - m) / sigma} =\ 87 | = 2 sigma^2 integral_0^(+oo) y^2 / sqrt(2 pi) exp(- y^2/2) d y 88 | = 2 sigma^2 ( 89 | underbrace(y / sqrt(2 pi) exp(- y^2 / 2) |_0^(+oo), = 0) 90 | - underbrace(integral_0^oo f(y) d y, = 1/2) 91 | ) = sigma^2 $ 92 | 93 | === Стандартное распределение Гаусса 94 | 95 | Чтобы использовать таблички, используем *стандартное* гауссовское распределение. 96 | 97 | $ xi ~ N(0; 1) $ 98 | 99 | $ f(x) = 1/sqrt(2 pi) exp(- x^2 / 2) $ 100 | 101 | #figure( 102 | caption: [Купюра с изображением гауссовского распределения], 103 | image("deutsche_mark_gauss.jpg", height: 5cm) 104 | ) 105 | 106 | ==== Уравнение Лапласса 107 | 108 | $ Phi_0 (x) = integral_0^x exp(-t^2/2)/sqrt(2 pi) d t $ 109 | 110 | Очень быстро стремится к нулю (для числа пять почти равна нулю (до 7-ого знака)) 111 | 112 | $ Phi_0 (+oo) = 1/2 $ 113 | $ Phi_0 (-x) = - Phi_0 (x) $ 114 | $ -1/2 <= Phi_0 (x) <= 1/2 $ 115 | 116 | $ Phi(x) := F(x) = Phi_0 (x) + 1/2 $ 117 | 118 | ==== Вероятность попадания в заданный интервал 119 | 120 | Хотим посчитать вероятность попадания $xi$ в интервал $(alpha, beta)$. 121 | 122 | Общий случай: 123 | $ P(alpha < xi < beta) = {y = (x - m)/sigma; d y = 1/sigma d x } 124 | = integral_((alpha - m) / sigma)^((beta - m)/sigma) exp(- y^2 / 2) / sqrt(2 pi) 125 | = Phi_0((beta - m) / sigma) - Phi_0((alpha - m) / sigma) $ 126 | 127 | Если интервал симметричен относительно $m$ 128 | $ P(abs(xi - m) < delta) = Phi_0 (delta / sigma) - Phi_0 (- delta / sigma) 129 | = 2 Phi_0 (delta / sigma) $ 130 | 131 | Правило трех сигм: 132 | $ P(abs(xi - m) < 3 sigma) = 2 Phi_0 ((3 sigma) / sigma) 133 | = 2 Phi_0 (3) approx 0.997 $ 134 | 135 | Т.е. почти все значение лежат в промежутке $(-3 sigma, 3 sigma)$. 136 | -------------------------------------------------------------------------------- /prob/homeworks/to-2024-10-07.typ: -------------------------------------------------------------------------------- 1 | = ДЗ 4 2 | == Задача 64 3 | 4 | $H_i (i = 0, 1, 2)$ --- в первой двойке мячей игранных было $i$ 5 | 6 | $A$ --- во второй двойке мячей игранных было 0. 7 | 8 | $ P(H_0) = 12/20 dot 11/19 = 0.347 $ 9 | $ P(H_1) = 12/20 dot 8/19 + 8/20 dot 12/19 = 0.505 $ 10 | $ P(H_2) = 8/20 dot 7/19 = 0.147 $ 11 | 12 | $ P(A | H_0) = 10/20 dot 9/19 = 0.237 $ 13 | $ P(A | H_1) = 11/20 dot 10/19 = 0.289 $ 14 | $ P(A | H_2) = 12/20 dot 11/19 = 0.347 $ 15 | 16 | $ P(A) = P(A | H_0) P(H_0) + P(A | H_1) P(H_1) + P(A | H_2) P(H_2) = 0.279 $ 17 | 18 | $ P(H_0 | A) = (P(H_0) P(A | H_0))/(P(A)) = 0.295 $ 19 | 20 | == Задача 65 21 | 22 | $H_i (i = 1, 2, 3)$ --- телевизор был из $i$-ой фирмы 23 | 24 | $A$ --- телевизор требует ремонта 25 | 26 | $ P(H_1) = 0.1 $ 27 | $ P(H_2) = 0.3 $ 28 | $ P(H_3) = 0.6 $ 29 | 30 | $ P(A | H_1) = 0.15 $ 31 | $ P(A | H_2) = 0.10 $ 32 | $ P(A | H_3) = 0.07 $ 33 | 34 | $ P(A H_1) = P(A | H_1) P(H_1) = 0.015 $ 35 | $ P(A H_2) = P(A | H_2) P(H_2) = 0.03 $ 36 | $ P(A H_3) = P(A | H_3) P(H_3) = 0.042 $ 37 | 38 | $ P(A) = P(A H_1) + P(A H_2) + P(A H_3) = 0.087 $ 39 | 40 | $ P(H_1 | A) = P(A H_1) / P(A) = 0.172 $ 41 | $ P(H_2 | A) = P(A H_2) / P(A) = 0.345 $ 42 | $ P(H_3 | A) = P(A H_3) / P(A) = 0.483 $ 43 | 44 | $ P(H_1 | A) < P(H_2 | A) < P(H_3 | A) $ 45 | 46 | Ответ. В третью фирму (потом во вторую, потом в третью) 47 | 48 | == Задача 72 49 | 50 | Нас интересуют только детали, имеющие дефект. Далее рассматриваем только их. 51 | 52 | $H_i (i = 1, 2)$ --- деталь проверял $i$-ый контролер 53 | 54 | $A$ --- дефект был обнаружен 55 | 56 | $ P(H_1) = P(H_2) = 1/2 $ 57 | 58 | $ P(A | H_1) = p_1 $ 59 | $ P(A | H_2) = p_2 $ 60 | 61 | $ P(A H_1) = P(A | H_1) P(H_1) = 1/2 p_1 $ 62 | $ P(A H_2) = P(A | H_2) P(H_2) = 1/2 p_2 $ 63 | 64 | $ P(A) = P(A H_1) + P(A H_2) = (p_1 + p_2) / 2 $ 65 | 66 | $ P(H_1 | A) = P(A H_1) / P(A) = p_1 / (p_1 + p_2) $ 67 | $ P(H_2 | A) = P(A H_2) / P(A) = p_2 / (p_1 + p_2) $ 68 | 69 | Ответ. а) $p_1 / (p_1 + p_2)$, б) $p_2 / (p_1 + p_2)$ 70 | 71 | == Задача 73 72 | 73 | Нужно, чтобы студент 74 | - либо знал два случайно выбранных билета 75 | $P_1 = 15/20 dot 14/19$ 76 | 77 | - либо знал первых билет, не знал второй и знал ещё один случайный 78 | $P_2 = 15/20 dot 5/19 dot 14/18$ 79 | 80 | - либо не знал первых билет, знал второй и знал ещё один случайный 81 | $P_3 = 5/20 dot 15/19 dot 14/18$ 82 | 83 | $ P = P_1 + P_2 + P_3 = 0.8596 $ 84 | 85 | == Задача 77 86 | 87 | Карандаш имеет сломанный грифель, если он из "плохой" коробки. 88 | Таких коробок 4 из 20-ти. 89 | 90 | $ P = 4/20 = 0.2 $ 91 | 92 | == Задача 78 93 | 94 | $H_i (i = 1, 2)$ --- 13-ую страницу писала $i$-ая машинистка 95 | 96 | $A$ --- на 13-ой странице есть опечатка 97 | 98 | $ P(H_1) = 1/3 $ 99 | $ P(H_2) = 2/3 $ 100 | 101 | $ P(A | H_1) = 0.15 $ 102 | $ P(A | H_2) = 0.1 $ 103 | 104 | $ P(A H_1) = P(H_1) P(A | H_1) = 1/20 $ 105 | $ P(A H_2) = P(H_2) P(A | H_2) = 1/15 $ 106 | 107 | $ P(A) = P(A H_1) + P(A H_2) = 7/60 $ 108 | 109 | $ P(H_1 | A) = P(A H_1) / P(A) = (1/20) / (7/60) = 3/7 $ 110 | $ P(H_2 | A) = P(A H_2) / P(A) = (1/15) / (7/60) = 4/7 $ 111 | 112 | Ответ. $P(H_1 | A) = 3/7$ 113 | 114 | == Задача 79 115 | 116 | $H_i (i = 1,2,3)$ --- пассажир пошел в $i$-ую кассу 117 | 118 | $A$ --- в кассе *остались* билеты 119 | 120 | $ P(H_1) = 1/3 $ 121 | $ P(H_2) = 1/6 $ 122 | $ P(H_3) = 1/2 $ 123 | 124 | $ P(A | H_1) = 1 - 3/4 = 1/4 $ 125 | $ P(A | H_2) = 1 - 1/2 = 1/2 $ 126 | $ P(A | H_3) = 1 - 2/3 = 1/3 $ 127 | 128 | $ P(A H_1) = P(H_1) P(A | H_1) = 1/12 $ 129 | $ P(A H_2) = P(H_2) P(A | H_2) = 1/12 $ 130 | $ P(A H_3) = P(H_3) P(A | H_3) = 1/6 $ 131 | 132 | $ P(A) = P(A H_1) + P(A H_2) + P(A H_3) = 1/3 $ 133 | 134 | $ P(H_1 | A) = P(A H_1) / P(A) = 1/4 $ 135 | 136 | Ответ. $P(H_1 | A) = 1/4$ 137 | 138 | == Задача 80 139 | 140 | $H_1$ --- студент подготовлен *отлично* (знает $20/20$ вопросов) 141 | $H_2$ --- студент подготовлен *хорошо* (знает $16/20$ вопросов) 142 | $H_3$ --- студент подготовлен *удовлетворительно* (знает $10/20$ вопросов) 143 | $H_4$ --- студент подготовлен *плохо* (знает $5/20$ вопросов) 144 | 145 | $A$ --- студент ответил на все три вопроса 146 | 147 | $ P(H_1) = 3/10 $ 148 | $ P(H_2) = 4/10 $ 149 | $ P(H_3) = 2/10 $ 150 | $ P(H_4) = 1/10 $ 151 | 152 | $ P(A | H_1) = 1 $ 153 | $ P(A | H_2) = 16/20 dot 15/19 dot 14/18 = 28/57 $ 154 | $ P(A | H_3) = 10/20 dot 9/19 dot 8/18 = 2/19 $ 155 | $ P(A | H_4) = 5/20 dot 4/19 dot 3/18 = 1/114 $ 156 | 157 | $ P(A H_1) = P(H_1) P(A | H_1) = 3/10 $ 158 | $ P(A H_2) = P(H_2) P(A | H_2) = 56/285 $ 159 | $ P(A H_3) = P(H_3) P(A | H_3) = 2/95 $ 160 | $ P(A H_4) = P(H_4) P(A | H_4) = 1/1140 $ 161 | 162 | $ P(A) = P(A H_1) + P(A H_2) + P(A H_3) + P(A H_4) = 197/380 $ 163 | 164 | $ P(H_1 | A) = P(A H_1) / P(A) = 114/197 = 0.57868 $ 165 | $ P(H_4 | A) = P(A H_4) / P(A) = 1/591 = 0.00169 $ 166 | 167 | Ответ. а) $P(H_1 | A) = 0.57868$ б) $P(H_4 | A) = 0.00169$ 168 | -------------------------------------------------------------------------------- /prob/lectures/2024-11-01.typ: -------------------------------------------------------------------------------- 1 | #import "/utils/math.typ": * 2 | 3 | = Неравенства Чебышева 4 | 5 | Пусть 6 | $ E abs(xi)^r < oo, $ 7 | Тогда 8 | $ forall epsilon > 0: P(abs(xi) >= epsilon) <= (E abs(xi)^r) / (epsilon^r). $ 9 | 10 | Часто дает очень грубую оценку 11 | 12 | #proof[ 13 | $ E abs(r) = integral_(-oo)^(+oo) abs(x)^2 f(x) d x 14 | >= integral_(abs(x) >= epsilon) abs(x)^2 f(x) d x 15 | >= epsilon^r integral_(abs(x) >= epsilon) f(x) d x 16 | = epsilon^r P(abs(xi) >= epsilon) 17 | $ 18 | ] 19 | 20 | == Частные случаи 21 | 22 | - Неравенство Маркова: $r = 1$ и $P(xi >= 0) = 1$ 23 | 24 | $ P(xi >= epsilon) <= (E (xi)) / epsilon $ 25 | 26 | - $r = 2$: 27 | 28 | $ P(abs(xi) >= epsilon) <= (E xi^2) / (epsilon^2) $ 29 | 30 | - $r = 2$ и $eta = epsilon - E epsilon$: 31 | 32 | $ P(abs(xi - E xi) >= epsilon) <= D / (epsilon^2) $ 33 | 34 | == Пример 35 | 36 | $xi$ --- расход электроэнергии 37 | $E xi = 4000 "Кв"/"ч"$ 38 | 39 | Оценить, что в какой-то день $P(xi >= 10000)$ 40 | 41 | $ r = 1 $ 42 | $ P(xi >= 0) = 1 $ 43 | 44 | $ P(xi >= 10 000) = 4000 / 10000 = 0.4$ 45 | 46 | = Случайные векторы 47 | 48 | #def[ 49 | Вектор $xi = (xi_1, ..., xi_n)$, где $xi_1, ..., xi_n$ --- случайные 50 | величины, называется #defitem[случайным вектором]. 51 | ] 52 | 53 | Случайные вектора нужны, так как случайные величины обычно полезно рассматривать 54 | в совокупности. 55 | 56 | #def[ 57 | #defitem[Функцией распределения случайного вектора] $xi = (xi_1, ..., 58 | xi_n)$ называется функция 59 | $ F_xi (x_1, ..., x_n) := P(xi_1 < x_1 and ... and xi_n <= x_n) $ 60 | ] 61 | 62 | Пусть $n = 2:$ 63 | $F_xi (x y) = P(xi_1 <= x, xi_2 <= y)$ 64 | 65 | == Свойства функции распределения 66 | 67 | На примере $n = 2$ 68 | 69 | + $forall (x, y) in RR^2: 0 <= F(x, y) <= 1$ 70 | + $F(-oo, -oo) = F(-oo, y) = F(x, -oo) = 0$ 71 | + $F(+oo, +oo) = 1$ 72 | + $F_xi (+oo, y) = F_(xi_2) (y)$\ 73 | $F_xi (x, +oo) = F_(xi_1) (x)$ 74 | + $P(a_1 <= xi_1 <= a_2, b_1 <= xi_2 <= b_2) 75 | = F(a_2, b_2) - F(a_1, b_2) - F(a_2, b_1) + F(a_1, b_1)$ 76 | + $F(x, y)$ монотонно не убывает по каждому аргументу 77 | 78 | #proof[ 79 | $ F(x + Delta x, y) = P(xi_1 <= x + Delta x, xi_2 <= y) 80 | = underbrace(P(xi_1 <= x, xi_2 <= y), =F(x, y)) 81 | + underbrace(P(x <= xi_1 <= x + Delta x, xi_2 <= y), >= 0) $ 82 | ] 83 | 84 | #def[ 85 | #defitem[Частное/ маргинальное распределение] --- распределение одной 86 | из компонент вектора 87 | ] 88 | 89 | #def[ 90 | Компоненты $xi_1, xi_2$ случайного вектора $xi = (xi_1, x_2)$ называются 91 | #defitem[независимыми], если $F_xi (x, y) = F_(xi_1) (x) dot F_(xi_2) (y)$ 92 | ] 93 | 94 | = Дискретные случайные векторы 95 | 96 | #def[ 97 | Случайный вектор $xi = (xi_1, xi_2)$ называется #defitem[дискретным], если 98 | $xi_1$ и $xi_2$ --- дискретные случайные величины. 99 | ] 100 | 101 | #blk(title: [Табличный способ задания])[ 102 | #figure(table( 103 | columns: 4, 104 | align: center, 105 | $$, $y_1$, $...$, $y_k$, 106 | $x_1$, $p_(1 1)$, $...$, $p_(1 k)$, 107 | $dots.v$, $dots.v$, $dots.down$,$dots.v$, 108 | $x_n$, $p_(m 1)$, $...$, $p_(m k)$ 109 | )) 110 | 111 | $ P_(i j) = P(xi_1 = x_i, xi_2 = y_j) $ 112 | ] 113 | 114 | $ P_(i dot) := sum_(j = 1)^k p_(i j) $ 115 | 116 | $ P(xi_1 = x_1) = p_(1 dot) $ 117 | $ P(xi_2 = y_1) = p_(dot 1) $ 118 | 119 | #def[ 120 | Компоненты $xi_1, xi_2$ дискретного вектора $xi = (xi_1, xi_2)$ 121 | #defitem[независимы], если 122 | $forall i, j: P_(i j) = p_(i dot) p_(dot j)$ 123 | ] 124 | 125 | = Непрерывные случайные векторы 126 | 127 | == Плотность распределения 128 | 129 | #def[ 130 | Неотрицательная кусочно непрерывная функция $f_xi (x, y)$, такая что 131 | $ F_xi (x, y) = integral_(-oo)^x integral_(-oo)^y f(t_1, t_2) d t_2 d t_1 $ 132 | называется #defitem[плотностью распределения] $xi = (xi_1, xi_2)$. 133 | ] 134 | 135 | В точках, где $F_xi (x, y)$ дифференцируема: 136 | $ f(x, y) = (diff^2 F(x, y)) / (diff x diff y) $ 137 | 138 | === Свойства плотности распределения 139 | 140 | - $forall x, y: f(x, y) >= 0$ 141 | - $integral_(-oo)^(+oo) integral_(-oo)^(+oo) f(x, y) d x d y = F(+oo, +oo) = 1$ 142 | - $integral_(a_1)^(a_2) integral_(b_1)^(b_2) f(x, y) d x d y 143 | = F(a_2, b_2) - F(a_2, b_1) - (F(a_1, b_2) - F(a_1, b_1)) 144 | = P(a_1 <= xi_1 <= a_2, b_1 <= xi_2 <= b_2) $ 145 | - $P(xi in D) = integral.double_D f(x, y) d x d y$ 146 | - $ F_(xi_1) (x) = F_xi (x, +oo) 147 | = integral_(-oo)^x integral_(-oo)^(+oo) f(t_1, t_2) d t_2 d t_1 $ 148 | 149 | $ f_(xi_1) (x) = d/(d x) F_(xi_1) (x) 150 | = d/(d x) integral_(-oo)^x integral_(-oo)^(+oo) f(t_1, t_2) d t_2 d t_1 151 | = integral_(-oo)^(+oo) f(x, t_2) d t_2 = integral_(-oo)^(+oo) f(x, y) d y $ 152 | -------------------------------------------------------------------------------- /cpp/lectures/2024-11-01.typ: -------------------------------------------------------------------------------- 1 | == Async: Асинхронные вызовы 2 | 3 | ```cpp 4 | int f() { 5 | return 42; 6 | } 7 | 8 | int main() { 9 | std::future res = std::async(f); // Запуск 10 | res.wait(); // Блокирующий вызов. Просто ждет 11 | int value = res.get(); // get вызывает wait 12 | } 13 | ``` 14 | 15 | === promise и future 16 | 17 | - promise --- неготовое значение со стороны поставщика; есть 18 | `set_value()`#footnote[`set_value()` можно делать только один раз] 19 | - future --- неготовое значение со стороны получателя 20 | 21 | == Проблема совместного доступа 22 | 23 | - Чтение в нескольких потоках безопасно 24 | - Плохо, когда 25 | - один читает другой пишет 26 | - несколько пишут 27 | 28 | === Методы решения 29 | 30 | - Блокировки 31 | - lock-free 32 | - Трансляционная память (особо нигде не поддерживается) 33 | 34 | == Mutex 35 | 36 | "Mutex блокирует инвариант": пока mutex lock-нут, инвариант может нарушаться, 37 | иначе --- нет 38 | 39 | ```cpp 40 | std::mutex m; 41 | std::list the_list; 42 | 43 | void safe_append(int v) { 44 | std::lock_guard lock(m); 45 | the_list.push_back(v); 46 | } 47 | 48 | void process_list() { 49 | std::lock_guard lock(m); // Полная форма 50 | // *Что-то делаем* 51 | } 52 | ``` 53 | 54 | === Mutex --- не панацея 55 | 56 | ```cpp 57 | template 58 | class stack { 59 | void push(const T& v); // Защищена mutex-ом 60 | void empty() const; // Защищена mutex-ом 61 | const T& top() const; // Защищена mutex-ом 62 | void pop(); // Защищена mutex-ом 63 | }; 64 | 65 | stack s; 66 | if (!s.empty()) { 67 | // Ошибка, если в этом месте другой thread сделал s.pop() 68 | int v = s.top(); 69 | s.pop(); 70 | } 71 | ``` 72 | 73 | Плохое решение --- сказать пользователю завернуть if в mutex 74 | 75 | Хорошее решение --- по-умному изменить интерфейс, добавить "большие" операции: 76 | ```cpp 77 | template 78 | class safe_stack { 79 | private: 80 | stack s_; 81 | mutable std::mutex m_; 82 | 83 | public: 84 | std::shared_ptr pop() { 85 | std::lock_guard lock(m_); 86 | if (s_.empty()) throw stack_exception(); 87 | std::shared_ptr res(std::make_shared(s_.top())); 88 | s_.pop(); 89 | return res; 90 | } 91 | 92 | bool empty() const { 93 | std::lock_guard lk(m_); 94 | return s_.empty(); 95 | } 96 | } 97 | ``` 98 | 99 | === Сколько ставить Mutex-ов 100 | 101 | - Один на программу --- слишком мало 102 | - Один на структуру --- см. прошлый пример 103 | - На каждый элемент 104 | 105 | Меньше область блокирования --- выше параллелизм, но сложнее программа 106 | 107 | === `std::shared_mutex` --- блокировки чтения и записи 108 | 109 | - `lock` / `try_lock` --- эксклюзивная блокировка (только один поток) 110 | - `lock_shared` / `try_lock_shared` --- разделяемая блокировка (несколько 111 | потоков могут удерживать блокировку) 112 | 113 | Эксклюзивная блокировка --- изменение объекта, разделяемые --- для чтения. 114 | 115 | === `std::scoped_lock` 116 | 117 | Решает проблему взаимных блокировок 118 | 119 | Как `std::lock_guard`, но атомарно блокирует все данные `mutex`-ы 120 | 121 | ```cpp 122 | std::mutex m1, m2; 123 | std::scoped_lock lk(m1, m2); 124 | ``` 125 | 126 | === Проверка корректности 127 | 128 | \*Сюжет про Сети Петри\*: строим модель нашей системы, модель анализируем (на 129 | практике обычно идет сложно). 130 | 131 | Советы: 132 | - Избегать блокировки двух `mutex`-ов 133 | - Не выполнять пользовательский код в момент удержания блокировки 134 | - Ставить несколько блокировок в фиксированном порядке 135 | - Иерархические блокировки 136 | 137 | == Ожидание оповещения 138 | 139 | ```cpp 140 | std::queue tasks; 141 | std::mutex m; 142 | std::condition_variable cond; 143 | 144 | void task_maker() { 145 | while(1) { 146 | auto data = prepare(); 147 | std::scoped_lock lk(m); 148 | tasks.push(data); 149 | } 150 | cond.notify_all(); 151 | } 152 | 153 | void process() { 154 | while(1) { 155 | std::unique_lock lk(m); 156 | cond.wait(lk); 157 | auto data = task.front(); 158 | tasks.pop(); 159 | lk.unlock(); 160 | } 161 | } 162 | ``` 163 | 164 | В `wait` можно передать предикат 165 | ```cpp 166 | cond.wait(lk, []() { return !tasks.empty(); }); 167 | ``` 168 | 169 | == Ожидание с future/ promise 170 | 171 | ```cpp 172 | std::promise p; 173 | std::future f = p.get_future(); 174 | 175 | f.wait(); 176 | int res = f.get(); 177 | 178 | // В другом потоке 179 | p.set_value(42); 180 | ``` 181 | 182 | == Защелки, барьеры, семафоры 183 | 184 | - Барьер --- точка синхронизации, до которой все потоки должны дойти 185 | одновременно. Число потоков известно в момент создания барьера. 186 | 187 | - Защелка --- одноразовый барьер. 188 | -------------------------------------------------------------------------------- /prob/lectures/romeo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | 35 | 37 | 47 | 52 | 53 | 63 | 68 | 69 | 70 | 73 | 77 | 81 | 1 91 | 1 101 | 105 | 109 | 1/4 119 | 1/4 129 | 130 | 131 | -------------------------------------------------------------------------------- /os/lectures/2024-09-16.typ: -------------------------------------------------------------------------------- 1 | Набор (пар) операций: 2 | - одноразовые: 3 | - создание -- завершение 4 | - многоразовые: 5 | - запуск -- приостановка 6 | - блокирование -- разблокирование 7 | - изменение приоритета процесса 8 | 9 | === Process Control Block и контекст процесса 10 | 11 | Process Control Block --- структура (или набор структур) с информацией о 12 | процессе; хранит: 13 | - Регистровый контекст: 14 | - Программный счетчик 15 | - Содержимое регистров 16 | - Системный контекст: 17 | - Состояние процесса 18 | - Данные для планирования использования процессора и управления памятью 19 | - Учетная информация 20 | 21 | PCB хранится в адресном пространстве ОС 22 | 23 | Код и данные в адресном пространстве --- пользовательский контекст 24 | 25 | Контекст процесса --- совокупность всех трех контекстов 26 | 27 | === Одноразовые операции 28 | 29 | Медленные тк: 30 | - Выполняют много действий 31 | - Выделяют/ освобождают ресурсы 32 | - Меняют число процессов 33 | 34 | Первые несколько процессов создаются "хитро" 35 | 36 | Всякий новый процесс рождается от другого процесса $->$ процессы образуют 37 | генеологическое дерево (или лес) 38 | 39 | === Создание процесса 40 | 41 | + Присваивание PID 42 | + Создание PCB с состоянием "рождение" 43 | + Выделение ресурсов. 44 | 45 | Подходы: 46 | + из ресурсов родителя 47 | + из ресурсов ОС (более частый вариант) 48 | 49 | + Занесение кода в адресное пространство и установка программного счетчика. 50 | 51 | Подходы: 52 | + Клонирование родителя (в UNIX) 53 | 54 | Есть системный вызов, который создает клона 55 | 56 | Есть системный вызов, который полностью заменяет пользовательский 57 | контекст 58 | 59 | + Из файла (в Windows) 60 | 61 | + Окончательное заполнение PCB 62 | + Изменение состояния на "готовность" 63 | 64 | === Завершение процесса 65 | 66 | Состояние "закончил исполнение" нужно, чтобы возможно было узнать причину 67 | завершения 68 | 69 | + Изменение состояния на "закончил исполнение" 70 | + Освобождение ресурсов 71 | + Очистка элементов PCB 72 | + Сохранение в PCB информации о причинах завершения 73 | 74 | Процесс выкидывается из системы, когда родитель 75 | - умирает 76 | - интересуется причинами завершение 77 | 78 | Если родитель умер раньше ребенка, `PID=1` усыновляет ребенка 79 | 80 | Zombie-процесс --- процесс в состоянии "закончил исполнение" 81 | 82 | === Запуск процесса 83 | 84 | - Изменение состояние на "исполнение" 85 | - Обеспечение наличия в оперативной памяти необходимой информации 86 | - Восстановление значения регистров 87 | - Передача управления по адресу программного счетчика 88 | 89 | === Приостановка процесса 90 | 91 | - Автоматическое сохранение програмного счетчика и части 92 | регистров (работа hardware) 93 | - Передача управления по специальному адресу (работа hardware) 94 | - Сохранение динамической части 95 | - Обработка прерывания 96 | - Перевод процесса в состояние "Готовность" 97 | 98 | === Блокирование процесса 99 | 100 | - Сохранение контекста процесса в PCB 101 | - Обработка системного вызова 102 | - Перевод процесса в состояние "ожидание" 103 | 104 | === Разблокирование процесса 105 | 106 | - Уточнение, какое событие произошло 107 | - Проверка наличия процесса, ожидавшего события 108 | - Перевод ожидающего процесса в состояние "готовность" 109 | - Обработка произошедшего события 110 | 111 | === Пример цепочки операций 112 | 113 | // TODO: картинка 114 | 115 | = Кооперация процессов 116 | 117 | Кооперативные (взаимодействующие) процессы --- процессы, которые влияют на 118 | поведения друг друга путем обмена информацией 119 | 120 | Основные причины кооперации: 121 | - Повышение скорости решения задач (для многоядерной системы) 122 | - Совместное использование данных 123 | - Модульная конструкция какой-то системы 124 | - Для удобства работы пользователя 125 | 126 | Взаимодействие между процессами происходят через ОС 127 | 128 | == Категории средств взаимодействия 129 | 130 | - Сигнальные: передача бита 131 | - Канальные: логический канал 132 | - Разделяемая память: общее адресное пространство 133 | 134 | == Как устанавливается связь 135 | 136 | - Нужна ли инициация? 137 | - Обычно нужна для канальной и разделяемой памяти и не нужна для сигнальной 138 | 139 | - Способы адресации: 140 | - Прямая 141 | - Симметричная: и отправитель, и получатель указывают ID друг друга 142 | - Асимметричная: только отправитель указывает ID получателя 143 | - Косвенная: есть вспомогательный объект для передачи 144 | 145 | == Информационная валентность процессов и средств связи 146 | 147 | - Сколько процессов может одновременно ассоциировать с конкретным видом связи? 148 | --- "It depends". 149 | 150 | - Сколько идентичных средств связи может быть задействовано между двумя 151 | процессами? --- "It depends". 152 | 153 | - Направленность связи: 154 | - Симплексная связь: односторонняя 155 | - Полудуплексная связь: как в рации 156 | - Дуплексная связь: двусторонняя 157 | --------------------------------------------------------------------------------