Compare commits

..

114 Commits

Author SHA1 Message Date
82e988c965 Merge pull request '[0] initial commit' (#170) from Smirnovvs/2026-rff_mp:Smirnovvs into develop
Reviewed-on: UNN/2026-rff_mp#170
2026-04-27 18:05:51 +00:00
58daf860ed Merge pull request '[0] initial commit' (#167) from kalinovskiymi/2026-rff_mp:kalinovskiymi into develop
Reviewed-on: UNN/2026-rff_mp#167
2026-04-27 18:05:12 +00:00
566d89fda2 Merge pull request '[0] initial commit' (#166) from dyachenkoas/2026-rff_mp:dyachenkoas into develop
Reviewed-on: UNN/2026-rff_mp#166
2026-04-25 09:27:44 +00:00
c7229154ca Merge pull request '[0] initial commit' (#158) from MalkinMV/2026-rff_mp:MalkinMV into develop
Reviewed-on: UNN/2026-rff_mp#158
2026-04-25 09:25:55 +00:00
6e4ae1835b Merge pull request '[1] initial commit' (#171) from osipovamd/2026-rff_mp:osipovamd into develop
Reviewed-on: UNN/2026-rff_mp#171
2026-04-05 10:54:06 +00:00
MariiaOs
25341dc814 [1] initial commit 2026-04-04 17:13:00 +03:00
fe9ce65eb2 [0] initial commit 2026-04-04 14:46:15 +03:00
405d1e583b Merge pull request '[0] initial commit' (#162) from varnakovaa/2026-rff_mp:VarnakovAA into develop
Reviewed-on: UNN/2026-rff_mp#162
2026-04-04 09:12:00 +00:00
74807f5514 Обновить README.md 2026-04-04 07:11:52 +00:00
3a251f06c7 Добавить kalinovskiymi/428 2026-03-27 20:48:17 +00:00
e4c7e2d97a [0] initial commit 2026-03-23 21:32:01 +03:00
MalkinMV
7e84caffc4 [0] initial commit 2026-03-21 10:29:10 +03:00
84e5d1e763 Добавить dyachenkoas/428 2026-03-21 03:26:23 +00:00
f5b0fec46f Merge pull request '[1] FINISH 1-st-exercise' (#148) from IvanBud123/2026-rff_mp:1-st-exercise into develop
Reviewed-on: UNN/2026-rff_mp#148
2026-03-15 06:42:22 +00:00
e4423a3be8 Merge pull request '[0] initial commit' (#154) from BoriskovaDV/2026-rff_mp:BoriskovaDV into develop
Reviewed-on: UNN/2026-rff_mp#154
2026-03-15 06:41:55 +00:00
eeb28d8b6a [0] init 2026-03-15 05:18:35 +00:00
b3e4b6149e docs 2026-03-15 02:46:48 +00:00
c98c8a472b Merge pull request '[0] initial commit' (#152) from victorovaas/2026-rff_mp:victorovaas into develop
Reviewed-on: UNN/2026-rff_mp#152
2026-03-14 09:27:51 +00:00
Git Version Control
666e6ecd41 [1] ... README.md 2026-03-12 04:02:58 +00:00
062d3b983e Merge pull request '[0] initial commit' (#151) from KislyuninED/2026-rff_mp:KislyuninED into develop
Reviewed-on: UNN/2026-rff_mp#151
2026-03-10 08:17:33 +00:00
197c266cd4 [0] initial commit 2026-03-07 17:15:56 +03:00
b874ac28aa Merge pull request '[0] initial commit' (#149) from SavelevMI/2026-rff_mp:SavelevMI into develop
Reviewed-on: UNN/2026-rff_mp#149
2026-03-06 10:15:37 +00:00
4cef8060a3 [15] FINISH for 1-st exersize 2026-03-04 01:40:38 +03:00
50798eb572 Merge branch 'develop' into 1-st-exercise 2026-03-04 01:37:44 +03:00
7067bfa12a [14] FINISH for 1-st exersize 2026-03-04 01:14:58 +03:00
64f43373df [13] FINISH for 1-st exersize 2026-03-04 01:02:42 +03:00
da65d02bd7 [12] BIG UPDATE 2026-03-04 01:02:40 +03:00
0441c5076a [11] A minor update that fixes errors and typos 2026-03-04 01:02:37 +03:00
28de33a83d [10] A minor update that fixes errors and typos 2026-03-04 01:02:32 +03:00
49e91066d4 [9] finish with adding BST(Binar Search Tree) 2026-03-04 01:02:29 +03:00
bb28c3dd2f [8] start adding binar search func(create_node and bst_insert) 2026-03-04 01:02:26 +03:00
1ebec4223a [7] add hash func and tests of hash func 2026-03-04 01:02:23 +03:00
e868e94fcd [6] add hash func find, insert and hash_func 2026-03-04 01:02:17 +03:00
0e84534109 [5] modyfi LinkedListBook for 2-nd exersize 2026-03-04 01:02:11 +03:00
8c642fea20 [4] start coding hash-table 2026-03-04 00:56:59 +03:00
7dbd3075b6 [3] adding ll_list_all 2026-03-04 00:56:59 +03:00
050462d011 [2] adding ll_find and ll_delete 2026-03-04 00:56:59 +03:00
ba244f24bb [1] implemented the ll_insert function for an first exercise 2026-03-04 00:56:59 +03:00
39fe26b3f1 [0] initial commit 2026-03-04 00:56:59 +03:00
5de2cca73e Обновить README.md 2026-03-04 00:56:59 +03:00
8c17e92dd8 Удалить testfile.txt 2026-03-04 00:56:59 +03:00
b1cb2491d8 Обновить README.md 2026-03-04 00:56:59 +03:00
a5ee4d9ae5 Обновить README.md 2026-03-04 00:56:59 +03:00
fb8f0c47f5 Обновить README.md 2026-03-04 00:56:59 +03:00
099ec9f5e3 Обновить README.md 2026-03-04 00:56:59 +03:00
3f89175175 Merge pull request '[0] initial commit' (#144) from starikovta/2026-rff_mp:starikovta into develop
Reviewed-on: UNN/2026-rff_mp#144
2026-03-01 13:45:14 +00:00
3360e2dc8f Merge pull request '[0] initial commit' (#140) from MochalovAE/2026-rff_mp:MochalovAE into develop
Reviewed-on: UNN/2026-rff_mp#140
2026-03-01 13:44:44 +00:00
91b3c9a007 Merge pull request '[0] initial commit' (#138) from famutdinovmd/2026-rff_mp:famutdinovmd into develop
Reviewed-on: UNN/2026-rff_mp#138
2026-03-01 13:44:31 +00:00
44552108d4 [0] initial commit 2026-02-28 17:53:25 +03:00
ff1063d866 [0] initial commit 2026-02-28 17:19:44 +03:00
38d4ae0d5e [0] initial commit 2026-02-28 16:42:45 +03:00
7adc1e91f5 [0] initial commit 2026-02-28 14:21:18 +03:00
d2b04e6f0e Merge pull request '[0] initial commit' (#137) from sorokinad/2026-rff_mp:SorokinAD into develop
Reviewed-on: UNN/2026-rff_mp#137
2026-02-28 10:59:40 +00:00
0206cfd65f Merge pull request '[0] initial commit' (#135) from SokolovNE/2026-rff_mp:SokolovNE into develop
Reviewed-on: UNN/2026-rff_mp#135
2026-02-28 10:58:21 +00:00
89f2fa1162 Merge pull request '[0]develop' (#136) from Ezhovnd/2026-rff_mp:develop into develop
Reviewed-on: UNN/2026-rff_mp#136
2026-02-28 10:58:02 +00:00
Морозов Никита С
7278f7d9db Merge branch 'ezhovnd' into develop 2026-02-28 13:55:21 +03:00
Сорокин Александр Д
14272a7c25 [0] initial commit 2026-02-28 13:53:01 +03:00
Морозов Никита С
e613581d34 [0] initial com mit 2026-02-28 13:44:09 +03:00
cdfdb49be1 [0] initial commit 2026-02-28 13:34:18 +03:00
52c001a380 Merge pull request '[0] initial commit' (#134) from nikitovie/2026-rff_mp:nikitovie into develop
Reviewed-on: UNN/2026-rff_mp#134
2026-02-28 10:21:56 +00:00
9dceb29513 [0] initial commit 2026-02-28 13:09:29 +03:00
f409499159 Merge pull request '[0] initial commit' (#133) from gutovvm/2026-rff_mp:GutovVM into develop
Reviewed-on: UNN/2026-rff_mp#133
2026-02-28 09:52:33 +00:00
59076d3df1 Merge pull request '[0] initial commit' (#132) from KolbasovPD/2026-rff_mp:KolbasovPD into develop
Reviewed-on: UNN/2026-rff_mp#132
2026-02-28 09:52:21 +00:00
3dbf137752 Merge pull request '[0] initial commit' (#128) from gorkinmm/2026-rff_mp:GorkinMM into develop
Reviewed-on: UNN/2026-rff_mp#128
2026-02-28 09:52:12 +00:00
918536d2ed Merge pull request '[0] initial commit' (#114) from groshevava/2026-rff_mp:groshevava into develop
Reviewed-on: UNN/2026-rff_mp#114
2026-02-28 09:52:01 +00:00
812f0acac2 Merge pull request '[0] initial commit' (#105) from KuznetsovMA/2026-rff_mp:KuznetsovMA into develop
Reviewed-on: UNN/2026-rff_mp#105
2026-02-28 09:51:40 +00:00
8a30aff913 Merge pull request '[0] initial commit' (#103) from zhigalovrd/2026-rff_mp:zhigalovrd into develop
Reviewed-on: UNN/2026-rff_mp#103
2026-02-28 09:51:17 +00:00
d157503ef2 Merge pull request '[0] initial commit' (#120) from shapovalovka/2026-rff_mp:shapovalovka into develop
Reviewed-on: UNN/2026-rff_mp#120
2026-02-28 09:51:03 +00:00
8d4e9ebeca Merge pull request '[0] initial commit' (#112) from kuznetsovTD/2026-rff_mp:kuznetsovTD into develop
Reviewed-on: UNN/2026-rff_mp#112
2026-02-28 09:50:50 +00:00
ec9b3fb7c6 Merge pull request '[0] initial commit' (#111) from bolonkinnm/2026-rff_mp:BolonkinNM into develop
Reviewed-on: UNN/2026-rff_mp#111
2026-02-28 09:50:07 +00:00
a29c7d7af6 Merge pull request '[0] initial commit' (#110) from ShulpinIN/2026-rff_mp:ShulpinIN into develop
Reviewed-on: UNN/2026-rff_mp#110
2026-02-28 09:49:54 +00:00
ef189db30c Merge pull request '[0] initial commit' (#117) from SokolovEN/2026-rff_mp:SokolovEN into develop
Reviewed-on: UNN/2026-rff_mp#117
2026-02-28 09:49:44 +00:00
110e13b31e Merge pull request '[0] initial commit' (#118) from VildyaevAV/2026-rff_mp:VildyaevAV into develop
Reviewed-on: UNN/2026-rff_mp#118
2026-02-28 09:49:34 +00:00
5640088b5a Merge pull request '[0] initial commit' (#121) from ZhuravlevDV/2026-rff_mp:ZhuravlevDV into develop
Reviewed-on: UNN/2026-rff_mp#121
2026-02-28 09:49:19 +00:00
d2b26c6f9e Merge pull request '[0] initial commit' (#108) from borisovmi/2026-rff_mp:BorisovMI into develop
Reviewed-on: UNN/2026-rff_mp#108
2026-02-28 09:49:08 +00:00
a48c0abf0d Merge pull request '[0] initial commit' (#104) from soninrv/2026-rff_mp:soninrv into develop
Reviewed-on: UNN/2026-rff_mp#104
2026-02-28 09:48:56 +00:00
6ec811b963 Merge pull request '[0] initial commit' (#116) from SobolevNS/2026-rff_mp:SobolevNS into develop
Reviewed-on: UNN/2026-rff_mp#116
2026-02-28 09:48:38 +00:00
5fc3c42694 Merge pull request '[0] initial commit' (#113) from rybakovaa/2026-rff_mp:rybakovaa into develop
Reviewed-on: UNN/2026-rff_mp#113
2026-02-28 09:48:25 +00:00
16808ba847 Merge pull request '[0] initial commit' (#119) from agafonovdm/2026-rff_mp:agafonovdm into develop
Reviewed-on: UNN/2026-rff_mp#119
2026-02-28 09:47:52 +00:00
e19c3b7841 Merge pull request '[0] initial commit' (#122) from larikovaaa/2026-rff_mp:LarikovaAA into develop
Reviewed-on: UNN/2026-rff_mp#122
2026-02-28 09:47:35 +00:00
88aa5a412f Merge pull request '[0] initial commit' (#126) from lukovnikovde/2026-rff_mp:LukovnikovDE into develop
Reviewed-on: UNN/2026-rff_mp#126
2026-02-28 09:47:18 +00:00
61f966e163 Merge pull request '[0] initial commit' (#125) from Ridge/2026-rff_mp:KorotkinSE into develop
Reviewed-on: UNN/2026-rff_mp#125
2026-02-28 09:46:55 +00:00
8c4322f768 Merge pull request '[0] initial commit' (#127) from SolovevDD/2026-rff_mp:SolovevDD into develop
Reviewed-on: UNN/2026-rff_mp#127
2026-02-28 09:46:41 +00:00
b85b706169 Merge pull request '[0] initial commit' (#106) from KuznetsovYuM/2026-rff_mp:KuznetsovYuM into develop
Reviewed-on: UNN/2026-rff_mp#106
2026-02-28 09:46:28 +00:00
8198cfb061 Merge pull request '[0] initial commit' (#102) from petryaninyas/2026-rff_mp:petryaninyas into develop
Reviewed-on: UNN/2026-rff_mp#102
2026-02-28 09:42:49 +00:00
7b7e8e93d4 Merge pull request '[0] initial commit' (#100) from MarkinAM/2026-rff_mp:MarkinAM into develop
Reviewed-on: UNN/2026-rff_mp#100
2026-02-28 09:42:19 +00:00
036c08c2d9 [0] initial commit 2026-02-28 08:25:52 +03:00
2bf7ca3c92 [0] initial commit 2026-02-28 01:11:43 +03:00
786881334d [0] initial commit 2026-02-27 23:43:40 +03:00
SolovevDD
ddf8ef5105 [0] initial commit 2026-02-27 23:37:07 +03:00
ab854a04dd [0] initial commit 2026-02-27 23:32:09 +03:00
c121e51b1f [0] initial commit 2026-02-27 22:13:03 +03:00
3e175eb367 Добавил папку SavelevMI 2026-02-27 20:38:31 +03:00
3e5ee4a5a4 [0] initial commit 2026-02-27 20:36:00 +03:00
aa6fbb0692 [0] initial commit 2026-02-27 19:17:17 +03:00
shapovalovka
9eedcecf0c [0] initial commit 2026-02-27 19:14:53 +03:00
2204ca3dc8 [0] initial commit 2026-02-27 18:55:31 +03:00
764e6a3a2c [0] initial commit 2026-02-27 18:00:19 +03:00
ec48b13150 [0] initial commit 2026-02-27 12:00:34 +03:00
3cfd61e6cc [0] initial commit 2026-02-27 09:09:05 +03:00
groshevava
57c811ece4 [0] initial commit 2026-02-26 23:04:47 +00:00
0d86929b62 [0] initial commit 2026-02-26 23:02:00 +03:00
e442988725 [0] initial commit 2026-02-26 22:53:18 +03:00
1a041a4dac [0] initial commit 2026-02-26 21:00:34 +03:00
af2f607a3b [0] fix: correct file extension to .md 2026-02-26 19:50:20 +03:00
96532a99fb [0] initial commit 2026-02-26 19:44:37 +03:00
809f768703 [0] initial commit 2026-02-26 13:38:56 +03:00
154b9b8b65 [0] initial commit 2026-02-26 13:34:48 +03:00
aeb608a5d3 [0] initial commit 2026-02-25 19:02:50 +03:00
f541180fcf [0] initial commit 2026-02-25 17:16:19 +03:00
134b330145 [0] initial commit 2026-02-25 14:17:27 +03:00
8dc1d57252 [0] initial commit 2026-02-24 23:07:54 +03:00
MarkinAM
d7a13c9fe6 [0] initial commit 2026-02-24 17:57:48 +03:00
365f830e05 [0] initial commit 2026-02-22 12:45:20 +03:00
51 changed files with 791 additions and 740 deletions

0
BolonkinNM/426.md Normal file
View File

0
BoriskovaDV/428.md Normal file
View File

0
BorisovMI/429.md Normal file
View File

View File

@ -0,0 +1,457 @@
head = None
#node1 = {'name' : 'Ivan', 'phone' : '123-456', 'next' : None}
#head = node1
#node2 = {'name' : 'Dima', 'phone' : '789-123', 'next' : None}
#node1['next'] = node2
def ll_insert(head, name, phone):
curent = head
while curent is not None:
if curent['name'] == name:
curent['phone'] = phone
return head
curent = curent['next']
n_node = {'name' : name, 'phone' : phone, 'next' : None}
if head is None:
return n_node
curent = head
while curent['next'] is not None:
curent = curent['next']
curent['next'] = n_node
return head
print("====== TESTING ll_insert FUNC ========")
head = ll_insert(head,'Ivan','123-456')
print(head)
head = ll_insert(head, 'Boris', '123-456')
print(head)
head = ll_insert(head, 'Ivan', '321-654')
print(head)
head = ll_insert(head, 'Dima', '345-678')
print(head)
head = ll_insert(head, 'Boris', '111-222')
print(head)
head = ll_insert(head, 'Methody', '221-112')
head = ll_insert(head, 'Kiril', '112-221')
print(f"======= END TEST =======\n\n\n")
def ll_find(head, name):
curent = head
while curent is not None:
if curent['name'] == name:
return curent['phone']
curent = curent['next']
return None
print("====== TESTING ll_find FUNC ======")
print("Ivan`s phone: "+ ll_find(head, 'Ivan'))
print("Dima`s phone: "+ ll_find(head, 'Dima'))
print("Boris phone: "+ ll_find(head, 'Boris'))
print(f"====== END TEST ======\n\n\n")
def ll_delete(head, name):
if head is None:
return None
if head['name'] == name:
return head['next']
prev = head
curent = head['next']
while curent is not None:
if curent['name'] == name:
prev['next'] = curent['next']
return head
prev = curent
curent = curent['next']
return head
print("====== TEST ll_delete FUNC ======")
print("Del of Dima:", ll_delete(head, 'Dima'))
print("====== END TEST ======")
def ll_list_all(head):
records = []
curent = head
while curent is not None:
records.append((curent['name'],curent['phone']))
curent = curent['next']
records.sort(key=lambda pair: pair[0])
return records
print(f"\n\n\n\n")
print("====== TESTING ll_list_all FUNC ======")
print(ll_list_all(head))
print("====== END ======")
#============================== HASH FUNCTIONS =========================
SIZE = 5
buckets = [None] * SIZE
def hash_function(name, size):
return hash(name) % size
def ht_insert(buckets, name, phone):
index = hash_function(name, len(buckets))
head = buckets[index]
new_head = ll_insert(head, name, phone)
buckets[index] = new_head
return buckets
print(f"\n\n\n ====== TEST INSERT HASH ======")
print(buckets)
ht_insert(buckets, "Ivan", "123-456")
print(buckets)
ht_insert(buckets, "Dima", "789-123")
print(buckets)
ht_insert(buckets, "Boris", "456-789")
print(buckets)
print("====== END TEST ======\n\n\n")
def ht_find(buckets, name):
index = hash_function(name, len(buckets))
head = buckets[index]
return ll_find(head, name)
print("====== TEST FIND HASH FUN ======")
print("find by name Ivan: ",ht_find(buckets, "Ivan"))
print("find by name Dima: ",ht_find(buckets, "Dima"))
print("find by name Boris: ", ht_find(buckets, "Boris"))
print("====== END TEST ======\n\n\n")
def ht_list_all(buckets):
all_records = []
for head in buckets:
current = head
while current is not None:
all_records.append((current['name'], current['phone']))
current = current['next']
all_records.sort(key=lambda x: x[0])
return all_records
print("====== TEST FUNC LIST ALL ======")
print(ht_list_all(buckets))
print("====== END TEST ======\n\n\n")
def ht_delete(buckets, name):
index = hash_function(name, len(buckets))
head = buckets[index]
new_head = ll_delete(head, name)
buckets[index] = new_head
return buckets
print("====== GLOBAL TEST FOR HASH BASED FUN ======")
buckets = [None] * 10
ht_insert(buckets, "Ivan", "123-456")
print(buckets)
ht_insert(buckets, "Boris", "789-012")
print(buckets)
ht_insert(buckets, "Anna", "345-678")
print(buckets)
ht_insert(buckets, "Ivan", "111-222") # update
print(buckets)
print("Find Ivan`s phone: ",ht_find(buckets, "Ivan")) # 111-222
print("Find Petr`s phone: ",ht_find(buckets, "Petr")) # None
# Удаляем
print("delite Boris from buckets")
ht_delete(buckets, "Boris")
print("search Boris = ",ht_find(buckets, "Boris")) # None
# Все записи
print("list all records: ",ht_list_all(buckets))
print("====== END GLOBAL TEST ======\n\n\n")
# ======================== TREE FUNC ====================
def create_node(name,phone):
return {'name': name, 'phone': phone, 'left': None, 'right': None}
print("====== START TREE FUNC CHAPTER ======\n\n")
print("====== TEST CREATE NODE FUNC ======")
root = create_node('Ivan', '123-456')
print("Create Ivan node: ",root)
print("====== END TEST ====== \n\n\n")
def bst_insert(root, name, phone):
if root is None:
return create_node(name, phone)
if name == root['name']:
root['phone'] = phone
elif name < root['name']:
root['left'] = bst_insert(root['left'], name, phone)
else:
root['right'] = bst_insert(root['right'], name , phone)
return root
print("====== TEST INSERT FUNC ======")
root = bst_insert(root, 'Dima', '456-789')
print("add Dima: ", root)
root = bst_insert(root, 'Boris', '789-123')
print("add Boris: ", root)
root = bst_insert(root, 'Eva', '321-123')
print("add Eva: ", root)
print("====== END TEST =======\n\n\n")
def bst_find(root, name):
if root is None:
return None
if name == root['name']:
return root['phone']
elif name<root['name']:
return bst_find(root['left'], name)
else:
return bst_find(root['right'], name)
print("====== START FIND TEST ======")
print("search by Ivan`s phone: ", bst_find(root, 'Ivan'))
print("search by Eva`s phone: ", bst_find(root,'Eva'))
print("====== END TEST ====== \n\n\n")
def find_min(node):
while node['left'] is not None:
node = node['left']
return node
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 = find_min(root['right'])
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):
result = []
def inorder(node):
if node is None:
return
inorder(node['left'])
result.append((node['name'], node['phone']))
inorder(node['right'])
inorder(root)
return result
print("====== GLOBAL TEST TREES ======")
root = None
root = bst_insert(root, "Ivan", "123-456")
print("add Ivan: ", root)
root = bst_insert(root, "Boris", "789-012")
print("add Boris: ", root)
root = bst_insert(root, "Anna", "345-678")
print("add Anna: ", root)
root = bst_insert(root, "Ivan", "111-222") # обновление
print("update Ivan: ", root)
print("Find Ivan`s phone: ",bst_find(root, "Ivan")) # 111-222
print("Find Peter`s phone: ",bst_find(root, "Petr")) # None
root = bst_delete(root, "Boris")
print("Del Boris")
print("Find Boris: ",bst_find(root, "Boris")) # None
print("Find ALL: ",bst_list_all(root)) # [('Anna','345-678'), ('Ivan','111-222')]
print("====== END TEST ======")
# ======================== EXPEREMENT CHAPTER ========================
import random
import time
import csv
import sys
sys.setrecursionlimit(20000)
def generate_records(n, seed=42):
random.seed(seed)
records = []
for i in range(1, n+1):
name = f"User_{i:05d}"
phone = f"{random.randint(100,999)}-{random.randint(1000,9999)}"
records.append((name, phone))
return records
def prepare_datasets(base_records):
shuffled = base_records.copy()
random.shuffle(shuffled)
sorted_records = sorted(base_records, key=lambda x: x[0])
return shuffled, sorted_records
def run_experiment(struct_funcs, records, mode_name, repeats=5):
results = []
for rep in range(repeats):
struct = struct_funcs['create']()
# enter all records
start = time.perf_counter()
for name, phone in records:
struct = struct_funcs['insert'](struct, name, phone)
end = time.perf_counter()
insert_time = end - start
# search for 110 records (100 real + 10 None)
existing_names = [name for name, _ in records]
sample_existing = random.sample(existing_names, 100)
nonexistent = [f"None_{i}" for i in range(10)]
search_names = sample_existing + nonexistent
random.shuffle(search_names)
start = time.perf_counter()
for name in search_names:
_ = struct_funcs['find'](struct, name)
end = time.perf_counter()
find_time = end - start
# delete 10 random records
to_delete = random.sample(existing_names, 10)
start = time.perf_counter()
for name in to_delete:
struct = struct_funcs['delete'](struct, name)
end = time.perf_counter()
delete_time = end - start
results.append({
'structure': struct_funcs['name'],
'mode': mode_name,
'repetition': rep+1,
'insert_time': insert_time,
'find_time': find_time,
'delete_time': delete_time
})
return results
def main():
N = 1000
base_records = generate_records(N)
shuffled, sorted_records = prepare_datasets(base_records)
structures = {
'LinkedList': {
'name': 'LinkedList',
'create': lambda: None,
'insert': ll_insert,
'find': ll_find,
'delete': ll_delete,
'list_all': ll_list_all
},
'HashTable': {
'name': 'HashTable',
'create': lambda: [None] * 10,
'insert': ht_insert,
'find': ht_find,
'delete': ht_delete,
'list_all': ht_list_all
},
'BST': {
'name': 'BST',
'create': lambda: None,
'insert': bst_insert,
'find': bst_find,
'delete': bst_delete,
'list_all': bst_list_all
}
}
all_results = []
repeats = 5
for struct_name, funcs in structures.items():
print(f"Testing {struct_name} on random order...")
res = run_experiment(funcs, shuffled, 'random', repeats)
all_results.extend(res)
print(f"Testing {struct_name} in sorted order...")
res = run_experiment(funcs, sorted_records, 'sorted', repeats)
all_results.extend(res)
with open('experiment_results.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['Structure', 'Mode', 'Repeat', 'Insert (sec)', 'Search (sec)', 'Delete (sec)'])
for r in all_results:
writer.writerow([
r['structure'],
r['mode'],
r['repetition'],
f"{r['insert_time']:.6f}",
f"{r['find_time']:.6f}",
f"{r['delete_time']:.6f}"
])
print("The experiment is complete. The results are saved in experiment_results.csv.")
if __name__ == '__main__':
main()

View File

@ -0,0 +1,31 @@
Structure,Mode,Repeat,Insert (sec),Search (sec),Delete (sec)
LinkedList,random,1,0.140358,0.007040,0.000844
LinkedList,random,2,0.138009,0.009197,0.000413
LinkedList,random,3,0.114717,0.009266,0.000744
LinkedList,random,4,0.117224,0.006914,0.000531
LinkedList,random,5,0.136302,0.010432,0.000582
LinkedList,sorted,1,0.106921,0.007845,0.000566
LinkedList,sorted,2,0.116404,0.015005,0.004900
LinkedList,sorted,3,0.125122,0.006956,0.000708
LinkedList,sorted,4,0.122401,0.004220,0.000474
LinkedList,sorted,5,0.111422,0.008343,0.000551
HashTable,random,1,0.025442,0.004652,0.000078
HashTable,random,2,0.035477,0.000985,0.000091
HashTable,random,3,0.015387,0.001249,0.000298
HashTable,random,4,0.014196,0.001167,0.000096
HashTable,random,5,0.013819,0.000910,0.000094
HashTable,sorted,1,0.013713,0.000897,0.000060
HashTable,sorted,2,0.016816,0.001013,0.000116
HashTable,sorted,3,0.018408,0.001019,0.000084
HashTable,sorted,4,0.014490,0.000886,0.000093
HashTable,sorted,5,0.012493,0.000867,0.000075
BST,random,1,0.006755,0.000468,0.000065
BST,random,2,0.006454,0.000380,0.000052
BST,random,3,0.003348,0.000266,0.000033
BST,random,4,0.004785,0.000379,0.000053
BST,random,5,0.005253,0.000438,0.000083
BST,sorted,1,0.331066,0.028260,0.002915
BST,sorted,2,0.342009,0.025769,0.003155
BST,sorted,3,0.282425,0.031293,0.002984
BST,sorted,4,0.313816,0.022712,0.002957
BST,sorted,5,0.287008,0.032645,0.002415
1 Structure Mode Repeat Insert (sec) Search (sec) Delete (sec)
2 LinkedList random 1 0.140358 0.007040 0.000844
3 LinkedList random 2 0.138009 0.009197 0.000413
4 LinkedList random 3 0.114717 0.009266 0.000744
5 LinkedList random 4 0.117224 0.006914 0.000531
6 LinkedList random 5 0.136302 0.010432 0.000582
7 LinkedList sorted 1 0.106921 0.007845 0.000566
8 LinkedList sorted 2 0.116404 0.015005 0.004900
9 LinkedList sorted 3 0.125122 0.006956 0.000708
10 LinkedList sorted 4 0.122401 0.004220 0.000474
11 LinkedList sorted 5 0.111422 0.008343 0.000551
12 HashTable random 1 0.025442 0.004652 0.000078
13 HashTable random 2 0.035477 0.000985 0.000091
14 HashTable random 3 0.015387 0.001249 0.000298
15 HashTable random 4 0.014196 0.001167 0.000096
16 HashTable random 5 0.013819 0.000910 0.000094
17 HashTable sorted 1 0.013713 0.000897 0.000060
18 HashTable sorted 2 0.016816 0.001013 0.000116
19 HashTable sorted 3 0.018408 0.001019 0.000084
20 HashTable sorted 4 0.014490 0.000886 0.000093
21 HashTable sorted 5 0.012493 0.000867 0.000075
22 BST random 1 0.006755 0.000468 0.000065
23 BST random 2 0.006454 0.000380 0.000052
24 BST random 3 0.003348 0.000266 0.000033
25 BST random 4 0.004785 0.000379 0.000053
26 BST random 5 0.005253 0.000438 0.000083
27 BST sorted 1 0.331066 0.028260 0.002915
28 BST sorted 2 0.342009 0.025769 0.003155
29 BST sorted 3 0.282425 0.031293 0.002984
30 BST sorted 4 0.313816 0.022712 0.002957
31 BST sorted 5 0.287008 0.032645 0.002415

View File

@ -0,0 +1,44 @@
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Загрузка данных
df = pd.read_csv('experiment_results.csv')
# Усреднение по повторам
mean_times = df.groupby(['Structure', 'Mode'])[['Insert (sec)', 'Search (sec)', 'Delete (sec)']].mean().reset_index()
# Подготовка данных для графиков
structures = mean_times['Structure'].unique()
modes = mean_times['Mode'].unique()
# Создание трех графиков (вставка, поиск, удаление)
fig, axes = plt.subplots(1, 3, figsize=(15, 5))
operations = ['Insert (sec)', 'Search (sec)', 'Delete (sec)']
titles = ['Вставка', 'Поиск', 'Удаление']
for ax, op, title in zip(axes, operations, titles):
# Для каждой структуры строим две колонки (random, sorted)
x = np.arange(len(structures))
width = 0.35
random_vals = []
sorted_vals = []
for s in structures:
random_row = mean_times[(mean_times['Structure']==s) & (mean_times['Mode']=='random')]
sorted_row = mean_times[(mean_times['Structure']==s) & (mean_times['Mode']=='sorted')]
random_vals.append(random_row[op].values[0] if not random_row.empty else 0)
sorted_vals.append(sorted_row[op].values[0] if not sorted_row.empty else 0)
ax.bar(x - width/2, random_vals, width, label='Случайный')
ax.bar(x + width/2, sorted_vals, width, label='Отсортированный')
ax.set_xticks(x)
ax.set_xticklabels(structures)
ax.set_ylabel('Время (сек)')
ax.set_title(title)
ax.legend()
plt.tight_layout()
plt.savefig('../../performance_comparison.png', dpi=150)
plt.show()

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,60 @@
# Отчёт по лабораторной работе "Структуры данных"
## 1. Введение
В рамках работы были реализованы три структуры данных для хранения телефонного справочника: связный список, хеш-таблица и двоичное дерево поиска. Проведено экспериментальное сравнение производительности операций вставки, поиска и удаления на наборе из **10000 записей**. Для каждой структуры тестирование выполнялось на двух вариантах входных данных: случайный порядок и отсортированный по имени. Каждый эксперимент повторялся 5 раз, результаты усреднены.
## 2. Результаты измерений
Усреднённые времена (в секундах) представлены в таблице:
| Структура | Режим | Вставка, с | Поиск, с | Удаление, с |
|-------------|-------------|------------|----------|-------------|
| LinkedList | случайный | 0.1143 | 0.0078 | 0.00065 |
| LinkedList | сортир. | 0.1124 | 0.0068 | 0.00065 |
| HashTable | случайный | 0.0131 | 0.00109 | 0.000085 |
| HashTable | сортир. | 0.0156 | 0.00110 | 0.00014 |
| BST | случайный | 0.00532 | 0.000365 | 0.000053 |
| BST | сортир. | 0.303 | 0.0230 | 0.00268 |
Графическое представление результатов приведено на рисунке ниже.
![Сравнение производительности](performance_comparison.png)
## 3. Анализ результатов
### 3.1. Влияние порядка данных на BST
При вставке элементов в отсортированном порядке двоичное дерево поиска вырождается в линейный список все новые узлы добавляются только в правое поддерево. Высота дерева становится равной количеству элементов, и сложность всех операций возрастает до **O(n)**. Эксперимент подтверждает это:
- Вставка в BST на отсортированных данных заняла **0.303 с**, что в **57 раз** больше, чем на случайных (0.00532 с).
- Время вставки на отсортированных данных даже превышает показатели связного списка (0.112 с), что объясняется дополнительными накладными расходами на рекурсивные вызовы.
- Поиск и удаление также замедлились примерно в 60 раз по сравнению со случайным режимом.
### 3.2. Устойчивость хеш-таблицы к порядку
Хеш-таблица использует хеш-функцию, которая равномерно распределяет ключи по корзинам независимо от порядка поступления. Поэтому производительность операций практически не зависит от того, в каком порядке приходят данные:
- В случайном и отсортированном режимах времена вставки (0.0131 и 0.0156 с) и поиска (около 0.0011 с) близки.
- Небольшие колебания могут быть вызваны случайным распределением коллизий.
- Это соответствует ожидаемой средней сложности **O(1)**.
### 3.3. Медлительность связного списка при поиске
Связный список не обеспечивает прямого доступа к элементам для поиска необходимо просматривать узлы последовательно, что даёт сложность **O(n)**. В эксперименте:
- Время поиска в списке (~0.007 с) на порядок больше, чем в хеш-таблице (0.0011 с) и BST на случайных данных (0.00037 с).
- При увеличении объёма данных эта разница будет только расти.
- Вставка в список также относительно медленна (0.11 с), так как требует прохода до конца (хотя обновление существующего имени выполняется быстрее, но в тесте все имена уникальны, поэтому каждая вставка проходит весь список).
### 3.4. Сравнение удаления
- **Связный список**: удаление требует сначала найти элемент (O(n)), затем переставить ссылки (O(1)). Время удаления (0.00065 с) близко ко времени поиска, что логично.
- **Хеш-таблица**: удаление выполняется за O(1) в среднем сначала определяется корзина, затем из короткого списка удаляется элемент. Время удаления (0.0000850.00014 с) значительно меньше, чем в списке.
- **BST**: на случайных данных удаление очень быстрое (0.000053 с) благодаря логарифмической высоте. На отсортированных данных время возрастает до 0.00268 с (в 50 раз), что отражает деградацию до O(n).
## 4. Выводы и рекомендации по выбору структуры
На основе полученных результатов можно сформулировать следующие рекомендации:
- **Хеш-таблица** оптимальный выбор, если требуется максимальная скорость поиска, вставки и удаления, а порядок хранения не важен. Примеры: реализация словарей, кэшей, индексов по ключу. В эксперименте хеш-таблица показала стабильно высокую производительность во всех режимах.
- **Двоичное дерево поиска** следует применять, когда необходимо получать данные в отсортированном порядке (например, вывод телефонного справочника по алфавиту). Однако важно учитывать, что при поступлении отсортированных данных дерево вырождается, и производительность резко падает. В таких случаях лучше использовать сбалансированные деревья (AVL, красно-чёрные). В эксперименте BST на случайных данных показал отличные результаты, близкие к хеш-таблице, а на отсортированных стал самым медленным.
- **Связный список** практически непригоден для больших объёмов данных из-за линейной сложности основных операций. Может использоваться лишь для очень маленьких коллекций, при частых вставках в начало списка (здесь не рассматривалось) или в учебных целях.
Таким образом, для реальных задач чаще всего выбирают хеш-таблицы или сбалансированные деревья в зависимости от требований к упорядоченности данных.
I use arch BTW

1
Ezhovnd/425.md Normal file
View File

@ -0,0 +1 @@
hi

0
GorkinMM/425.md Normal file
View File

0
GutovVM/428b.md Normal file
View File

0
KislyuninED/428.md Normal file
View File

0
KolbasovPD/425.md Normal file
View File

0
KorotkinSE/428b.md Normal file
View File

0
KuznetsovMA/429.txt Normal file
View File

1
KuznetsovYuM/428.md Normal file
View File

@ -0,0 +1 @@
428

0
LarikovaAA/428b.md Normal file
View File

0
LukovnikovDE/428.md Normal file
View File

1
MalkinMV/428b.md Normal file
View File

@ -0,0 +1 @@
428b

0
MarkinAM/428b.md Normal file
View File

0
MochalovAE/426.txt Normal file
View File

185
README.md
View File

@ -196,4 +196,187 @@ with open("results.csv", "w", newline="") as f:
- Как удаление работает в каждой структуре. - Как удаление работает в каждой структуре.
* Вывод должен содержать ответ на вопрос: какую структуру и для каких задач (частые вставки, частый поиск, необходимость получать данные в порядке) стоит выбирать в реальной жизни.* * Вывод должен содержать ответ на вопрос: какую структуру и для каких задач (частые вставки, частый поиск, необходимость получать данные в порядке) стоит выбирать в реальной жизни.*
## Задание: Поиск выхода из лабиринта (объектно-ориентированная реализация с паттернами)
### Цель работы
Разработать гибкую, расширяемую программу для загрузки лабиринта из файла, поиска пути от старта до выхода с возможностью выбора алгоритма, визуализации процесса и экспериментального сравнения алгоритмов. В ходе работы необходимо применить минимум 3 паттерна проектирования из списка GoF, обосновать их выбор и продемонстрировать преимущества такой архитектуры.
### Общая схема приложения (пример)
```mermaid
classDiagram
class Maze {
-Cell[] cells
-int width, height
-Cell start
-Cell exit
+getCell(x,y): Cell
+getNeighbors(cell): List~Cell~
}
class Cell {
-int x, y
-bool isWall
-bool isStart
-bool isExit
+isPassable(): bool
}
class MazeBuilder {
<<interface>>
+buildFromFile(filename): Maze
}
class TextFileMazeBuilder {
+buildFromFile(filename): Maze
}
class PathFindingStrategy {
<<interface>>
+findPath(maze, start, exit): List~Cell~
}
class BFSStrategy
class DFSStrategy
class AStarStrategy
class DijkstraStrategy
class SearchStats {
+timeMs: float
+visitedCells: int
+pathLength: int
}
class MazeSolver {
-Maze maze
-PathFindingStrategy strategy
+setStrategy(strategy)
+solve(): SearchStats
}
class Command {
<<interface>>
+execute()
+undo()
}
class MoveCommand {
-Player player
-Direction dir
-Cell previousCell
+execute()
+undo()
}
class Player {
-Cell currentCell
+moveTo(cell)
}
class Observer {
<<interface>>
+update(event)
}
class ConsoleView {
+update(event)
+render(maze, player, path)
}
MazeBuilder <|.. TextFileMazeBuilder
MazeBuilder --> Maze : creates
PathFindingStrategy <|.. BFSStrategy
PathFindingStrategy <|.. DFSStrategy
PathFindingStrategy <|.. AStarStrategy
PathFindingStrategy <|.. DijkstraStrategy
MazeSolver --> PathFindingStrategy : uses
MazeSolver --> Maze : uses
Command <|.. MoveCommand
MoveCommand --> Player
Player --> Cell
Observer <|.. ConsoleView
MazeSolver --> Observer : notifies
```
### Выполнение
#### Этап 1. Модель лабиринта (без паттернов, просто классы)
**Задача:** Создать классы `Cell` и `Maze`, которые представляют карту лабиринта.
- `Cell` хранит координаты (x, y), флаги `isWall`, `isStart`, `isExit`, метод `isPassable()` (возвращает `True` для прохода, если не стена).
- `Maze` хранит двумерный массив клеток, ширину, высоту, ссылки на стартовую и выходную клетку. Методы: `getCell(x, y)`, `getNeighbors(cell)` возвращает список соседних проходимых клеток (вверх, вниз, влево, вправо, если в пределах границ и не стена).
**Результат:** Лабиринт можно создать вручную в коде, но загрузку пока не делаем.
#### Этап 2. Загрузка лабиринта из файла применение паттерна **Builder**
**Задача:** Реализовать загрузку лабиринта из текстового файла, где `#` стена, ` ` (пробел) проход, `S` старт, `E` выход.
- Создать интерфейс `MazeBuilder` с методом `buildFromFile(filename)`.
- Реализовать класс `TextFileMazeBuilder`, который читает файл, парсит символы, создаёт объекты `Cell`, задаёт координаты и флаги, после чего возвращает готовый `Maze`.
Процесс построения лабиринта сложный (парсинг, валидация, установка старта/выхода). Builder скрывает детали создания от клиента. В будущем можно легко добавить другой формат (например, JSON или бинарный) через новую реализацию `MazeBuilder`.
#### Этап 3. Стратегии поиска пути паттерн **Strategy**
**Задача:** Реализовать семейство алгоритмов поиска пути от старта до выхода.
- Создать интерфейс `PathFindingStrategy` с методом `findPath(maze, start, exit)`, возвращающим список клеток пути (от старта до выхода включительно) или пустой список, если пути нет.
- Реализовать минимум 3 стратегии:
- **BFS** (поиск в ширину) гарантирует кратчайший путь по количеству шагов.
- **DFS** (поиск в глубину) быстрый, но не обязательно кратчайший.
- **A*** (с эвристикой, например, манхэттенское расстояние) компромисс между скоростью и оптимальностью.
- (Опционально) **Дейкстра** полезна для взвешенных лабиринтов, но в базовом варианте все шаги имеют вес 1, тогда она совпадает с BFS.
Каждая стратегия возвращает путь. Для BFS/DFS используйте очередь/стек, для A* приоритетную очередь (heapq). Важно: алгоритмы не должны модифицировать сам лабиринт, только читать состояние клеток.
Strategy позволяет легко переключать алгоритмы во время выполнения, не меняя код остальной программы. Новый алгоритм можно добавить, реализовав интерфейс.
#### Этап 4. Класс-оркестратор **MazeSolver** (использует Strategy)
**Задача:** Создать класс, который принимает лабиринт и стратегию, выполняет поиск и собирает статистику.
- `MazeSolver` содержит поля `maze` и `strategy`.
- Метод `setStrategy(strategy)` для динамической смены алгоритма.
- Метод `solve()` вызывает `strategy.findPath(...)` и возвращает объект `SearchStats` (время выполнения в миллисекундах, количество посещённых клеток, длина найденного пути).
- Для замера времени используйте `time.perf_counter()` до и после вызова стратегии.
#### Этап 5. Визуализация и пошаговое управление паттерны **Observer** и **Command** (по желанию)
**5.1. Наблюдатель (Observer)** обновление консольного интерфейса.
- Создать интерфейс `Observer` с методом `update(event)`, где `event` может быть строкой или объектом с типом события (`"path_found"`, `"move"`, `"maze_loaded"`).
- Реализовать класс `ConsoleView`, который отображает лабиринт, текущее положение игрока (если реализован пошаговый режим) и найденный путь. Метод `render(maze, player_position, path)` рисует карту в консоли.
- `MazeSolver` (или отдельный контроллер) может иметь список наблюдателей и уведомлять их при изменении состояния.
**5.2. Команда (Command)** для пошагового перемещения игрока по найденному пути (или ручного управления).
- Создать интерфейс `Command` с методами `execute()` и `undo()`.
- Реализовать `MoveCommand`, который принимает игрока (`Player`), направление и изменяет его позицию, сохраняя предыдущую для отмены.
- Создать класс `Player`, хранящий текущую клетку.
- Консольное меню позволяет вводить команды (W/A/S/D), выполнять `MoveCommand`, при необходимости отменять последний ход (Ctrl+Z). Это опционально, но очень наглядно демонстрирует паттерн.
*Observer можно реализовать только для вывода сообщений о начале/конце поиска, а Command для демонстрации undo при ручном исследовании лабиринта.*
#### Этап 6. Экспериментальная часть (аналогично заданию со структурами данных)
**Задача:** Сравнить эффективность реализованных стратегий на лабиринтах разной сложности.
1. **Подготовка тестовых лабиринтов:**
- Маленький (10×10) с простым путём.
- Средний (50×50) с тупиками.
- Большой (100×100) с запутанной структурой.
- «Пустой» лабиринт (без стен) для демонстрации максимальной производительности.
- «Без выхода» чтобы проверить обработку отсутствия пути.
2. **Замеры:**
- Для каждого лабиринта и каждой стратегии запустить `solve()` 510 раз, усреднить время, количество посещённых клеток, длину пути.
- Записать результаты в CSV: `лабиринт,стратегия,время_мс,посещено_клеток,длина_пути`.
3. **Анализ:**
- Построить графики для каждого лабиринта.
- Проанализировать и написать выводы по итогам (эффективность того или иного алгоритма в разных случаях).
4. **Дополнительное задание:** Реализовать взвешенные клетки (например, болото вес 3, песок вес 2, асфальт вес 1) и сравнить Дейкстру с A* на взвешенном графе.
#### Этап 7. Отчёт
**Структура отчёта:**
1. Описание задачи и выбранных паттернов (с диаграммой классов из Mermaid).
2. Листинги ключевых классов (можно выборочно) или ссылка на репозиторий.
3. Результаты экспериментов (таблицы, графики).
4. Анализ эффективности алгоритмов и применимости паттернов.
5. Выводы: как ООП и паттерны помогли сделать код гибким и расширяемым. Что было бы сложно изменить без них.
### Советы
- Для A* самая простая эвристика: `abs(x1 - x2) + abs(y1 - y2)`.
- При поиске пути надо хранить предшественников (`parent` для каждой посещённой клетки), чтобы восстановить путь.
- Для BFS/DFS используй `deque` (очередь) и `list` (стек).
- Визуализацию в консоли можно сделать с помощью `os.system('cls' if os.name == 'nt' else 'clear')` для перерисовки.

0
SavelevMI/428.md Normal file
View File

0
ShulpinIN/428.md Normal file
View File

0
Smirnovvs/428.txt Normal file
View File

0
SobolevNS/426 Normal file
View File

0
SokolovEN/426 Normal file
View File

0
SokolovNE/428b.md.txt Normal file
View File

0
SolovevDD/425.md Normal file
View File

1
SorokinAD/428.md Normal file
View File

@ -0,0 +1 @@
1

0
VarnakovAA/429.md Normal file
View File

0
VildyaevAV/426 Normal file
View File

0
ZhuravlevDV/425.txt Normal file
View File

0
agafonovdm/425.txt Normal file
View File

0
dyachenkoas/428 Normal file
View File

0
famutdinovmd/428b.md Normal file
View File

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

0
kalinovskiymi/428 Normal file
View File

1
kuznetsovTD/428b.md Normal file
View File

@ -0,0 +1 @@
428b.md

View File

@ -1,498 +0,0 @@
import random as rnd
import time
import csv
import matplotlib.pyplot as plt
#############################################################################################
def sort_list(name_list):
l = len(name_list)
for i in range(l - 1):
for j in range(l - i - 1):
if name_list[j][0] > name_list[j + 1][0]:
name_list[j], name_list[j + 1] = name_list[j + 1], name_list[j]
return name_list
def hash_key(name):
h_key = sum(ord(ch) for ch in name)
return h_key
def create_name_phone(i):
name = f"User_{i:03d}"
phone = f"{rnd.randint(100, 999)}-{rnd.randint(100, 999)}"
return (name, phone)
def file_insert(results):
with open("results.csv", "w", encoding = "utf-8-sig", newline = "") as file:
writer = csv.writer(file)
writer.writerows(results)
def drow(time, color_fun):
x = []
y = []
for key in time:
x.append(key)
y.append(time[key] * 1000)
plt.plot(x, y, marker = ".", color = color_fun, markersize = 2, alpha = 0.9)
###########################################################################################################################
def ll_insert(head, name, phone):
next_node = {'name': name, 'phone': phone, 'next': None}
if head is None: return next_node
running = head
while running is not None:
if running['name'] == name:
running['phone'] = phone
return head
running = running['next']
running = head
while running['next'] is not None: running = running['next']
running['next'] = next_node
return head
def ll_find(head, name):
running = head
while True:
if running['name'] == name:
return running['phone']
running = running['next']
if running is None: break
return None
def ll_delete(head, name):
running = head
if running['name'] == name:
return head['next']
while running['next']['name'] != name:
running = running['next']
if running['next']['next'] is None:
if running['next']['name'] != name:
return head
if running['next']['next'] is None:
running['next'] = None
else: running['next'] = running['next']['next']
return head
def ll_list_all(head):
name_list = []
running = head
while running is not None:
name_list.append((running['name'], running['phone']))
running = running['next']
return name_list
################################################################################################################################
def LinkedList(head, phone_book):
start_insert = time.perf_counter()
for i in range(len(phone_book)):
head = ll_insert(head, phone_book[i][0], phone_book[i][1])
#print(head)
end_insert = time.perf_counter()
time_insert = end_insert - start_insert
start_find = time.perf_counter()
for _ in range(100):
name = create_name_phone(rnd.randint(0, 999))[0]
phone = ll_find(head, name)
#print(name, ":", phone)
end_find = time.perf_counter()
time_find = end_find - start_find
start_delete = time.perf_counter()
for i in range(110):
if i <= 99: name = f"User_{rnd.randint(0,999):03d}"
else: name = f"None_{i:03d}"
head = ll_delete(head, name)
end_delete = time.perf_counter()
time_delete = end_delete - start_delete
start_list = time.perf_counter()
name_list = sort_list(ll_list_all(head))
#print(*name_list)
end_list = time.perf_counter()
time_list = end_list - start_list
return (time_insert, time_find, time_delete, time_list)
#########################################################################################################
def ht_insert(buckest, name, phone):
index = hash_key(name) % len(buckest)
for i, (Name, Phone) in enumerate(buckest[index]):
if Name == name:
buckest[index][i] = (name, phone)
return buckest
buckest[index].append((name, phone))
return buckest
def ht_find(buckest, name):
index = hash_key(name) % len(buckest)
for (Name, Phone) in buckest[index]:
if Name == name:
return Phone
return None
def ht_list_all(buckest):
name_list = []
for index in range(len(buckest)):
for i, (name, phone) in enumerate(buckest[index]):
name_list.append((name, phone))
name_list = sort_list(name_list)
return name_list
def ht_delete(buckest, name):
index = hash_key(name) % len(buckest)
for i, (Name, Phone) in enumerate(buckest[index]):
if Name == name:
del buckest[index][i]
return buckest
####################################################################################################
def HashTable(buckest, phone_book):
start_insert = time.perf_counter()
for i in range(len(phone_book)):
buckest = ht_insert(buckest, phone_book[i][0], phone_book[i][1])
#print(buckest)
end_insert = time.perf_counter()
time_insert = end_insert - start_insert
start_find = time.perf_counter()
for _ in range(100):
name = create_name_phone(rnd.randint(0, 999))[0]
phone = ht_find(buckest, name)
#print(name, ":", phone)
end_find = time.perf_counter()
time_find = end_find - start_find
start_delete = time.perf_counter()
for i in range(110):
if i <= 99: name = f"User_{rnd.randint(0,999):03d}"
else: name = f"None_{i:03d}"
buckest = ht_delete(buckest, name)
end_delete = time.perf_counter()
time_delete = end_delete - start_delete
start_list = time.perf_counter()
name_list = sort_list(ht_list_all(buckest))
#print(*name_list)
end_list = time.perf_counter()
time_list = end_list - start_list
return (time_insert, time_find, time_delete, time_list)
#################################################################################################
def bst_insert(root, name, phone):
running = root
if running is None:
root = {'name': name, 'phone': phone, 'left': None, 'right': None}
return root
while True:
node = hash_key(running['name'])
sheet = hash_key(name)
if node < sheet:
if running['right'] is None:
running['right'] = {'name': name, 'phone': phone, 'left': None, 'right': None}
return root
running = running['right']
elif node > sheet:
if running['left'] is None:
running['left'] = {'name': name, 'phone': phone, 'left': None, 'right': None}
return root
running = running['left']
else:
running['phone'] = phone
return root
def bst_find(root, name):
running = root
while running is not None:
node = hash_key(running['name'])
sheet = hash_key(name)
if name == running['name']:
return running['phone']
elif node < sheet:
running = running['right']
else:
running = running['left']
return None
def bst_list_all(root, name_list = []):
if root is None:
return
name_list.append((root['name'], root['phone']))
bst_list_all(root['left'], name_list)
bst_list_all(root['right'], name_list)
name_list = sort_list(name_list)
return name_list
def bst_delete(root, name):
if root is None:
return None
if hash_key(name) < hash_key(root['name']):
root['left'] = bst_delete(root['left'], name)
elif hash_key(name) > hash_key(root['name']):
root['right'] = bst_delete(root['right'], name)
else:
if root['left'] is None and root['right'] is None:
return None
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 BinarySearchTree(root, phone_book):
start_insert = time.perf_counter()
for i in range(len(phone_book)):
root = bst_insert(root, phone_book[i][0], phone_book[i][1])
#print(buckest)
end_insert = time.perf_counter()
time_insert = end_insert - start_insert
start_find = time.perf_counter()
for _ in range(100):
name = create_name_phone(rnd.randint(0, 999))[0]
phone = bst_find(root, name)
#print(name, ":", phone)
end_find = time.perf_counter()
time_find = end_find - start_find
start_delete = time.perf_counter()
for i in range(110):
if i <= 99: name = f"User_{rnd.randint(0,999):03d}"
else: name = f"None_{i:03d}"
root = bst_delete(root, name)
end_delete = time.perf_counter()
time_delete = end_delete - start_delete
start_list = time.perf_counter()
name_list = sort_list(bst_list_all(root))
#print(*name_list)
end_list = time.perf_counter()
time_list = end_list - start_list
return (time_insert, time_find, time_delete, time_list)
################################################################################################
def main():
phone_book = []
for i in range(1000):
phone_book.append(create_name_phone(i))
for _ in range(9000):
phone_book.append(create_name_phone(rnd.randint(0, 999)))
phone_book_not_sorted = phone_book.copy()
rnd.shuffle(phone_book_not_sorted)
phone_book_sorted = phone_book.copy()
phone_book_sorted = sort_list(phone_book_sorted)
replay = 10
Time_ll_not_sorted = []
Time_ll_sorted = []
Time_average_ll_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
Time_average_ll_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
print("============================================ TESTING LINKEDLIST =====================================\n")
print('Not sorted: ')
for _ in range(replay):
time_ll_not_sorted = LinkedList(None, phone_book_not_sorted)
Time_ll_not_sorted.append({'insert': time_ll_not_sorted[0], 'find': time_ll_not_sorted[1], 'delete': time_ll_not_sorted[2], 'list': time_ll_not_sorted[3]})
for i, key in enumerate(Time_average_ll_not_sorted):
Time_average_ll_not_sorted[key] += time_ll_not_sorted[i]/replay
for i in range(replay):
print(Time_ll_not_sorted[i])
print("Average:", Time_average_ll_not_sorted, "\n\n")
print('Sorted:')
for _ in range(replay):
time_ll_sorted = LinkedList(None, phone_book_sorted)
Time_ll_sorted.append({'insert': time_ll_sorted[0], 'find': time_ll_sorted[1], 'delete': time_ll_sorted[2], 'list': time_ll_sorted[3]})
for i, key in enumerate(Time_average_ll_sorted):
Time_average_ll_sorted[key] += time_ll_sorted[i]/replay
for i in range(replay):
print(Time_ll_not_sorted[i])
print("Average:", Time_average_ll_sorted, "\n\n")
Time_ht_not_sorted = []
Time_ht_sorted = []
Time_average_ht_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
Time_average_ht_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
print("============================================ TESTING HASHTABLE =====================================\n")
print('Not sorted: ')
for _ in range(replay):
time_ht_not_sorted = HashTable([[] for _ in range(100)], phone_book_not_sorted)
Time_ht_not_sorted.append({'insert': time_ht_not_sorted[0], 'find': time_ht_not_sorted[1], 'delete': time_ht_not_sorted[2], 'list': time_ht_not_sorted[3]})
for i, key in enumerate(Time_average_ht_not_sorted):
Time_average_ht_not_sorted[key] += time_ht_not_sorted[i]/replay
for i in range(replay):
print(Time_ht_not_sorted[i])
print(f"Average: {Time_average_ht_not_sorted}\n\n")
print('Sorted: ')
for _ in range(replay):
time_ht_sorted = HashTable([[] for _ in range(100)], phone_book_sorted)
Time_ht_sorted.append({'insert': time_ht_sorted[0], 'find': time_ht_sorted[1], 'delete': time_ht_sorted[2], 'list': time_ht_sorted[3]})
for i, key in enumerate(Time_average_ht_sorted):
Time_average_ht_sorted[key] += time_ht_sorted[i]/replay
for i in range(replay):
print(Time_ht_sorted[i])
print(f"Average: {Time_average_ht_sorted}\n\n")
Time_bst_not_sorted = []
Time_bst_sorted = []
Time_average_bst_not_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
Time_average_bst_sorted = {'insert': 0, 'find': 0, 'delete': 0, 'list': 0}
print("============================================ TESTING BINARYSEARCHTREE =====================================\n")
print('Not sorted: ')
for _ in range(replay):
time_bst_not_sorted = BinarySearchTree(None, phone_book_not_sorted)
Time_bst_not_sorted.append({'insert': time_bst_not_sorted[0], 'find': time_bst_not_sorted[1], 'delete': time_bst_not_sorted[2], 'list': time_bst_not_sorted[3]})
for i, key in enumerate(Time_average_bst_not_sorted):
Time_average_bst_not_sorted[key] += time_bst_not_sorted[i]/replay
for i in range(replay):
print(Time_bst_not_sorted[i])
print(f"Average: {Time_average_bst_not_sorted}\n\n")
print('Sorted: ')
for _ in range(replay):
time_bst_sorted = BinarySearchTree(None, phone_book_sorted)
Time_bst_sorted.append({'insert': time_bst_sorted[0], 'find': time_bst_sorted[1], 'delete': time_bst_sorted[2], 'list': time_bst_sorted[3]})
for i, key in enumerate(Time_average_bst_sorted):
Time_average_bst_sorted[key] += time_bst_sorted[i]/replay
for i in range(replay):
print(Time_bst_sorted[i])
print(f"Average: {Time_average_bst_sorted}\n\n")
print("=============================================== END TESTING ================================================")
results = [["Структура", "Режим", "Операция", "Время(мс)"]]
for i in range(replay):
results.append(["LinkedList", "Случайный", "вставка", Time_ll_not_sorted[i]["insert"]])
results.append(["LinkedList", "Случайный", "поиск", Time_ll_not_sorted[i]["find"]])
results.append(["LinkedList", "Случайный", "удаление", Time_ll_not_sorted[i]["delete"]])
results.append(["LinkedList", "Случайный", "формирование списка", Time_ll_not_sorted[i]["list"]])
results.append(["LinkedList", "Упорядоченный", "вставка", Time_ll_sorted[i]["insert"]])
results.append(["LinkedList", "Упорядоченный", "поиск", Time_ll_sorted[i]["find"]])
results.append(["LinkedList", "Упорядоченный", "удаление", Time_ll_sorted[i]["delete"]])
results.append(["LinkedList", "Упорядоченный", "формирование списка", Time_ll_sorted[i]["list"]])
for i in range(replay):
results.append(["HashTable", "Случайный", "вставка", Time_ht_not_sorted[i]["insert"]])
results.append(["HashTable", "Случайный", "поиск", Time_ht_not_sorted[i]["find"]])
results.append(["HashTable", "Случайный", "удаление", Time_ht_not_sorted[i]["delete"]])
results.append(["HashTable", "Случайный", "формирование списка", Time_ht_not_sorted[i]["list"]])
results.append(["HashTable", "Упорядоченный", "вставка", Time_ht_sorted[i]["insert"]])
results.append(["HashTable", "Упорядоченный", "поиск", Time_ht_sorted[i]["find"]])
results.append(["HashTable", "Упорядоченный", "удаление", Time_ht_sorted[i]["delete"]])
results.append(["HashTable", "Упорядоченный", "формирование списка", Time_ht_sorted[i]["list"]])
for i in range(replay):
results.append(["BinarySearchTree", "Случайный", "вставка", Time_bst_not_sorted[i]["insert"]])
results.append(["BinarySearchTree", "Случайный", "поиск", Time_bst_not_sorted[i]["find"]])
results.append(["BinarySearchTree", "Случайный", "удаление", Time_bst_not_sorted[i]["delete"]])
results.append(["BinarySearchTree", "Случайный", "формирование списка", Time_bst_not_sorted[i]["list"]])
results.append(["BinarySearchTree", "Упорядоченный", "вставка", Time_bst_sorted[i]["insert"]])
results.append(["BinarySearchTree", "Упорядоченный", "поиск", Time_bst_sorted[i]["find"]])
results.append(["BinarySearchTree", "Упорядоченный", "удаление", Time_bst_sorted[i]["delete"]])
results.append(["BinarySearchTree", "Упорядоченный", "формирование списка", Time_bst_sorted[i]["list"]])
for i in range(1, len(results) - 1):
results[i][3] *= 1000
file_insert(results)
plt.figure(figsize = (16, 9))
plt.xlabel("Операция")
plt.ylabel("Время мс")
drow(Time_average_ll_not_sorted, "blue")
drow(Time_average_ll_sorted, "green")
drow(Time_average_ht_not_sorted, "#FF8800")
drow(Time_average_ht_sorted, "#FF0000")
drow(Time_average_bst_not_sorted, "#464219")
drow(Time_average_bst_sorted, "#FBFF00")
text = """
синий - LinkedList (not sorted) ораньжевый - HashTable (not sorted) коричневый - BST (not sorted)
зеленый - LinkedList (sorted) красный - HashTable (sorted) желтый - BST (sorted)
"""
# plt.subplots_adjust(bottom =0.3)
plt.figtext(0.1, 0.02, text, wrap = True, fontsize = 9, va = 'bottom')
plt.savefig("time_schedule.png")
plt.show()
if __name__ == "__main__":
main()

View File

@ -1,241 +0,0 @@
Структура,Режим,Операция,Время(мс)
LinkedList,Случайный,вставка,311.8601000023773
LinkedList,Случайный,поиск,3.0993999971542507
LinkedList,Случайный,удаление,6.629099996644072
LinkedList,Случайный,формирование списка,60.98759999440517
LinkedList,Упорядоченный,вставка,332.72419999411795
LinkedList,Упорядоченный,поиск,3.1196000054478645
LinkedList,Упорядоченный,удаление,5.813899988424964
LinkedList,Упорядоченный,формирование списка,39.0969000000041
LinkedList,Случайный,вставка,333.36899999994785
LinkedList,Случайный,поиск,3.6326999979792163
LinkedList,Случайный,удаление,5.94719999935478
LinkedList,Случайный,формирование списка,68.81969999813009
LinkedList,Упорядоченный,вставка,347.4948999937624
LinkedList,Упорядоченный,поиск,3.69440000213217
LinkedList,Упорядоченный,удаление,6.888300005812198
LinkedList,Упорядоченный,формирование списка,46.8346000125166
LinkedList,Случайный,вставка,309.86330000450835
LinkedList,Случайный,поиск,2.868099996703677
LinkedList,Случайный,удаление,6.037400002242066
LinkedList,Случайный,формирование списка,61.938399987411685
LinkedList,Упорядоченный,вставка,338.7425999972038
LinkedList,Упорядоченный,поиск,3.638499998487532
LinkedList,Упорядоченный,удаление,7.441800000378862
LinkedList,Упорядоченный,формирование списка,39.537500008009374
LinkedList,Случайный,вставка,310.5929000012111
LinkedList,Случайный,поиск,3.468300012173131
LinkedList,Случайный,удаление,7.5059000082546845
LinkedList,Случайный,формирование списка,64.28520000190474
LinkedList,Упорядоченный,вставка,335.0771999976132
LinkedList,Упорядоченный,поиск,3.0857999954605475
LinkedList,Упорядоченный,удаление,6.151499997940846
LinkedList,Упорядоченный,формирование списка,38.384100000257604
LinkedList,Случайный,вставка,333.7921000056667
LinkedList,Случайный,поиск,6.480700001702644
LinkedList,Случайный,удаление,8.09099999605678
LinkedList,Случайный,формирование списка,63.44879999232944
LinkedList,Упорядоченный,вставка,312.329199994565
LinkedList,Упорядоченный,поиск,3.115400002570823
LinkedList,Упорядоченный,удаление,5.880099997739308
LinkedList,Упорядоченный,формирование списка,39.14569999324158
LinkedList,Случайный,вставка,306.0167000076035
LinkedList,Случайный,поиск,3.3414000063203275
LinkedList,Случайный,удаление,6.772799999453127
LinkedList,Случайный,формирование списка,58.58910000824835
LinkedList,Упорядоченный,вставка,317.93599999218713
LinkedList,Упорядоченный,поиск,4.178699993644841
LinkedList,Упорядоченный,удаление,6.598799998755567
LinkedList,Упорядоченный,формирование списка,43.91350000514649
LinkedList,Случайный,вставка,326.0805000027176
LinkedList,Случайный,поиск,3.511100003379397
LinkedList,Случайный,удаление,7.0478000125149265
LinkedList,Случайный,формирование списка,65.27820001065265
LinkedList,Упорядоченный,вставка,342.3164999985602
LinkedList,Упорядоченный,поиск,2.997699994011782
LinkedList,Упорядоченный,удаление,6.1990999965928495
LinkedList,Упорядоченный,формирование списка,38.459399991552345
LinkedList,Случайный,вставка,352.4922000069637
LinkedList,Случайный,поиск,3.4684999991441146
LinkedList,Случайный,удаление,6.042299995897338
LinkedList,Случайный,формирование списка,58.957499990356155
LinkedList,Упорядоченный,вставка,336.49819999118336
LinkedList,Упорядоченный,поиск,4.811599996173754
LinkedList,Упорядоченный,удаление,7.25540000712499
LinkedList,Упорядоченный,формирование списка,42.60240000439808
LinkedList,Случайный,вставка,335.7185000058962
LinkedList,Случайный,поиск,3.1072999991010875
LinkedList,Случайный,удаление,7.647199992788956
LinkedList,Случайный,формирование списка,61.90960000094492
LinkedList,Упорядоченный,вставка,348.60630000184756
LinkedList,Упорядоченный,поиск,3.2524999987799674
LinkedList,Упорядоченный,удаление,7.037800009129569
LinkedList,Упорядоченный,формирование списка,45.27720001351554
LinkedList,Случайный,вставка,349.1418000048725
LinkedList,Случайный,поиск,3.576899995096028
LinkedList,Случайный,удаление,6.985800006077625
LinkedList,Случайный,формирование списка,61.900600005174056
LinkedList,Упорядоченный,вставка,341.29359999496955
LinkedList,Упорядоченный,поиск,3.3715000026859343
LinkedList,Упорядоченный,удаление,5.9412999980850145
LinkedList,Упорядоченный,формирование списка,39.60160000133328
HashTable,Случайный,вставка,36.995000002207235
HashTable,Случайный,поиск,0.5348999984562397
HashTable,Случайный,удаление,0.5553000082727522
HashTable,Случайный,формирование списка,92.14980000979267
HashTable,Упорядоченный,вставка,38.21459999016952
HashTable,Упорядоченный,поиск,0.5354000022634864
HashTable,Упорядоченный,удаление,0.5906000005779788
HashTable,Упорядоченный,формирование списка,88.85620000364725
HashTable,Случайный,вставка,32.90600000764243
HashTable,Случайный,поиск,0.575300000491552
HashTable,Случайный,удаление,0.5553999944822863
HashTable,Случайный,формирование списка,88.85440000449307
HashTable,Упорядоченный,вставка,34.381400007987395
HashTable,Упорядоченный,поиск,0.5379000067478046
HashTable,Упорядоченный,удаление,0.5721999914385378
HashTable,Упорядоченный,формирование списка,99.7819000040181
HashTable,Случайный,вставка,32.61900000507012
HashTable,Случайный,поиск,0.5061999981990084
HashTable,Случайный,удаление,0.5795999895781279
HashTable,Случайный,формирование списка,99.24530000716913
HashTable,Упорядоченный,вставка,33.648600001470186
HashTable,Упорядоченный,поиск,0.5078999965917319
HashTable,Упорядоченный,удаление,0.5576999974437058
HashTable,Упорядоченный,формирование списка,95.2331000007689
HashTable,Случайный,вставка,35.18770000664517
HashTable,Случайный,поиск,0.5262999911792576
HashTable,Случайный,удаление,0.5527000030269846
HashTable,Случайный,формирование списка,94.51690000423696
HashTable,Упорядоченный,вставка,32.084099992061965
HashTable,Упорядоченный,поиск,0.5337000038707629
HashTable,Упорядоченный,удаление,0.5661999894073233
HashTable,Упорядоченный,формирование списка,92.34840000863187
HashTable,Случайный,вставка,32.56010000768583
HashTable,Случайный,поиск,0.8410000009462237
HashTable,Случайный,удаление,0.9258000063709915
HashTable,Случайный,формирование списка,100.2130999986548
HashTable,Упорядоченный,вставка,35.40219999558758
HashTable,Упорядоченный,поиск,0.5304999940562993
HashTable,Упорядоченный,удаление,0.5839999939780682
HashTable,Упорядоченный,формирование списка,89.48920000693761
HashTable,Случайный,вставка,32.839099992997944
HashTable,Случайный,поиск,0.5260000034468248
HashTable,Случайный,удаление,0.5661000031977892
HashTable,Случайный,формирование списка,94.66200000315439
HashTable,Упорядоченный,вставка,33.16459999768995
HashTable,Упорядоченный,поиск,0.5823999963467941
HashTable,Упорядоченный,удаление,0.6093999982113019
HashTable,Упорядоченный,формирование списка,96.02349999477156
HashTable,Случайный,вставка,34.824300004402176
HashTable,Случайный,поиск,0.6218999915290624
HashTable,Случайный,удаление,0.6026000046404079
HashTable,Случайный,формирование списка,116.66119999426883
HashTable,Упорядоченный,вставка,37.25999999733176
HashTable,Упорядоченный,поиск,0.5453000048873946
HashTable,Упорядоченный,удаление,0.5864999984623864
HashTable,Упорядоченный,формирование списка,89.71509999537375
HashTable,Случайный,вставка,40.50240000651684
HashTable,Случайный,поиск,0.8645000052638352
HashTable,Случайный,удаление,0.90230000205338
HashTable,Случайный,формирование списка,90.88490001158789
HashTable,Упорядоченный,вставка,31.434000004082918
HashTable,Упорядоченный,поиск,0.5355000030249357
HashTable,Упорядоченный,удаление,0.6349000032059848
HashTable,Упорядоченный,формирование списка,87.44309999747202
HashTable,Случайный,вставка,33.64940000756178
HashTable,Случайный,поиск,0.8600000001024455
HashTable,Случайный,удаление,0.7679999980609864
HashTable,Случайный,формирование списка,94.88509999937378
HashTable,Упорядоченный,вставка,31.084599992027506
HashTable,Упорядоченный,поиск,0.5097999965073541
HashTable,Упорядоченный,удаление,0.5652999971061945
HashTable,Упорядоченный,формирование списка,89.97830000589602
HashTable,Случайный,вставка,34.94059998774901
HashTable,Случайный,поиск,0.5363999953260645
HashTable,Случайный,удаление,0.9123000054387376
HashTable,Случайный,формирование списка,96.32379999675322
HashTable,Упорядоченный,вставка,32.151399995200336
HashTable,Упорядоченный,поиск,0.5317000031936914
HashTable,Упорядоченный,удаление,0.5829000001540408
HashTable,Упорядоченный,формирование списка,93.51580000657123
BinarySearchTree,Случайный,вставка,102.40699999849312
BinarySearchTree,Случайный,поиск,1.3612000038847327
BinarySearchTree,Случайный,удаление,1.1245999921811745
BinarySearchTree,Случайный,формирование списка,0.023999993572942913
BinarySearchTree,Упорядоченный,вставка,316.0647000040626
BinarySearchTree,Упорядоченный,поиск,3.1904000061331317
BinarySearchTree,Упорядоченный,удаление,3.3792000031098723
BinarySearchTree,Упорядоченный,формирование списка,1.6973000019788742
BinarySearchTree,Случайный,вставка,91.03359999426175
BinarySearchTree,Случайный,поиск,1.371799997286871
BinarySearchTree,Случайный,удаление,1.2165999942226335
BinarySearchTree,Случайный,формирование списка,0.024100008886307478
BinarySearchTree,Упорядоченный,вставка,347.1241000079317
BinarySearchTree,Упорядоченный,поиск,4.274999999324791
BinarySearchTree,Упорядоченный,удаление,2.4944999895524234
BinarySearchTree,Упорядоченный,формирование списка,0.8478999952785671
BinarySearchTree,Случайный,вставка,92.06209999683779
BinarySearchTree,Случайный,поиск,1.3248000032035634
BinarySearchTree,Случайный,удаление,1.3013999996474013
BinarySearchTree,Случайный,формирование списка,0.05079999391455203
BinarySearchTree,Упорядоченный,вставка,332.4990999972215
BinarySearchTree,Упорядоченный,поиск,3.3688999974401668
BinarySearchTree,Упорядоченный,удаление,3.079799993429333
BinarySearchTree,Упорядоченный,формирование списка,1.447100003133528
BinarySearchTree,Случайный,вставка,94.18839999125339
BinarySearchTree,Случайный,поиск,2.256499996292405
BinarySearchTree,Случайный,удаление,1.2769000022672117
BinarySearchTree,Случайный,формирование списка,0.12320000678300858
BinarySearchTree,Упорядоченный,вставка,335.0482999958331
BinarySearchTree,Упорядоченный,поиск,4.005399998277426
BinarySearchTree,Упорядоченный,удаление,2.4089999933494255
BinarySearchTree,Упорядоченный,формирование списка,1.9695999944815412
BinarySearchTree,Случайный,вставка,101.12979999394156
BinarySearchTree,Случайный,поиск,1.4136999961920083
BinarySearchTree,Случайный,удаление,1.236700001754798
BinarySearchTree,Случайный,формирование списка,0.27800000680144876
BinarySearchTree,Упорядоченный,вставка,333.7679999967804
BinarySearchTree,Упорядоченный,поиск,4.243799994583242
BinarySearchTree,Упорядоченный,удаление,3.14470000739675
BinarySearchTree,Упорядоченный,формирование списка,2.2033999994164333
BinarySearchTree,Случайный,вставка,101.16009999183007
BinarySearchTree,Случайный,поиск,2.0936999935656786
BinarySearchTree,Случайный,удаление,2.1564000053331256
BinarySearchTree,Случайный,формирование списка,0.4315999976824969
BinarySearchTree,Упорядоченный,вставка,329.3697999906726
BinarySearchTree,Упорядоченный,поиск,3.3687999966787174
BinarySearchTree,Упорядоченный,удаление,2.4997000000439584
BinarySearchTree,Упорядоченный,формирование списка,1.727099996060133
BinarySearchTree,Случайный,вставка,99.00390000257175
BinarySearchTree,Случайный,поиск,1.3448000099742785
BinarySearchTree,Случайный,удаление,1.1521000124048442
BinarySearchTree,Случайный,формирование списка,0.5104000010760501
BinarySearchTree,Упорядоченный,вставка,332.7874999959022
BinarySearchTree,Упорядоченный,поиск,4.331000003730878
BinarySearchTree,Упорядоченный,удаление,2.853600002708845
BinarySearchTree,Упорядоченный,формирование списка,3.774099997826852
BinarySearchTree,Случайный,вставка,94.74190000037197
BinarySearchTree,Случайный,поиск,1.352399995084852
BinarySearchTree,Случайный,удаление,1.2611999991349876
BinarySearchTree,Случайный,формирование списка,0.8051000040723011
BinarySearchTree,Упорядоченный,вставка,338.8535999984015
BinarySearchTree,Упорядоченный,поиск,3.4047999943140894
BinarySearchTree,Упорядоченный,удаление,2.4553999974159524
BinarySearchTree,Упорядоченный,формирование списка,3.5234999959357083
BinarySearchTree,Случайный,вставка,91.76830000069458
BinarySearchTree,Случайный,поиск,1.3421000039670616
BinarySearchTree,Случайный,удаление,1.4171999937389046
BinarySearchTree,Случайный,формирование списка,1.0964999964926392
BinarySearchTree,Упорядоченный,вставка,332.47900000424124
BinarySearchTree,Упорядоченный,поиск,3.157399987685494
BinarySearchTree,Упорядоченный,удаление,6.078400008846074
BinarySearchTree,Упорядоченный,формирование списка,4.061100000399165
BinarySearchTree,Случайный,вставка,90.57990000292193
BinarySearchTree,Случайный,поиск,1.302800010307692
BinarySearchTree,Случайный,удаление,1.117399995564483
BinarySearchTree,Случайный,формирование списка,1.220699996338226
BinarySearchTree,Упорядоченный,вставка,326.30869999411516
BinarySearchTree,Упорядоченный,поиск,3.144999995129183
BinarySearchTree,Упорядоченный,удаление,2.4704999959794804
BinarySearchTree,Упорядоченный,формирование списка,0.0027224000077694654
1 Структура Режим Операция Время(мс)
2 LinkedList Случайный вставка 311.8601000023773
3 LinkedList Случайный поиск 3.0993999971542507
4 LinkedList Случайный удаление 6.629099996644072
5 LinkedList Случайный формирование списка 60.98759999440517
6 LinkedList Упорядоченный вставка 332.72419999411795
7 LinkedList Упорядоченный поиск 3.1196000054478645
8 LinkedList Упорядоченный удаление 5.813899988424964
9 LinkedList Упорядоченный формирование списка 39.0969000000041
10 LinkedList Случайный вставка 333.36899999994785
11 LinkedList Случайный поиск 3.6326999979792163
12 LinkedList Случайный удаление 5.94719999935478
13 LinkedList Случайный формирование списка 68.81969999813009
14 LinkedList Упорядоченный вставка 347.4948999937624
15 LinkedList Упорядоченный поиск 3.69440000213217
16 LinkedList Упорядоченный удаление 6.888300005812198
17 LinkedList Упорядоченный формирование списка 46.8346000125166
18 LinkedList Случайный вставка 309.86330000450835
19 LinkedList Случайный поиск 2.868099996703677
20 LinkedList Случайный удаление 6.037400002242066
21 LinkedList Случайный формирование списка 61.938399987411685
22 LinkedList Упорядоченный вставка 338.7425999972038
23 LinkedList Упорядоченный поиск 3.638499998487532
24 LinkedList Упорядоченный удаление 7.441800000378862
25 LinkedList Упорядоченный формирование списка 39.537500008009374
26 LinkedList Случайный вставка 310.5929000012111
27 LinkedList Случайный поиск 3.468300012173131
28 LinkedList Случайный удаление 7.5059000082546845
29 LinkedList Случайный формирование списка 64.28520000190474
30 LinkedList Упорядоченный вставка 335.0771999976132
31 LinkedList Упорядоченный поиск 3.0857999954605475
32 LinkedList Упорядоченный удаление 6.151499997940846
33 LinkedList Упорядоченный формирование списка 38.384100000257604
34 LinkedList Случайный вставка 333.7921000056667
35 LinkedList Случайный поиск 6.480700001702644
36 LinkedList Случайный удаление 8.09099999605678
37 LinkedList Случайный формирование списка 63.44879999232944
38 LinkedList Упорядоченный вставка 312.329199994565
39 LinkedList Упорядоченный поиск 3.115400002570823
40 LinkedList Упорядоченный удаление 5.880099997739308
41 LinkedList Упорядоченный формирование списка 39.14569999324158
42 LinkedList Случайный вставка 306.0167000076035
43 LinkedList Случайный поиск 3.3414000063203275
44 LinkedList Случайный удаление 6.772799999453127
45 LinkedList Случайный формирование списка 58.58910000824835
46 LinkedList Упорядоченный вставка 317.93599999218713
47 LinkedList Упорядоченный поиск 4.178699993644841
48 LinkedList Упорядоченный удаление 6.598799998755567
49 LinkedList Упорядоченный формирование списка 43.91350000514649
50 LinkedList Случайный вставка 326.0805000027176
51 LinkedList Случайный поиск 3.511100003379397
52 LinkedList Случайный удаление 7.0478000125149265
53 LinkedList Случайный формирование списка 65.27820001065265
54 LinkedList Упорядоченный вставка 342.3164999985602
55 LinkedList Упорядоченный поиск 2.997699994011782
56 LinkedList Упорядоченный удаление 6.1990999965928495
57 LinkedList Упорядоченный формирование списка 38.459399991552345
58 LinkedList Случайный вставка 352.4922000069637
59 LinkedList Случайный поиск 3.4684999991441146
60 LinkedList Случайный удаление 6.042299995897338
61 LinkedList Случайный формирование списка 58.957499990356155
62 LinkedList Упорядоченный вставка 336.49819999118336
63 LinkedList Упорядоченный поиск 4.811599996173754
64 LinkedList Упорядоченный удаление 7.25540000712499
65 LinkedList Упорядоченный формирование списка 42.60240000439808
66 LinkedList Случайный вставка 335.7185000058962
67 LinkedList Случайный поиск 3.1072999991010875
68 LinkedList Случайный удаление 7.647199992788956
69 LinkedList Случайный формирование списка 61.90960000094492
70 LinkedList Упорядоченный вставка 348.60630000184756
71 LinkedList Упорядоченный поиск 3.2524999987799674
72 LinkedList Упорядоченный удаление 7.037800009129569
73 LinkedList Упорядоченный формирование списка 45.27720001351554
74 LinkedList Случайный вставка 349.1418000048725
75 LinkedList Случайный поиск 3.576899995096028
76 LinkedList Случайный удаление 6.985800006077625
77 LinkedList Случайный формирование списка 61.900600005174056
78 LinkedList Упорядоченный вставка 341.29359999496955
79 LinkedList Упорядоченный поиск 3.3715000026859343
80 LinkedList Упорядоченный удаление 5.9412999980850145
81 LinkedList Упорядоченный формирование списка 39.60160000133328
82 HashTable Случайный вставка 36.995000002207235
83 HashTable Случайный поиск 0.5348999984562397
84 HashTable Случайный удаление 0.5553000082727522
85 HashTable Случайный формирование списка 92.14980000979267
86 HashTable Упорядоченный вставка 38.21459999016952
87 HashTable Упорядоченный поиск 0.5354000022634864
88 HashTable Упорядоченный удаление 0.5906000005779788
89 HashTable Упорядоченный формирование списка 88.85620000364725
90 HashTable Случайный вставка 32.90600000764243
91 HashTable Случайный поиск 0.575300000491552
92 HashTable Случайный удаление 0.5553999944822863
93 HashTable Случайный формирование списка 88.85440000449307
94 HashTable Упорядоченный вставка 34.381400007987395
95 HashTable Упорядоченный поиск 0.5379000067478046
96 HashTable Упорядоченный удаление 0.5721999914385378
97 HashTable Упорядоченный формирование списка 99.7819000040181
98 HashTable Случайный вставка 32.61900000507012
99 HashTable Случайный поиск 0.5061999981990084
100 HashTable Случайный удаление 0.5795999895781279
101 HashTable Случайный формирование списка 99.24530000716913
102 HashTable Упорядоченный вставка 33.648600001470186
103 HashTable Упорядоченный поиск 0.5078999965917319
104 HashTable Упорядоченный удаление 0.5576999974437058
105 HashTable Упорядоченный формирование списка 95.2331000007689
106 HashTable Случайный вставка 35.18770000664517
107 HashTable Случайный поиск 0.5262999911792576
108 HashTable Случайный удаление 0.5527000030269846
109 HashTable Случайный формирование списка 94.51690000423696
110 HashTable Упорядоченный вставка 32.084099992061965
111 HashTable Упорядоченный поиск 0.5337000038707629
112 HashTable Упорядоченный удаление 0.5661999894073233
113 HashTable Упорядоченный формирование списка 92.34840000863187
114 HashTable Случайный вставка 32.56010000768583
115 HashTable Случайный поиск 0.8410000009462237
116 HashTable Случайный удаление 0.9258000063709915
117 HashTable Случайный формирование списка 100.2130999986548
118 HashTable Упорядоченный вставка 35.40219999558758
119 HashTable Упорядоченный поиск 0.5304999940562993
120 HashTable Упорядоченный удаление 0.5839999939780682
121 HashTable Упорядоченный формирование списка 89.48920000693761
122 HashTable Случайный вставка 32.839099992997944
123 HashTable Случайный поиск 0.5260000034468248
124 HashTable Случайный удаление 0.5661000031977892
125 HashTable Случайный формирование списка 94.66200000315439
126 HashTable Упорядоченный вставка 33.16459999768995
127 HashTable Упорядоченный поиск 0.5823999963467941
128 HashTable Упорядоченный удаление 0.6093999982113019
129 HashTable Упорядоченный формирование списка 96.02349999477156
130 HashTable Случайный вставка 34.824300004402176
131 HashTable Случайный поиск 0.6218999915290624
132 HashTable Случайный удаление 0.6026000046404079
133 HashTable Случайный формирование списка 116.66119999426883
134 HashTable Упорядоченный вставка 37.25999999733176
135 HashTable Упорядоченный поиск 0.5453000048873946
136 HashTable Упорядоченный удаление 0.5864999984623864
137 HashTable Упорядоченный формирование списка 89.71509999537375
138 HashTable Случайный вставка 40.50240000651684
139 HashTable Случайный поиск 0.8645000052638352
140 HashTable Случайный удаление 0.90230000205338
141 HashTable Случайный формирование списка 90.88490001158789
142 HashTable Упорядоченный вставка 31.434000004082918
143 HashTable Упорядоченный поиск 0.5355000030249357
144 HashTable Упорядоченный удаление 0.6349000032059848
145 HashTable Упорядоченный формирование списка 87.44309999747202
146 HashTable Случайный вставка 33.64940000756178
147 HashTable Случайный поиск 0.8600000001024455
148 HashTable Случайный удаление 0.7679999980609864
149 HashTable Случайный формирование списка 94.88509999937378
150 HashTable Упорядоченный вставка 31.084599992027506
151 HashTable Упорядоченный поиск 0.5097999965073541
152 HashTable Упорядоченный удаление 0.5652999971061945
153 HashTable Упорядоченный формирование списка 89.97830000589602
154 HashTable Случайный вставка 34.94059998774901
155 HashTable Случайный поиск 0.5363999953260645
156 HashTable Случайный удаление 0.9123000054387376
157 HashTable Случайный формирование списка 96.32379999675322
158 HashTable Упорядоченный вставка 32.151399995200336
159 HashTable Упорядоченный поиск 0.5317000031936914
160 HashTable Упорядоченный удаление 0.5829000001540408
161 HashTable Упорядоченный формирование списка 93.51580000657123
162 BinarySearchTree Случайный вставка 102.40699999849312
163 BinarySearchTree Случайный поиск 1.3612000038847327
164 BinarySearchTree Случайный удаление 1.1245999921811745
165 BinarySearchTree Случайный формирование списка 0.023999993572942913
166 BinarySearchTree Упорядоченный вставка 316.0647000040626
167 BinarySearchTree Упорядоченный поиск 3.1904000061331317
168 BinarySearchTree Упорядоченный удаление 3.3792000031098723
169 BinarySearchTree Упорядоченный формирование списка 1.6973000019788742
170 BinarySearchTree Случайный вставка 91.03359999426175
171 BinarySearchTree Случайный поиск 1.371799997286871
172 BinarySearchTree Случайный удаление 1.2165999942226335
173 BinarySearchTree Случайный формирование списка 0.024100008886307478
174 BinarySearchTree Упорядоченный вставка 347.1241000079317
175 BinarySearchTree Упорядоченный поиск 4.274999999324791
176 BinarySearchTree Упорядоченный удаление 2.4944999895524234
177 BinarySearchTree Упорядоченный формирование списка 0.8478999952785671
178 BinarySearchTree Случайный вставка 92.06209999683779
179 BinarySearchTree Случайный поиск 1.3248000032035634
180 BinarySearchTree Случайный удаление 1.3013999996474013
181 BinarySearchTree Случайный формирование списка 0.05079999391455203
182 BinarySearchTree Упорядоченный вставка 332.4990999972215
183 BinarySearchTree Упорядоченный поиск 3.3688999974401668
184 BinarySearchTree Упорядоченный удаление 3.079799993429333
185 BinarySearchTree Упорядоченный формирование списка 1.447100003133528
186 BinarySearchTree Случайный вставка 94.18839999125339
187 BinarySearchTree Случайный поиск 2.256499996292405
188 BinarySearchTree Случайный удаление 1.2769000022672117
189 BinarySearchTree Случайный формирование списка 0.12320000678300858
190 BinarySearchTree Упорядоченный вставка 335.0482999958331
191 BinarySearchTree Упорядоченный поиск 4.005399998277426
192 BinarySearchTree Упорядоченный удаление 2.4089999933494255
193 BinarySearchTree Упорядоченный формирование списка 1.9695999944815412
194 BinarySearchTree Случайный вставка 101.12979999394156
195 BinarySearchTree Случайный поиск 1.4136999961920083
196 BinarySearchTree Случайный удаление 1.236700001754798
197 BinarySearchTree Случайный формирование списка 0.27800000680144876
198 BinarySearchTree Упорядоченный вставка 333.7679999967804
199 BinarySearchTree Упорядоченный поиск 4.243799994583242
200 BinarySearchTree Упорядоченный удаление 3.14470000739675
201 BinarySearchTree Упорядоченный формирование списка 2.2033999994164333
202 BinarySearchTree Случайный вставка 101.16009999183007
203 BinarySearchTree Случайный поиск 2.0936999935656786
204 BinarySearchTree Случайный удаление 2.1564000053331256
205 BinarySearchTree Случайный формирование списка 0.4315999976824969
206 BinarySearchTree Упорядоченный вставка 329.3697999906726
207 BinarySearchTree Упорядоченный поиск 3.3687999966787174
208 BinarySearchTree Упорядоченный удаление 2.4997000000439584
209 BinarySearchTree Упорядоченный формирование списка 1.727099996060133
210 BinarySearchTree Случайный вставка 99.00390000257175
211 BinarySearchTree Случайный поиск 1.3448000099742785
212 BinarySearchTree Случайный удаление 1.1521000124048442
213 BinarySearchTree Случайный формирование списка 0.5104000010760501
214 BinarySearchTree Упорядоченный вставка 332.7874999959022
215 BinarySearchTree Упорядоченный поиск 4.331000003730878
216 BinarySearchTree Упорядоченный удаление 2.853600002708845
217 BinarySearchTree Упорядоченный формирование списка 3.774099997826852
218 BinarySearchTree Случайный вставка 94.74190000037197
219 BinarySearchTree Случайный поиск 1.352399995084852
220 BinarySearchTree Случайный удаление 1.2611999991349876
221 BinarySearchTree Случайный формирование списка 0.8051000040723011
222 BinarySearchTree Упорядоченный вставка 338.8535999984015
223 BinarySearchTree Упорядоченный поиск 3.4047999943140894
224 BinarySearchTree Упорядоченный удаление 2.4553999974159524
225 BinarySearchTree Упорядоченный формирование списка 3.5234999959357083
226 BinarySearchTree Случайный вставка 91.76830000069458
227 BinarySearchTree Случайный поиск 1.3421000039670616
228 BinarySearchTree Случайный удаление 1.4171999937389046
229 BinarySearchTree Случайный формирование списка 1.0964999964926392
230 BinarySearchTree Упорядоченный вставка 332.47900000424124
231 BinarySearchTree Упорядоченный поиск 3.157399987685494
232 BinarySearchTree Упорядоченный удаление 6.078400008846074
233 BinarySearchTree Упорядоченный формирование списка 4.061100000399165
234 BinarySearchTree Случайный вставка 90.57990000292193
235 BinarySearchTree Случайный поиск 1.302800010307692
236 BinarySearchTree Случайный удаление 1.117399995564483
237 BinarySearchTree Случайный формирование списка 1.220699996338226
238 BinarySearchTree Упорядоченный вставка 326.30869999411516
239 BinarySearchTree Упорядоченный поиск 3.144999995129183
240 BinarySearchTree Упорядоченный удаление 2.4704999959794804
241 BinarySearchTree Упорядоченный формирование списка 0.0027224000077694654

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

0
nikitovie/425.txt Normal file
View File

6
osipovamd/428.md Normal file
View File

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

0
petryaninyas/426.md Normal file
View File

1
rybakovaa/428b.md Normal file
View File

@ -0,0 +1 @@
428b

0
shapovalovka/425.txt Normal file
View File

1
soninrv/428.md Normal file
View File

@ -0,0 +1 @@

0
starikovta/426.md Normal file
View File

1
victorovaas/429 Normal file
View File

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

1
zhigalovrd/425.txt Normal file
View File

@ -0,0 +1 @@
ыфыв