-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhw04_1.py
More file actions
137 lines (109 loc) · 4.71 KB
/
hw04_1.py
File metadata and controls
137 lines (109 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Проанализировать скорость и сложность одного - трёх любых алгоритмов,
# разработанных в рамках домашнего задания первых трех уроков.
#
# 1
# ( hw03_3 - Первый способ)
# В массиве случайных целых чисел поменять местами минимальный и максимальный элементы.
def min_max(array_len):
array = [randint(0, 99) for _ in range(array_len)]
min_pos = 0
max_pos = 0
for i in range(1, len(array)):
if array[i] < array[min_pos]:
min_pos = i
elif array[i] > array[max_pos]:
max_pos = i
array[min_pos], array[max_pos] = array[max_pos], array[min_pos]
return array
# cProfile.run('min_max(100)')
# 1 0.000 0.000 0.000 0.000 hw04_1.py:45(min_max)
# cProfile.run('min_max(1000)')
# 1 0.000 0.000 0.003 0.003 hw04_1.py:45(min_max)
# cProfile.run('min_max(10000)')
# 1 0.002 0.002 0.028 0.028 hw04_1.py:45(min_max)
# "hw04_1.min_max(100)"
# 100 loops, best of 5: 188 usec per loop
# "hw04_1.min_max(1000)"
# 100 loops, best of 5: 1.94 msec per loop
# "hw04_1.min_max(10000)"
# 100 loops, best of 5: 19.6 msec per loop
# 1
# ( hw03_3 - Второй способ)
# В массиве случайных целых чисел поменять местами минимальный и максимальный элементы.
def min_max_inc(array_len):
array = [randint(0, 99) for _ in range(array_len)]
min_pos = array.index(min(array))
max_pos = array.index(max(array))
array[min_pos], array[max_pos] = array[max_pos], array[min_pos]
return array
# cProfile.run('min_max_inc(100)')
# 1 0.000 0.000 0.000 0.000 hw04_1.py:75(min_max_inc)
# cProfile.run('min_max_inc(1000)')
# 1 0.000 0.000 0.003 0.003 hw04_1.py:75(min_max_inc)
# cProfile.run('min_max_inc(10000)')
# 1 0.000 0.000 0.027 0.027 hw04_1.py:75(min_max_inc)
# "hw04_1.min_max_inc(100)"
# 100 loops, best of 5: 182 usec per loop
# "hw04_1.min_max_inc(1000)"
# 100 loops, best of 5: 1.76 msec per loop
# "hw04_1.min_max_inc(10000)"
# 100 loops, best of 5: 18 msec per loop
# Вывод:
# Второй способ быстрее за счет использования встроенных функциий. Но на больших объемах грозит переполнение ОЗУ
# из-за многократного обращения к массиву данных.
# 2
# ( hw03_5 - Первый способ)
# В массиве найти максимальный отрицательный элемент. Вывести на экран его
# значение и позицию в массиве.
def hw03_5(arr_len):
arr = [randint(-100, 100) for _ in range(arr_len)]
min_el = arr[0]
for i in arr:
if i < min_el:
min_el = i
if min_el < 0:
max_el = min_el
for i in arr:
if max_el < i < 0:
max_el = i
return max_el, arr.index(max_el)
else:
return 'Ошибка. В массиве нет отрицательных элементов.'
# cProfile.run('hw03_5(100000)')
# 1 0.007 0.007 0.171 0.171 hw04_1.py:8(hw03_5)
# cProfile.run('hw03_5(1000000)')
# 1 0.067 0.067 1.632 1.632 hw04_1.py:8(hw03_5)
# cProfile.run('hw03_5(10000000)')
# 1 0.670 0.670 16.003 16.003 hw04_1.py:8(hw03_5)
#
# "hw04_1.hw03_5(100000)"
# 10 loops, best of 3: 103 msec per loop
# "hw04_1.hw03_5(1000000)"
# 10 loops, best of 3: 1.06 sec per loop
# "hw04_1.hw03_5(10000000)"
# 10 loops, best of 3: 10.6 sec per loop
# 2
# ( hw03_5 - Второй способ)
def hw03_5_modify(arr_len):
arr = [randint(-100, 100) for _ in range(arr_len)]
new_arr = [i for i in arr if i < 0]
if len(new_arr) > 0:
max_el = max(new_arr)
return max_el, arr.index(max_el)
else:
return 'Ошибка. В массиве нет отрицательных элементов.'
# cProfile.run('hw03_5_modify(100000)')
# 1 0.000 0.000 0.154 0.154 hw04_1.py:25(hw03_5_modify)
# cProfile.run('hw03_5_modify(1000000)')
# 1 0.000 0.000 1.589 1.589 hw04_1.py:25(hw03_5_modify)
# cProfile.run('hw03_5_modify(10000000)')
# 1 0.000 0.000 16.096 16.096 hw04_1.py:25(hw03_5_modify)
#
# "hw04_1.hw03_5_modify(100000)"
# 10 loops, best of 3: 101 msec per loop
# "hw04_1.hw03_5_modify(1000000)"
# 10 loops, best of 3: 1.05 sec per loop
# "hw04_1.hw03_5_modify(10000000)"
# 10 loops, best of 3: 10.6 sec per loop
# Вывод:
# На тестируемых объемах массивов разница не принципиальна.