Compare commits

...

140 Commits

Author SHA1 Message Date
053e635cda [1] task1 2026-04-29 18:05:19 +03:00
0d86929b62 [0] initial commit 2026-02-26 23:02:00 +03:00
8124ef4551 [1] docs: data structures 2026-02-24 14:04:28 +00:00
8744999b03 Merge pull request '[1] raskatovia' (#99) from raskatovia/2026-rff_mp:raskatovia-2 into develop
Reviewed-on: UNN/2026-rff_mp#99
2026-02-24 12:17:16 +00:00
01f0e5dd88 Merge pull request '[0] initial commit' (#97) from pogodinda/2026-rff_mp:pogodinda into develop
Reviewed-on: UNN/2026-rff_mp#97
2026-02-24 12:16:53 +00:00
Иван
0c990ece48 [1] second submission 2026-02-23 13:49:00 +03:00
Иван
9af52f3f7b [429] initial 2026-02-23 13:38:33 +03:00
Иван
9e70450c50 [1] fix 2026-02-22 21:16:21 +03:00
Иван
a7323e3762 [0] initial commit 2026-02-22 21:07:02 +03:00
7fe5c11997 Обновить .gitignore 2026-02-21 11:45:45 +00:00
969b9ee469 Merge pull request '[0]sobininaas' (#93) from sobininaas/2026-rff_mp:sobininaas into develop
Reviewed-on: UNN/2026-rff_mp#93
2026-02-21 11:45:04 +00:00
0c6a8bd4db Обновить .gitignore 2026-02-21 11:44:54 +00:00
b849e3a7bc Merge branch 'develop' of http://31.128.43.79:3000/UNN/2026-rff_mp into develop 2026-02-21 14:29:21 +03:00
123
2e0eec1543 [0] 2026-02-21 14:28:51 +03:00
17fc44d83e fixed conflict 2026-02-21 14:28:06 +03:00
4b24d66ab7 Удалить 428.md 2026-02-21 11:24:46 +00:00
123
48d37c6f77 [0] initial commit 2026-02-21 14:23:21 +03:00
4a26e7aa89 Merge pull request '[0]shekurovAA' (#94) from shekurovaa/2026-rff_mp:shekurovAA into develop
Reviewed-on: UNN/2026-rff_mp#94
2026-02-21 11:15:41 +00:00
e0eb3ae13a Merge pull request '[0]' (#95) from fomichevks/2026-rff_mp:fomichevks into develop
Reviewed-on: UNN/2026-rff_mp#95
2026-02-21 11:15:29 +00:00
f983a6fa1d [0] 2026-02-21 14:13:16 +03:00
Смирнов Андрей Д
356e4b53dd [0] initial commit 2026-02-21 14:11:17 +03:00
b7cea24df4 Merge pull request '[0] initial commit' (#89) from smirnovad/2026-rff_mp:smirnovad into develop
Reviewed-on: UNN/2026-rff_mp#89
2026-02-21 11:05:41 +00:00
8221562750 Merge pull request '[0] initial commit' (#88) from semyanovra/2026-rff_mp:semyanovra into develop
Reviewed-on: UNN/2026-rff_mp#88
2026-02-21 11:05:32 +00:00
123
789d8ef3bb [0] 2026-02-21 14:04:51 +03:00
Смирнов Андрей Д
6e433a36ae [0] initial commit 2026-02-21 14:04:28 +03:00
123
a50fd0bfc1 [0] 2026-02-21 14:03:15 +03:00
Семьянов Руслан А
de2b98bc01 [0] initial commit 2026-02-21 13:58:46 +03:00
c53b093c38 Merge pull request '[0] initial commit' (#87) from kornevma/2026-rff_mp:kornevma into develop
Reviewed-on: UNN/2026-rff_mp#87
2026-02-21 10:55:06 +00:00
dd3b126d62 Merge pull request '[0] initial commit' (#85) from agapovads/2026-rff_mp:agapovads into develop
Reviewed-on: UNN/2026-rff_mp#85
2026-02-21 10:53:01 +00:00
048b211945 Merge pull request '[0] initial commit' (#84) from nehoroshevaa/2026-rff_mp:nehoroshevaa into develop
Reviewed-on: UNN/2026-rff_mp#84
2026-02-21 10:51:40 +00:00
6d05295507 Merge pull request '[0] initial commit' (#81) from anikinvd/2026-rff_mp:anikinvd into develop
Reviewed-on: UNN/2026-rff_mp#81
2026-02-21 10:50:19 +00:00
55d8ed29c6 Merge pull request '[0] initial commit' (#80) from meosyam/2026-rff_mp:meosyam into develop
Reviewed-on: UNN/2026-rff_mp#80
2026-02-21 10:49:39 +00:00
af2d62a446 Merge pull request '[0] initial commit' (#79) from novikovsd/2026-rff_mp:novikovsd into develop
Reviewed-on: UNN/2026-rff_mp#79
2026-02-21 10:49:22 +00:00
fe5a8bea89 Merge pull request '[0] initial commit' (#77) from duznb/2026-rff_mp:duznb into develop
Reviewed-on: UNN/2026-rff_mp#77
2026-02-21 10:49:12 +00:00
b4b3140603 Merge pull request '[0] initial commit' (#75) from volkovim/2026-rff_mp:volkovim into develop
Reviewed-on: UNN/2026-rff_mp#75
2026-02-21 10:39:17 +00:00
Новиков Семён Д
90503c7b92 [0] initial commit 2026-02-21 13:39:09 +03:00
Аникин Владислав Д
bcde039ddd [0] initial commit 2026-02-21 13:38:46 +03:00
ddc6d9b877 [0] initial commit 2026-02-21 13:36:14 +03:00
e1e08990e0 [0] initial commit 2026-02-21 13:36:01 +03:00
Агапова Дарина С
fe50036baf [0] initial commit 2026-02-21 13:35:45 +03:00
123
8f2e46907f [0] initial commit 2026-02-21 13:35:11 +03:00
Шекуров Алексей А
afa3504609 [0] initial commit 2026-02-21 13:34:52 +03:00
Корнев Макар А
ccb7c7a5da [0] initial commit 2026-02-21 13:32:10 +03:00
Волков Илья М
6ef4820d9e [0] initial commit 2026-02-21 13:21:07 +03:00
c3131ce0f6 Merge pull request '[0] initial commit' (#74) from shahovaa/2026-rff_mp:shahovaa into develop
Reviewed-on: UNN/2026-rff_mp#74
2026-02-21 10:04:35 +00:00
8a523c9afb Merge pull request '[0] initial commit' (#72) from DerbenevRY/2026-rff_mp:DerbenevRY into develop
Reviewed-on: UNN/2026-rff_mp#72
2026-02-21 09:59:00 +00:00
e8ea43f9b3 [0] initial commit 2026-02-21 12:51:56 +03:00
Alex
57c8ef048f Remove .DS_Store and add to gitignore 2026-02-21 12:45:34 +03:00
c774f9182a Merge pull request '[0] initial commit' (#70) from volkovva/2026-rff_mp:VolkovVA into develop
Reviewed-on: UNN/2026-rff_mp#70
2026-02-21 09:42:58 +00:00
194d822b62 [0] initial commit 2026-02-21 11:27:54 +03:00
Alex
589787851b [0] initial commit 2026-02-21 11:09:51 +03:00
b34b2b76c8 Merge pull request '[0] initial commit' (#56) from soldatkinao/2026-rff_mp:soldatkinao into develop
Reviewed-on: UNN/2026-rff_mp#56
2026-02-21 05:38:35 +00:00
46f73eaa47 Merge pull request '[0] initial commit' (#57) from konnovaea/2026-rff_mp:konnovaea into develop
Reviewed-on: UNN/2026-rff_mp#57
2026-02-21 05:38:16 +00:00
5eab591f1a Merge pull request '[0] initial commit' (#58) from chizhikovasm/2026-rff_mp:chizhikovaSM into develop
Reviewed-on: UNN/2026-rff_mp#58
2026-02-21 05:38:07 +00:00
768a06fbb6 Merge pull request '[0] initial commit' (#59) from krasnovia/2026-rff_mp:krasnovia into develop
Reviewed-on: UNN/2026-rff_mp#59
2026-02-21 05:37:59 +00:00
141bb2bbb5 Merge pull request '[0] initial commit' (#60) from zaharoves/2026-rff_mp:zaharoves into develop
Reviewed-on: UNN/2026-rff_mp#60
2026-02-21 05:37:50 +00:00
f7b4f75488 Merge pull request '[0] initial commit' (#61) from zverevem/2026-rff_mp:zverevem into develop
Reviewed-on: UNN/2026-rff_mp#61
2026-02-21 05:37:42 +00:00
802b72d10b Merge pull request '[0] initial commit' (#62) from shalovsa/2026-rff_mp:shalovsa into develop
Reviewed-on: UNN/2026-rff_mp#62
2026-02-21 05:37:33 +00:00
0cd1012949 Merge pull request '[0] initial commit' (#63) from zelentsovav/2026-rff_mp:ZelentsovAV into develop
Reviewed-on: UNN/2026-rff_mp#63
2026-02-21 05:37:24 +00:00
6b2f019b11 Merge pull request '[0] initial commit' (#64) from yanyaevaa/2026-rff_mp:YanyaevAA into develop
Reviewed-on: UNN/2026-rff_mp#64
2026-02-21 05:37:16 +00:00
5964cc81ab Merge pull request '[0] initial commit' (#65) from musinaa/2026-rff_mp:MusinAA into develop
Reviewed-on: UNN/2026-rff_mp#65
2026-02-21 05:37:08 +00:00
9f395a7b9a Merge pull request '[0] initial commit' (#66) from Andrey/2026-rff_mp:YaroslavtsevAS into develop
Reviewed-on: UNN/2026-rff_mp#66
2026-02-21 05:36:48 +00:00
362b487266 Merge branch 'develop' into YaroslavtsevAS 2026-02-21 05:36:41 +00:00
8a4eb2ab7b Merge pull request '[0] initial commit' (#67) from solovevds/2026-rff_mp:SolovevDS into develop
Reviewed-on: UNN/2026-rff_mp#67
2026-02-21 05:36:32 +00:00
cc5764f86a Merge pull request '[0] initial commit' (#68) from stepinim/2026-rff_mp:stepinim into develop
Reviewed-on: UNN/2026-rff_mp#68
2026-02-21 05:36:02 +00:00
c276d52949 Merge pull request '[0] initial commit' (#69) from MashinDD/2026-rff_mp:MashinDD into develop
Reviewed-on: UNN/2026-rff_mp#69
2026-02-21 05:35:47 +00:00
a40c5f579a [0] initial commit 2026-02-20 23:36:56 +03:00
2ea1b50bc7 [0] initial commit 2026-02-20 22:50:08 +03:00
d5450e0063 [0] initial commit 2026-02-20 22:32:31 +03:00
b35fa6725b [0] initial commit 2026-02-20 21:28:01 +03:00
de62717491 [0] initial commit 2026-02-20 19:59:41 +03:00
902ad5ef53 [0] initial commit 2026-02-20 19:58:35 +03:00
oSTEVEo
343a06519a [0] initial commit 2026-02-20 19:58:28 +03:00
a2621ad508 [0] initial commit 2026-02-20 18:37:49 +03:00
95f3cd28df [0] initial commit' 2026-02-20 18:25:52 +03:00
57adafbebd [0] initial commit 2026-02-20 18:23:20 +03:00
shalovsa
b881e05410 [0] initial commit 2026-02-20 18:22:42 +03:00
d33fd62603 [0] initial commit 2026-02-20 16:55:58 +03:00
e5733fd15d [0] initial commit 2026-02-19 16:52:52 +03:00
8dff4985b9 [0] initial commit 2026-02-19 12:46:18 +03:00
0f92398229 Merge pull request '[0] initial commit' (#54) from nikolaevda/2026-rff_mp:nikolaevda into develop
Reviewed-on: UNN/2026-rff_mp#54
2026-02-16 20:42:11 +00:00
8c3a030957 Merge pull request '[0] initial commit' (#53) from varavinvv/2026-rff_mp:varavinvv into develop
Reviewed-on: UNN/2026-rff_mp#53
2026-02-16 20:42:01 +00:00
6c0751dc68 [0] initial commiy 2026-02-14 18:22:17 +03:00
5f779a102c [0] initial commit 2026-02-14 15:52:46 +03:00
ad692ac5b8 Merge pull request '[0]' (#52) from tseremonnikovaaa/2026-rff_mp:tseremonnikovaaa into develop
Reviewed-on: UNN/2026-rff_mp#52
2026-02-14 11:45:55 +00:00
b4daf9ea72 [0] 2026-02-14 14:44:01 +03:00
71cb098a69 Merge pull request '[0] initial commit' (#50) from KuznetsovAS/2026-rff_mp:KuznetsovAS into develop
Reviewed-on: UNN/2026-rff_mp#50
2026-02-14 11:32:30 +00:00
c46e1aa8e2 Merge pull request '[0] initial commit' (#47) from Mininavd/2026-rff_mp:MininaVD into develop
Reviewed-on: UNN/2026-rff_mp#47
2026-02-14 11:18:05 +00:00
595a3518d9 Merge pull request '[0] initial commit' (#46) from ivanchenkoam/2026-rff_mp:ivanchenkoam into develop
Reviewed-on: UNN/2026-rff_mp#46
2026-02-14 11:17:41 +00:00
Кузнецов Александр С
b98c87e4d5 [0] initial commit 2026-02-14 14:11:12 +03:00
Veronika Minina
41ad3771e8 [0] initial commit 2026-02-14 14:08:50 +03:00
Иванченко Антон М
de77a1109d [0] initial commit 2026-02-14 14:06:38 +03:00
a0653117cd Merge pull request '[0] первый' (#45) from ProninVV/2026-rff_mp:ProninVV into develop
Reviewed-on: UNN/2026-rff_mp#45
2026-02-14 11:01:33 +00:00
4428a8e88d Merge pull request '[0] initial commit' (#42) from filippovavm/2026-rff_mp:FilippovaVM into develop
Reviewed-on: UNN/2026-rff_mp#42
2026-02-14 10:50:34 +00:00
41ce5b60cf [0] initial commit 2026-02-14 13:57:35 +03:00
195de5c70f Merge pull request '[0] initial commit' (#43) from komissarovgo/2026-rff_mp:komissarovgo into develop
Reviewed-on: UNN/2026-rff_mp#43
2026-02-14 10:50:17 +00:00
60ecbdb35d Merge pull request '[0] initial commit' (#41) from kuzminskiyaa/2026-rff_mp:KuzminskiyAA into develop
Reviewed-on: UNN/2026-rff_mp#41
2026-02-14 10:49:21 +00:00
Мыльников Артём С
3eab4cc3aa [0] initial commit 2026-02-14 13:46:30 +03:00
73cad3b59f [0] initial commit 2026-02-14 13:45:52 +03:00
1de0cee11d Merge pull request '[0] initial commit' (#39) from talantsevgi/2026-rff_mp:talanstevgi into develop
Reviewed-on: UNN/2026-rff_mp#39
2026-02-14 10:45:10 +00:00
306299755c Merge pull request '[0] initial commit' (#40) from kolesovve/2026-rff_mp:kolesovve into develop
Reviewed-on: UNN/2026-rff_mp#40
2026-02-14 10:44:54 +00:00
5dcd06963c Merge pull request '[0] initial commit' (#37) from osininyai/2026-rff_mp:osininyai into develop
Reviewed-on: UNN/2026-rff_mp#37
2026-02-14 10:42:24 +00:00
65fea33bd4 Merge pull request '[0] initial commit' (#38) from IvantsovMA/2026-rff_mp:ivantsovma into develop
Reviewed-on: UNN/2026-rff_mp#38
2026-02-14 10:42:00 +00:00
Колесов Владислав Е
ee26f74767 [0] initial commit 2026-02-14 13:41:48 +03:00
7000ccc96c [0] initial commit 2026-02-14 13:38:29 +03:00
Таланцев Глеб И
7db86ec769 [0] initial commit 2026-02-14 13:38:09 +03:00
Таланцев Глеб И
bef613db62 [0] initial commit 2026-02-14 13:33:37 +03:00
a3c03ab3b4 [0] initial commit 2026-02-14 13:31:07 +03:00
aadad1272e Обновить README.md 2026-02-14 10:30:33 +00:00
0c578f46e5 [0] initila commit 2026-02-14 13:18:12 +03:00
b168cd4f7b Merge pull request '[0] initial commit' (#29) from lomakinae/2026-rff_mp:lomakinae into develop
Reviewed-on: UNN/2026-rff_mp#29
2026-02-14 10:16:38 +00:00
391d8a79d1 Merge pull request '[0] initial commit' (#25) from mylnikovas/2026-rff_mp:MylnikovAS into develop
Reviewed-on: UNN/2026-rff_mp#25
2026-02-14 10:14:59 +00:00
Таланцев Глеб И
ee723b700c [0] initial commit 2026-02-14 13:14:34 +03:00
87996f3d85 Merge pull request '[0] initial commit' (#28) from sorokinfi/2026-rff_mp:sorokinfi into develop
Reviewed-on: UNN/2026-rff_mp#28
2026-02-14 10:13:45 +00:00
2a6f10cbf9 Merge pull request '[0] initial commit' (#27) from romanovpv/2026-rff_mp:romanovpv into develop
Reviewed-on: UNN/2026-rff_mp#27
2026-02-14 10:13:28 +00:00
Таланцев Глеб И
f2d51f5bc5 [0] initial commit 2026-02-14 13:07:08 +03:00
Сорокин Фёдор И
cb7dfdcf0d [0] initial commit 2026-02-14 13:03:54 +03:00
Виничук Антон Н
288f562fa0 [0] initial commit 2026-02-14 13:03:21 +03:00
Романов Павел В
ed603fc6dd [0] initial commit 2026-02-14 12:59:32 +03:00
27e1e98bf4 Merge pull request '[0] initial commit' (#20) from pomelovsd/2026-rff_mp:PomelovSD into develop
Reviewed-on: UNN/2026-rff_mp#20
2026-02-14 09:30:37 +00:00
487ff6d741 Merge pull request '[0] Initial commit' (#19) from skorohodovsa/2026-rff_mp:main into develop
Reviewed-on: UNN/2026-rff_mp#19
2026-02-14 09:29:46 +00:00
9ad53dbe15 Merge pull request '[0] initial commit' (#18) from stepushovgs/2026-rff_mp:stepushovgs into develop
Reviewed-on: UNN/2026-rff_mp#18
2026-02-14 09:29:14 +00:00
fd82609af4 Merge pull request '[0] initial commit' (#17) from simonovams/2026-rff_mp:SimonovaMS into develop
Reviewed-on: UNN/2026-rff_mp#17
2026-02-14 09:25:12 +00:00
SerKin0
0ff7405de9 [0] Добавление main.py 2026-02-14 12:00:32 +03:00
2e2a48fd30 Обновить README.md 2026-02-14 08:58:41 +00:00
4eker
34872ab84e [0] initial commit 2026-02-14 11:55:35 +03:00
3694f25de8 Merge pull request '[0] создана папка пользователя' (#15) from morozovns/2026-rff_mp:morozovns into develop
Reviewed-on: UNN/2026-rff_mp#15
2026-02-14 08:55:04 +00:00
b16d1f6731 Merge pull request '[0] initial commit' (#14) from svetlakovkyu/2026-rff_mp:svetlakovkyu into develop
Reviewed-on: UNN/2026-rff_mp#14
2026-02-14 08:54:51 +00:00
9f68a759d8 [0] initial commit 2026-02-14 11:54:34 +03:00
ca2a7eb3b6 Merge pull request '[0] initial commit' (#13) from BudakovIS/2026-rff_mp:BudakovIS into develop
Reviewed-on: UNN/2026-rff_mp#13
2026-02-14 08:49:55 +00:00
7fec6872a1 [0] initial commit 2026-02-14 11:41:46 +03:00
Nikita Morozov
fb021ba018 [1] patched 2026-02-14 11:35:37 +03:00
Nikita Morozov
1d508ceb9b [1] работает только наполовину 2026-02-14 11:32:56 +03:00
914063a196 [0] initial commit 2026-02-14 11:29:22 +03:00
SerKin0
f6a224a94a 2026-02-14 11:26:52 +03:00
Nikita Morozov
41acf4dab2 [0] initial commit 2026-02-14 11:26:12 +03:00
b5469155fa [0] initial commit 2026-02-14 11:19:18 +03:00
f15908a49d [0] initial commit 2026-02-14 10:14:05 +03:00
7c9c594771 добавлен файл группы [427] для [ронин] 2026-02-14 08:42:01 +03:00
aca0eb0c84 Добавлен файл группы 427 для Погодин 2026-02-14 00:56:21 +03:00
74 changed files with 589 additions and 3 deletions

1
.gitignore vendored
View File

@ -7,6 +7,7 @@ __pycache__/
# C extensions
*.so
.DS_Store
# Distribution / packaging
.Python
build/

0
BudakovIS/428.md Normal file
View File

0
DerbenevRY/428.md Normal file
View File

1
KuzminskiyAA/427.md Normal file
View File

@ -0,0 +1 @@

0
KuznetsovAS/427.md Normal file
View File

0
MashinDD/429.txt Normal file
View File

1
MininaVD/427.txt Normal file
View File

@ -0,0 +1 @@
427.txt

1
MininaVD/MininaVD Normal file
View File

@ -0,0 +1 @@
427.txt

0
MusinAA/428b.md Normal file
View File

1
MylnikovAS/427.md Normal file
View File

@ -0,0 +1 @@

BIN
ProninVV/427.md Normal file

Binary file not shown.

BIN
ProninVV/file.txt Normal file

Binary file not shown.

149
README.md
View File

@ -16,7 +16,7 @@
### Крайний срок приема работ 25.05.2026 до 14:00
## Задание 1 -- репозиторий
## Задание 0 -- репозиторий [отдельный срок на создание PR с папкой: 28.02.2026]
0. Создай пользователя (логин — фамилия+инициалы слитно транслитом, как в терминал-классе).
@ -43,12 +43,157 @@
6. Отправь ветку **в свой форк** на Gitea:
```bash
git push origin IvanovII
git push origin
```
если просит, перед этим сделать git push --set-upstream origin
7. **Создай запрос на слияние (Pull Request):** На Gitea перейди в свой форк, выбери ветку `IvanovII`, нажмите **Запрос на слияние**. Убедитесь, что:
- Базовый репозиторий: **учебный** (преподавателя)
- Базовая ветка: **develop**
- Сравниваемая ветка: **свой форк / IvanovII**
8. Отправь PR.
## Задание 1 -- структуры данных
***Напоминание: под каждое задание вы создаете отдельную ветку***
>Для оформления результатов заведи папку **docs** в своей папке и сохраняй туда отчет (в любом формате от .doc до .md, а то и .jpnb). Вспомогательные файлы клади в подпапку **data** внутри **docs**
**Цель работы**
Реализовать три различные структуры данных «с нуля», применить их для хранения записей телефонного справочника и экспериментально сравнить производительность основных операций. Вы должны собственными руками написать код, чтобы понять внутреннее устройство связного списка, хеш-таблицы и двоичного дерева поиска, а также осознать их сильные и слабые стороны на практике.
**!! Задание выполнять в структурной (процедурной) парадигме, не используя классы. Главное реализовать структуры данных «руками» и сравнить их производительность.**
### Базовые операции (обязательны для всех):
`insert(name, phone)` -- добавить или обновить запись.
`find(name)` -- phone или None.
`delete(name)` -- удалить запись, игнорировать отсутствие.
`list_all()` -- список всех записей, отсортированный по имени (для BST inorder обход; для списка и хеш‑таблицы — собрать и отсортировать явно).
#### 1. Связный список (LinkedListPhoneBook)
Узел представляется словарём: `{'name': 'Имя', 'phone': '123', 'next': None}.`
**Функции:**
`def ll_insert(head, name, phone)` — проходит до конца (или сразу добавляет в конец) и возвращает новую голову (если вставка в начало) или изменяет список по ссылке. Удобнее возвращать новую голову, если вставка может быть в начало.
`def ll_find(head, name)` — ищет узел, возвращает телефон или None.
`def ll_delete(head, name)` — удаляет узел, возвращает новую голову.
`def ll_list_all(head)` — собирает все записи в список и сортирует (сортировка вынесена отдельно).
#### 2. Хеш-таблица
Хранится как список buckets фиксированной длины, каждый элемент — голова связного списка (или None).
**Функции:**
`def ht_insert(buckets, name, phone)` — вычисляет индекс, вызывает ll_insert для соответствующего бакета.
Аналогично `ht_find, ht_delete, ht_list_all` (последняя собирает все записи из всех бакетов и сортирует).
#### 3. Двоичное дерево поиска
Узел — словарь: `{'name': 'Имя', 'phone': '123', 'left': None, 'right': None}.`
**Функции:**
`def bst_insert(root, name, phone)` — рекурсивно или итеративно вставляет, возвращает новый корень (если корень меняется).
`def bst_find(root, name)` — поиск.
`def bst_delete(root, name)` — удаление, возвращает новый корень.
`def bst_list_all(root)` — центрированный обход (рекурсивно собирает записи в отсортированном порядке).
### Экспериментальная часть (подробно об измерении времени)
#### 1. Генерация тестовых данных
Создайте список records из N элементов (например, N = 10000). Каждый элемент — кортеж (name, phone).
Имена генерируйте как `f"User_{i:05d}"` (равномерное распределение) или случайные слова из небольшого набора (чтобы были повторения и коллизии). Для проверки влияния порядка подготовьте два варианта одного и того же набора:
`records_shuffled` — случайный порядок.
`records_sorted` — отсортированный по имени (по алфавиту).
#### 2. Инструменты замера времени
Используйте модуль **time**:
```python
import time
start = time.perf_counter()
# ... операции ...
end = time.perf_counter()
elapsed = end - start # время в секундах
```
Для многократных замеров удобен `timeit`, но в этой задаче достаточно просто обернуть код в цикл и усреднить.
#### 3. Проведение замеров
Для каждой структуры данных и для каждого режима входных данных (случайный / отсортированный) выполните:
- А. Вставка всех записей
Создайте пустую структуру.
Засеките время, выполните insert для каждой записи из входного списка.
Зафиксируйте общее время вставки.
- Б. Поиск 100 случайных записей
Возьмите 100 случайных имён из того же набора (гарантированно существующих) и 10 имён, которых нет (например, "None_{i}").
Засеките время на выполнение всех 110 вызовов find.
- В. Удаление 50 случайных записей
Выберите 50 случайных имён из набора.
Засеките время на выполнение delete для каждого.
**!! Важно: после вставки структура остаётся заполненной, поиск и удаление выполняются на ней же. Если нужно повторить замер для другого порядка данных — создавайте новую структуру и заполняйте заново.**
#### 4. Сохранение результатов
**!! Каждый эксперимент повторить минимум 5 раз и записывать и среднее время, и все замеры.**
Соберите все замеры в словарь или список, затем сохраните в CSV-файл:
```python
import csv
results = [
["Структура", "Режим", "Операция", "Время (сек)"],
["LinkedList", "случайный", "вставка", 0.123],
...
]
with open("results.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(results)
```
#### 5. Анализ результатов
Постройте график (столбчатая диаграмма или линейный график) — можно в Excel, Google Sheets или с помощью matplotlib в Python.
Сравните:
- Как порядок входных данных влияет на скорость вставки в BST (деградация до O(n) на отсортированных данных).
- Почему хеш-таблица почти не чувствительна к порядку.
- Почему связный список всегда медленен при поиске.
- Как удаление работает в каждой структуре.
* Вывод должен содержать ответ на вопрос: какую структуру и для каких задач (частые вставки, частый поиск, необходимость получать данные в порядке) стоит выбирать в реальной жизни.*

0
SimonovaMS/428.md Normal file
View File

0
SimonovaMS/428.txt Normal file
View File

0
SolovevDS/428b.md Normal file
View File

1
VaravinVV/428b Normal file
View File

@ -0,0 +1 @@
428b

0
VolkovVA/428b.md Normal file
View File

0
YanyaevAA/428b.md Normal file
View File

1
YaroslavtsevAS/428.md Normal file
View File

@ -0,0 +1 @@
428

0
ZelentsovAV/428b.md Normal file
View File

0
anikinvd/428.md Normal file
View File

0
chizhikovaSM/428.md Normal file
View File

0
duznb/429.md.txt Normal file
View File

1
filippovavm/427 Normal file
View File

@ -0,0 +1 @@
427

0
fomichevks/426.md.txt Normal file
View File

1
ivanchenkoam/427.txt Normal file
View File

@ -0,0 +1 @@
856

0
ivantsovma/428.txt Normal file
View File

0
kolesovve/427.md Normal file
View File

BIN
komissarovgo/427.md Normal file

Binary file not shown.

1
konnovaea/429 Normal file
View File

@ -0,0 +1 @@
429

0
kornevma/426.md Normal file
View File

0
krasnovia/429.txt Normal file
View File

0
lomakinae/426 Normal file
View File

0
meosyam/428.md.txt Normal file
View File

2
morozovns/1.py Normal file
View File

@ -0,0 +1,2 @@
print("Zadanie adin!!11!adin!11!")
print("patch")

1
morozovns/429 Normal file
View File

@ -0,0 +1 @@
429

View File

@ -0,0 +1,71 @@
#Узел — словарь: {'name': 'Имя', 'phone': '123', 'left': None, 'right': None}.
def bst_insert(root, name, phone):
#рекурсивно или итеративно вставляет, возвращает новый корень (если корень меняется).
if root is None:
return {'name': name,'phone': phone,'left': None,'right': None}
if name < root['name']:
root['left'] = bst_insert(root['left'], name, phone)
elif name > root['name']:
root['right'] = bst_insert(root['right'], name, phone)
else:
root['phone'] = phone
return root
def bst_find(root, name):
if root is None:
return None
if name == root['name']:
return root['phone']
if name < root['name']:
return bst_find(root['left'], name)
return bst_find(root['right'], name)
def bst_delete(root, name):
#удаление, возвращает новый корень.
if root is None:
return None
if name < root['name']:
root['left'] = bst_delete(root['left'], name)
elif name > root['name']:
root['right'] = bst_delete(root['right'], name)
else:
if root['left'] is None:
return root['right']
if root['right'] is None:
return root['left']
min_node = root['right']
while min_node['left'] is not None:
min_node = min_node['left']
root['name'] = min_node['name']
root['phone'] = min_node['phone']
root['right'] = bst_delete(root['right'], min_node['name'])
return root
def bst_list_all(root):
# центрированный обход (рекурсивно собирает записи в отсортированном порядке).
if root is None:
return []
return (
bst_list_all(root['left']) +
[(root['name'], root['phone'])] +
bst_list_all(root['right'])
)

View File

@ -0,0 +1,56 @@
#Аналогично ht_find, ht_delete, ht_list_all (последняя собирает все записи из всех бакетов и сортирует).
from code.LinkedList import *
def create_buckets(size=1000):
return [None] * size
def hash_function(name, bucket_size):
hash_value = 0
for char in name:
hash_value = (hash_value * 31 + ord(char)) % bucket_size
return hash_value
def ht_insert(buckets, name, phone):
#вычисляет индекс, вызывает ll_insert для соответствующего бакета.
if buckets is None:
buckets = create_buckets()
index = hash_function(name, len(buckets))
buckets[index] = ll_insert(buckets[index], name, phone)
return buckets
def ht_find(buckets, name):
if not buckets:
return None
index = hash_function(name, len(buckets))
return ll_find(buckets[index], name)
def ht_delete(buckets, name):
if not buckets:
return buckets
index = hash_function(name, len(buckets))
buckets[index] = ll_delete(buckets[index], name)
return buckets
def ht_list_all(buckets):
if not buckets:
return []
records = []
for bucket in buckets:
current = bucket
while current is not None:
records.append((current['name'], current['phone']))
current = current['next']
records.sort(key=lambda x: x[0])
return records

View File

@ -0,0 +1,62 @@
def ll_insert(head, name, phone):
#проходит до конца (или сразу добавляет в конец) и возвращает новую голову (если вставка в начало) или изменяет список по ссылке. Удобнее возвращать новую голову, если вставка может быть в начало.
if head is None:
return {'name': name, 'phone': phone, 'next': None}
current = head
while current is not None:
if current['name'] == name:
current['phone'] = phone
return head
if current['next'] is None:
current['next'] = {'name': name, 'phone': phone, 'next': None}
return head
current = current['next']
def ll_find(head, name):
# ищет узел, возвращает телефон или None.
current = head
while current is not None:
if current['name'] == name:
return current['phone']
current = current['next']
return None
def ll_delete(head, name):
# удаляет узел, возвращает новую голову.
if head is None:
return None
if head['name'] == name:
return head['next']
current = head
while current['next'] is not None:
if current['next']['name'] == name:
current['next'] = current['next']['next']
return head
current = current['next']
return head
def ll_list_all(head):
#собирает все записи в список и сортирует (сортировка вынесена отдельно).
result = []
current = head
while current is not None:
result.append((current['name'], current['phone']))
current = current['next']
result.sort(key=lambda x: x[0])
return result

View File

138
nehoroshevaa/Task 1/exp.py Normal file
View File

@ -0,0 +1,138 @@
import sys
sys.setrecursionlimit(20000)
import time
import random
import csv
from code.LinkedList import *
from code.HashTable import *
from code.BinaryTree import *
def generate_data(n=10000):
return [(f"User_{i:05d}", f"+7-900-{i:05d}") for i in range(n)]
def prepare_data(n=10000):
data = generate_data(n)
shuffled = data[:]
random.shuffle(shuffled)
sorted_data = sorted(data, key=lambda x: x[0])
return shuffled, sorted_data
def measure_find(find_func, obj, data):
exist = random.sample([x[0] for x in data], 100)
fake = [f"None_{i}" for i in range(10)]
names = exist + fake
start = time.perf_counter()
for name in names:
find_func(obj, name)
return time.perf_counter() - start
def measure_delete(delete_func, obj, data):
names = random.sample([x[0] for x in data], 50)
start = time.perf_counter()
for name in names:
obj = delete_func(obj, name)
return time.perf_counter() - start
def test_linked_list(data):
head = None
start = time.perf_counter()
for name, phone in data:
head = ll_insert(head, name, phone)
insert_time = time.perf_counter() - start
find_time = measure_find(ll_find, head, data)
delete_time = measure_delete(ll_delete, head, data)
return insert_time, find_time, delete_time
def test_hash_table(data):
buckets = create_buckets(1000)
start = time.perf_counter()
for name, phone in data:
ht_insert(buckets, name, phone)
insert_time = time.perf_counter() - start
find_time = measure_find(ht_find, buckets, data)
delete_time = measure_delete(ht_delete, buckets, data)
return insert_time, find_time, delete_time
def test_bst(data):
root = None
start = time.perf_counter()
for name, phone in data:
root = bst_insert(root, name, phone)
insert_time = time.perf_counter() - start
find_time = measure_find(bst_find, root, data)
delete_time = measure_delete(bst_delete, root, data)
return insert_time, find_time, delete_time
def run():
results = []
results.append(["Structure", "Order", "Insert", "Find", "Delete"])
for i in range(5):
shuffled, sorted_data = prepare_data()
# -------- LinkedList --------
i1, f1, d1 = test_linked_list(shuffled)
results.append(["LinkedList", "shuffled", i1, f1, d1])
i1, f1, d1 = test_linked_list(sorted_data)
results.append(["LinkedList", "sorted", i1, f1, d1])
# -------- HashTable --------
i2, f2, d2 = test_hash_table(shuffled)
results.append(["HashTable", "shuffled", i2, f2, d2])
i2, f2, d2 = test_hash_table(sorted_data)
results.append(["HashTable", "sorted", i2, f2, d2])
# -------- BST --------
i3, f3, d3 = test_bst(shuffled)
results.append(["BST", "shuffled", i3, f3, d3])
i3, f3, d3 = test_bst(sorted_data)
results.append(["BST", "sorted", i3, f3, d3])
with open("results.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerows(results)
print("Готово! results.csv создан")
if __name__ == "__main__":
run()

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

View File

@ -0,0 +1,51 @@
import csv
import matplotlib.pyplot as plt
from collections import defaultdict
data = []
with open("results.csv", "r") as f:
reader = csv.reader(f)
next(reader) # header
for row in reader:
structure, order, insert, find, delete = row
data.append((structure, order, float(insert), float(find), float(delete)))
def group(metric_index):
result = defaultdict(list)
for s, o, ins, f, d in data:
key = (s, o)
result[key].append([ins, f, d][metric_index])
return result
def save_plot(metric_name, index, filename):
grouped = group(index)
plt.figure()
labels = []
for (structure, order), values in grouped.items():
label = f"{structure}-{order}"
labels.append(label)
plt.plot(values, label=label)
plt.title(metric_name)
plt.xlabel("Run")
plt.ylabel("Time (sec)")
plt.legend()
plt.savefig(filename, dpi=300, bbox_inches="tight")
plt.close()
save_plot("INSERT TIME", 0, "insert.png")
save_plot("FIND TIME", 1, "find.png")
save_plot("DELETE TIME", 2, "delete.png")
print("Графики сохранены: insert.png, find.png, delete.png")

View File

@ -0,0 +1,31 @@
Structure,Order,Insert,Find,Delete
LinkedList,shuffled,3.1266312,0.0240491,0.0153019
LinkedList,sorted,2.1736874,0.0176649,0.0123909
HashTable,shuffled,0.0102941,0.000103,5.22E-05
HashTable,sorted,0.0093038,0.0001008,5.37E-05
BST,shuffled,0.0154676,0.000154,9.03E-05
BST,sorted,8.3014441,0.0768616,0.0345065
LinkedList,shuffled,3.2182401,0.0256622,0.0177542
LinkedList,sorted,2.2604362,0.0199027,0.0131383
HashTable,shuffled,0.0110818,0.0001227,5.32E-05
HashTable,sorted,0.0098066,0.0001021,5.52E-05
BST,shuffled,0.0184675,0.0001531,9.83E-05
BST,sorted,8.6233891,0.0829446,0.0509548
LinkedList,shuffled,3.2111766,0.0260377,0.0221557
LinkedList,sorted,2.6125727,0.0275846,0.0190955
HashTable,shuffled,0.014219,0.0001666,0.0003187
HashTable,sorted,0.0138165,0.0001425,7.94E-05
BST,shuffled,0.0234246,0.0002257,0.0001382
BST,sorted,8.9193103,0.0615153,0.0415436
LinkedList,shuffled,3.4287802,0.0276346,0.0178373
LinkedList,sorted,2.4205873,0.0211635,0.0157121
HashTable,shuffled,0.0113899,0.0001118,5.63E-05
HashTable,sorted,0.0116161,0.0001284,6.88E-05
BST,shuffled,0.0221165,0.0001773,0.0001002
BST,sorted,9.0077053,0.1054247,0.0477643
LinkedList,shuffled,3.2640041,0.0345332,0.0232472
LinkedList,sorted,2.827502,0.0201937,0.0141592
HashTable,shuffled,0.0105407,0.0001501,8.18E-05
HashTable,sorted,0.0102284,0.0001005,5.58E-05
BST,shuffled,0.0166355,0.0001603,9.34E-05
BST,sorted,8.2043019,0.0622669,0.0375809
1 Structure Order Insert Find Delete
2 LinkedList shuffled 3.1266312 0.0240491 0.0153019
3 LinkedList sorted 2.1736874 0.0176649 0.0123909
4 HashTable shuffled 0.0102941 0.000103 5.22E-05
5 HashTable sorted 0.0093038 0.0001008 5.37E-05
6 BST shuffled 0.0154676 0.000154 9.03E-05
7 BST sorted 8.3014441 0.0768616 0.0345065
8 LinkedList shuffled 3.2182401 0.0256622 0.0177542
9 LinkedList sorted 2.2604362 0.0199027 0.0131383
10 HashTable shuffled 0.0110818 0.0001227 5.32E-05
11 HashTable sorted 0.0098066 0.0001021 5.52E-05
12 BST shuffled 0.0184675 0.0001531 9.83E-05
13 BST sorted 8.6233891 0.0829446 0.0509548
14 LinkedList shuffled 3.2111766 0.0260377 0.0221557
15 LinkedList sorted 2.6125727 0.0275846 0.0190955
16 HashTable shuffled 0.014219 0.0001666 0.0003187
17 HashTable sorted 0.0138165 0.0001425 7.94E-05
18 BST shuffled 0.0234246 0.0002257 0.0001382
19 BST sorted 8.9193103 0.0615153 0.0415436
20 LinkedList shuffled 3.4287802 0.0276346 0.0178373
21 LinkedList sorted 2.4205873 0.0211635 0.0157121
22 HashTable shuffled 0.0113899 0.0001118 5.63E-05
23 HashTable sorted 0.0116161 0.0001284 6.88E-05
24 BST shuffled 0.0221165 0.0001773 0.0001002
25 BST sorted 9.0077053 0.1054247 0.0477643
26 LinkedList shuffled 3.2640041 0.0345332 0.0232472
27 LinkedList sorted 2.827502 0.0201937 0.0141592
28 HashTable shuffled 0.0105407 0.0001501 8.18E-05
29 HashTable sorted 0.0102284 0.0001005 5.58E-05
30 BST shuffled 0.0166355 0.0001603 9.34E-05
31 BST sorted 8.2043019 0.0622669 0.0375809

Binary file not shown.

BIN
nikolaevda/427.md Normal file

Binary file not shown.

0
novikovsd/428 Normal file
View File

0
osininyai/427.md Normal file
View File

0
pogodinda/427.md.txt Normal file
View File

1
pomelovsd/427 Normal file
View File

@ -0,0 +1 @@
427

BIN
raskatovia/429.md Normal file

Binary file not shown.

0
romanovpv/427.md Normal file
View File

1
rybakovaa/428b.md Normal file
View File

@ -0,0 +1 @@
428b

0
semyanovra/426.md Normal file
View File

0
shahovaa/429.md Normal file
View File

0
shalovsa/429.txt Normal file
View File

0
shekurovaa/429.md Normal file
View File

1
skorohodovsa/427 Normal file
View File

@ -0,0 +1 @@
427

4
skorohodovsa/main.py Normal file
View File

@ -0,0 +1,4 @@
from math import sin
for i in range(10000):
print(" " * round(50 * (1 + sin(i/100))), "Hello World!")

0
smirnovad/429.md Normal file
View File

6
sobininaas/429.rtf Normal file
View File

@ -0,0 +1,6 @@
{\rtf1\ansi\ansicpg1251\cocoartf2761
\cocoatextscaling0\cocoaplatform0{\fonttbl}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\paperw11900\paperh16840\margl1440\margr1440\vieww11520\viewh8400\viewkind0
}

1
soldatkinao/428б.md Normal file
View File

@ -0,0 +1 @@
<EFBFBD>¥¦¨¬ ¢כ¢®₪  ×®¬ ­₪ ­  ם×א ­ (ECHO) ¢×«מח¥­.

0
sorokinfi/427.md Normal file
View File

0
stepinim/428.md Normal file
View File

1
stepushovgs/427 Normal file
View File

@ -0,0 +1 @@
427

0
svetlakovkyu/426 Normal file
View File

1
talantsevgi/427.txt Normal file
View File

@ -0,0 +1 @@
732489234

1
tseremonnikovaaa/427 Normal file
View File

@ -0,0 +1 @@
427

1
volkovim/428b.md Normal file
View File

@ -0,0 +1 @@
428b

1
zaharoves/429.md Normal file
View File

@ -0,0 +1 @@

0
zverevem/429.txt Normal file
View File