From e3e8053f4a5d74425a6a2c35e0f99ff71c30ed29 Mon Sep 17 00:00:00 2001 From: Farrukhraz Date: Wed, 17 Jun 2020 01:35:57 +0300 Subject: [PATCH 1/7] =?UTF-8?q?=D0=92=D1=81=D0=B5=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BA=D1=80=D0=BE=D0=BC=D0=B5=201,?= =?UTF-8?q?=202=20=D0=B8=204.=20=D0=9D=D0=B5=20=D1=83=D1=81=D0=BF=D0=B5?= =?UTF-8?q?=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task_3.py" | 42 ++++++++++++++ .../task_5.py" | 31 ++++++++++ .../task_6.py" | 57 +++++++++++++++++++ .../task_7.py" | 31 ++++++++++ .../task_8.py" | 24 ++++++++ .../task_9.py" | 52 +++++++++++++++++ 6 files changed, 237 insertions(+) diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" index f987b9cc..74582577 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" @@ -11,3 +11,45 @@ 6 позиции, а минимальное число -49 стоит на 0 позиции [-49, 26, 41, 75, 23, 52, 88, 60, 69, -18] """ + +from random import randint + + +def create_array(arr_length): + array = [randint(-99, 99) for i in range(arr_length)] + return array + + +def get_min_index(array): + min_el = array[0] + index = 0 + for n, el in enumerate(array[1:], 1): + if el < min_el: + min_el = el + index = n + return index + + +def get_max_index(array): + max_el = array[0] + index = 0 + for n, el in enumerate(array[1:], 1): + if el > max_el: + max_el = el + index = n + return index + + +def change_el_places(min_i, max_i): + arr[min_i], arr[max_i] = arr[max_i], arr[min_i] + + +if __name__ == '__main__': + arr = create_array(10) + print(f"Массив до изменений: {arr}") + min_index = get_min_index(arr) + max_index = get_max_index(arr) + change_el_places(min_index, max_index) + print(f"Минимальный элемент = {arr[min_index]}; Максимальный = {arr[max_index]}") + print(f"Массив после изменений: {arr}") + diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" index c6d2fdde..a43af906 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" @@ -8,3 +8,34 @@ Базовый список: [-55, -69, -5, 72, -41, -58, -79, 58, 74, 1] Максимальный отрицательный элемент в данном массиве = -5, его индекс 2 """ + +from random import randint + + +def create_array(arr_length): + array = [randint(-99, 99) for i in range(arr_length)] + return array + + +def get_max_negative(array): + min_el = float("-inf") + index_ = 0 + for n, el in enumerate(array): + if min_el < el < 0: + min_el = el + index_ = n + return min_el, index_ + + +if __name__ == '__main__': + arr = create_array(10) + num, index = get_max_negative(arr) + print(f"Массив: {arr}", + f"Максимальный отрицательный элемент в массиве = {num}, его индекс {index}", + sep="\n" + ) + +# output: +# Массив: [40, 77, -72, -72, 85, 46, 61, -23, 90, -91] +# Максимальный отрицательный элемент в массиве = -23, его индекс 7 + diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" index 923e89af..88e4303a 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" @@ -13,3 +13,60 @@ Массив: [88, 58, 50, 77, 49, 6, 42, 67, 14, 79] Сумма элементов между минимальным (6) и максимальным (88) элементами: 234 """ + +from random import randint + + +def get_arr_sum(array): + if len(array) == 0: + return 0 + if len(array) == 1: + return array[0] + return array[0] + get_arr_sum(array[1:]) + + +def create_array(arr_length): + array = [randint(-99, 99) for i in range(arr_length)] + return array + + +def get_min_index(array): + min_el = array[0] + index = 0 + for n, el in enumerate(array[1:], 1): + if el < min_el: + min_el = el + index = n + return index + + +def get_max_index(array): + max_el = array[0] + index = 0 + for n, el in enumerate(array[1:], 1): + if el > max_el: + max_el = el + index = n + return index + + +def get_sum_between(array, from_, to_): + if from_ > to_: + from_, to_ = to_, from_ + sum_ = get_arr_sum(array[from_+1:to_]) + return sum_ + + +if __name__ == '__main__': + # arr = create_array(int(input("Введите количество элементов в массиве: "))) + arr = create_array(10) + min_index = get_min_index(arr) + max_index = get_max_index(arr) + numbers_sum = get_sum_between(arr, min_index, max_index) + print(f"array: {arr}", + f"Sum of numbers between {min_index} and {max_index} indexes equals => {numbers_sum}", + sep="\n") + +# output: +# array: [11, -38, -44, -9, 4, -16, 30, -46, -66, 14] +# Sum of numbers between 8 and 6 indexes equals => -46 diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" index 7e93662d..a65d8b3d 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" @@ -7,3 +7,34 @@ Наименьший элемент: -86, встречается в этом массиве 1 раз Второй наименьший элемент: -73 """ + +from random import randint + + +def create_array(arr_length): + array = [randint(-99, 99) for i in range(arr_length)] + return array + + +def find_2_min_nums(arr): + min_1, min_2 = arr[0], arr[0] + min_index = None + for n, el in enumerate(arr[1:], 1): + if el < min_1: + min_1 = el + min_index = n + for n, el in enumerate(arr[1:], 1): + if el < min_2 and n != min_index: + min_2 = el + + return min_1, min_2 + + +array = create_array(10) +print(f"array: {array}", + f"2 min nums: {find_2_min_nums(array)}", + sep="\n") + +# output: +# array: [-46, -63, -13, 9, -58, 2, -8, -65, -17, -95] +# 2 min nums: (-95, -65) diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" index e6e47a32..79c1590e 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" @@ -36,3 +36,27 @@ [3, 3, 3, 3, 12] [3, 3, 3, 3, 12] """ + + +def get_arr_sum(arr): + if len(arr) == 1: + return arr[0] + return arr[0] + get_arr_sum(arr[1:]) + + +matrix = list() +raws, columns = 5, 4 +for _ in range(raws): + raw = [int(input()) for _ in range(columns)] + last_el = get_arr_sum(raw) + raw.append(last_el) + matrix.append(raw) + +print(*matrix, sep="\n") + +# output +# [3, 3, 3, 3, 12] +# [3, 3, 3, 3, 12] +# [3, 3, 3, 3, 12] +# [3, 3, 3, 3, 12] +# [3, 3, 3, 3, 12] diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" index 5380a1d5..df5a3161 100644 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" +++ "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" @@ -11,3 +11,55 @@ [13, 12, 7, 15] минимальные значения по столбцам Максимальное среди них = 15 """ + +from random import randint + + +def create_matrix(i, j): + """ + :param i: вертикаль + :param j: горизонталь + """ + matrix = list() + for _ in range(i): + raw_elements = list() + for _ in range(j): + raw_elements.append(randint(-99, 99)) + matrix.append(raw_elements) + return matrix + + +def find_min_matrix_el(matrix): + min_elements = list() + for i in matrix: + min_raw_el = i[0] + for j in i[1:]: + if j < min_raw_el: + min_raw_el = j + min_elements.append(min_raw_el) + return min_elements + + +def find_max_arr_el(array): + max_el = array[0] + for el in array[1:]: + if el > max_el: + max_el = el + return max_el + + +if __name__ == '__main__': + i, j = 3, 4 + matrix = create_matrix(i, j) + min_elements_arr = find_min_matrix_el(matrix) + max_el = find_max_arr_el(min_elements_arr) + print(f"matrix: {matrix}", + f"min_elements_arr: {min_elements_arr}", + f"max_el: {max_el}", + sep="\n" + ) + +# output: +# matrix: [[7, -28, -33, -94], [-6, -53, 6, -6], [-29, -5, 24, -56]] +# min_elements_arr: [-94, -53, -56] +# max_el: -53 From 796c355a31f7ae42ff6f05f51fd68a89d8daf539 Mon Sep 17 00:00:00 2001 From: Farrukhraz Date: Thu, 25 Jun 2020 03:15:00 +0300 Subject: [PATCH 2/7] =?UTF-8?q?2=D0=BE=D0=B5=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task_2.py" | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index 01c0b79d..b3fb8bd4 100644 --- "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -12,3 +12,74 @@ ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ) БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО """ + +from time import time +from timeit import timeit + + +def timer(func): + + def wrapper(*args, **kwargs): + start = time() + result = func(*args, **kwargs) + timer_result = time() - start + print(f"Executing {func.__name__} took {timer_result*1000} ms") + return result + return wrapper + + +# @timer +def ar_sieve(req_idx, lst): + for n, main_el in enumerate(lst, 1): + for sub_el in lst[n::]: + if sub_el % main_el == 0: + lst.remove(sub_el) + if n == req_idx: + return main_el + # return lst + return "No element found" + + +def list_generator(): + num = 2 + while True: + yield num + num += 1 + + +# @timer +def find_simple_num_3(req_idx): + """НЕРЕШЕТО. Выигрывает в памяти, но не очень хорошо работает со временем""" + simple_nums = list() + current_idx = 0 + gen = list_generator() + while req_idx != current_idx: + num = next(gen) + is_simple = True + for el in simple_nums: + if num % el == 0: + is_simple = False + if is_simple: + simple_nums.append(num) + current_idx += 1 + return simple_nums.pop(-1) + + +if __name__ == '__main__': + + # Решето Эратосфена + # Сложность O(n^2) + # Среднее время при нахождении: + # 100го простого чилса: 0.44 сек + # 200го простого чилса: 1.30 сек + # 300го простого чилса: 4.04 сек + lst_ = [i for i in range(10**3*2)][2:] + print(timeit("ar_sieve(300, lst_)", setup="from __main__ import ar_sieve, lst_", number=100)) + + # НеРешето Эратосфена + # Сложность O(n*n!) + # Среднее время при нахождении: + # 100го простого чилса: 2.50 сек + # 200го простого чилса: 12.30 сек + # 300го простого чилса: 27.44 сек + print(timeit("find_simple_num_3(300)", setup="from __main__ import find_simple_num_3", number=100)) From ed7a918ac244c2e4f083242abcb662547e902b4e Mon Sep 17 00:00:00 2001 From: Farrukhraz Date: Sun, 28 Jun 2020 15:14:11 +0300 Subject: [PATCH 3/7] -_- --- .../task_2.py" | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index b3fb8bd4..bc5d7a49 100644 --- "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -36,7 +36,6 @@ def ar_sieve(req_idx, lst): lst.remove(sub_el) if n == req_idx: return main_el - # return lst return "No element found" @@ -47,7 +46,7 @@ def list_generator(): num += 1 -# @timer +@timer def find_simple_num_3(req_idx): """НЕРЕШЕТО. Выигрывает в памяти, но не очень хорошо работает со временем""" simple_nums = list() @@ -68,18 +67,20 @@ def find_simple_num_3(req_idx): if __name__ == '__main__': # Решето Эратосфена - # Сложность O(n^2) + # Сложность O(n^2) (Приблизительно такая сложность, точна сложность высчитывается по матем. формулам) # Среднее время при нахождении: # 100го простого чилса: 0.44 сек # 200го простого чилса: 1.30 сек # 300го простого чилса: 4.04 сек - lst_ = [i for i in range(10**3*2)][2:] - print(timeit("ar_sieve(300, lst_)", setup="from __main__ import ar_sieve, lst_", number=100)) + # lst_ = [i for i in range(10**4)][2:] + # print(timeit("ar_sieve(1000, lst_)", setup="from __main__ import ar_sieve, lst_", number=100)) + + find_simple_num_3(100) # НеРешето Эратосфена - # Сложность O(n*n!) + # Сложность O(n * n!) (Приблизительно такая сложность) # Среднее время при нахождении: # 100го простого чилса: 2.50 сек # 200го простого чилса: 12.30 сек # 300го простого чилса: 27.44 сек - print(timeit("find_simple_num_3(300)", setup="from __main__ import find_simple_num_3", number=100)) + # print(timeit("find_simple_num_3(300)", setup="from __main__ import find_simple_num_3", number=100)) From 89eed76bbfbcf7ebc6f47749b7544a31319b3d33 Mon Sep 17 00:00:00 2001 From: Farrukhraz Date: Wed, 1 Jul 2020 15:15:06 +0300 Subject: [PATCH 4/7] -_- --- .../task_2.py" | 1 + 1 file changed, 1 insertion(+) diff --git "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index bc5d7a49..321e7670 100644 --- "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -30,6 +30,7 @@ def wrapper(*args, **kwargs): # @timer def ar_sieve(req_idx, lst): + """РЕШЕТО. Проигрывает в памяти, но не плохо работает по времени""" for n, main_el in enumerate(lst, 1): for sub_el in lst[n::]: if sub_el % main_el == 0: From 877ade69561b70ce86919295af6b54237899ea47 Mon Sep 17 00:00:00 2001 From: Farrukhraz Date: Wed, 1 Jul 2020 15:58:12 +0300 Subject: [PATCH 5/7] =?UTF-8?q?=D0=94\=D0=B7=20=D0=B1=D0=B5=D0=B7=20=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D1=84=D0=B8=D1=87=D0=B5=D0=BA=D1=81=D0=BA=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=B0=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0.=20?= =?UTF-8?q?=D0=95=D0=B3=D0=BE=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D1=8E.=20?= =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D1=8E=20=D0=B4=D0=BE=20=D1=83?= =?UTF-8?q?=D1=80=D0=BE=D0=BA=D0=B0,=20=D1=80=D0=B0=D0=BD=D1=8C=D1=88?= =?UTF-8?q?=D0=B5=20=D0=BD=D0=B5=20=D1=83=D1=81=D0=BF=D0=B5=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analisis.py" | 0 .../task_1.py" | 26 +++++++++++ .../task_2.py" | 46 +++++++++++++++++++ .../task_3.py" | 41 +++++++++++++++++ 4 files changed, 113 insertions(+) create mode 100644 "\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/analisis.py" diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/analisis.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/analisis.py" new file mode 100644 index 00000000..e69de29b diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" index 07560cfa..5c3ef17e 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_1.py" @@ -9,3 +9,29 @@ Подсказка: обратите внимание, сортируем не по возрастанию, как в примере, а по убыванию """ + +from random import randrange + + +def get_list(stop, length, start=1): + return [randrange(start, stop) for _ in range(length)] + + +def swap(i, j): + temp = lst[i] + lst[i] = lst[j] + lst[j] = temp + + +def bubble_sort(lst_): + for j in range(len(lst_) - 1, 0, -1): + for i in range(j): + if lst_[i] < lst_[i + 1]: + swap(i, i + 1) + return lst_ + + +if __name__ == "__main__": + lst = get_list(100, 1000, -100) + bubble_sort(lst) + print(lst) diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" index 73d3dfb6..e37e4530 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" @@ -8,3 +8,49 @@ Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562] Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828] """ + +from random import randrange, random + + +def get_list(stop, length, start=1): + return [random()*50 for _ in range(length)] + + +def merge_sort(arr): + if len(arr) > 1: + mid = len(arr) // 2 + left = arr[:mid] + right = arr[mid:] + + merge_sort(left) + merge_sort(right) + + i = j = k = 0 + + # Copy data to temp arrays l[] and right[] + while i < len(left) and j < len(right): + if left[i] < right[j]: + arr[k] = left[i] + i += 1 + else: + arr[k] = right[j] + j += 1 + k += 1 + + # Checking if any element was left + while i < len(left): + arr[k] = left[i] + i += 1 + k += 1 + + while j < len(right): + arr[k] = right[j] + j += 1 + k += 1 + + +if __name__ == "__main__": + lst = get_list(start=0, stop=50, length=100) + merge_sort(lst) + print(lst) + diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" index 33530404..27a2dbae 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" @@ -6,3 +6,44 @@ массива. Но если это слишком сложно, то используйте метод сортировки, который не рассматривался на уроках """ + +from random import randrange + + +def get_list(stop, length, start=1): + return [randrange(start, stop) for _ in range(length)] + + +def hoare_sort(arr): + if len(arr) <= 1: + return + barrier = arr[0] + left = [] + middle = [] + right = [] + for el in arr: + if el < barrier: + left.append(el) + elif el == barrier: + middle.append(el) + else: + right.append(el) + hoare_sort(left) + hoare_sort(right) + k = 0 + for el in left + middle + right: + arr[k] = el + k += 1 + + +def find_media(arr, med): + return arr[med] + + +if __name__ == "__main__": + median_index = 48 + array_length = 2 * median_index + 1 + lst = get_list(start=-50, stop=50, length=array_length) + hoare_sort(lst) + median = lst[median_index] + print(f"median = {median} \nsorted list = {lst}") From c266c317f3c1d53c2d3a47a98ec14eaefe1974b9 Mon Sep 17 00:00:00 2001 From: Farrukhraz Date: Wed, 1 Jul 2020 16:02:51 +0300 Subject: [PATCH 6/7] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D1=8B,=20=D0=BD=D0=B5=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D1=8F?= =?UTF-8?q?=D1=89=D0=B8=D0=B5=D1=81=D1=8F=20=D0=BA=20=D1=8D=D1=82=D0=BE?= =?UTF-8?q?=D0=BC=D1=83=20=D0=B4=D0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task_3.py" | 55 ------------ .../task_5.py" | 41 --------- .../task_6.py" | 72 --------------- .../task_7.py" | 40 --------- .../task_8.py" | 62 ------------- .../task_9.py" | 65 -------------- .../task_2.py" | 87 ------------------- 7 files changed, 422 deletions(-) delete mode 100644 "\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" delete mode 100644 "\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" delete mode 100644 "\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" delete mode 100644 "\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" delete mode 100644 "\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" delete mode 100644 "\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" delete mode 100644 "\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" deleted file mode 100644 index 74582577..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_3.py" +++ /dev/null @@ -1,55 +0,0 @@ -""" -Задание_3. В массиве случайных целых чисел поменять -местами минимальный и максимальный элементы. - -Пример: -В данном массиве чисел максимальное число 88 стоит на -0 позиции, а минимальное число -49 стоит на 6 позиции -Заменяем их -[88, 26, 41, 75, 23, 52, -49, 60, 69, -18] -В данном массиве чисел максимальное число 88 стоит на -6 позиции, а минимальное число -49 стоит на 0 позиции -[-49, 26, 41, 75, 23, 52, 88, 60, 69, -18] -""" - -from random import randint - - -def create_array(arr_length): - array = [randint(-99, 99) for i in range(arr_length)] - return array - - -def get_min_index(array): - min_el = array[0] - index = 0 - for n, el in enumerate(array[1:], 1): - if el < min_el: - min_el = el - index = n - return index - - -def get_max_index(array): - max_el = array[0] - index = 0 - for n, el in enumerate(array[1:], 1): - if el > max_el: - max_el = el - index = n - return index - - -def change_el_places(min_i, max_i): - arr[min_i], arr[max_i] = arr[max_i], arr[min_i] - - -if __name__ == '__main__': - arr = create_array(10) - print(f"Массив до изменений: {arr}") - min_index = get_min_index(arr) - max_index = get_max_index(arr) - change_el_places(min_index, max_index) - print(f"Минимальный элемент = {arr[min_index]}; Максимальный = {arr[max_index]}") - print(f"Массив после изменений: {arr}") - diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" deleted file mode 100644 index a43af906..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_5.py" +++ /dev/null @@ -1,41 +0,0 @@ -""" -Задание_5. В массиве найти максимальный отрицательный элемент. -Вывести на экран его значение и позицию (индекс) в массиве. - -Подсказка: максимальный отрицательный - элемент, наиболее близкий к нулю - -Пример: -Базовый список: [-55, -69, -5, 72, -41, -58, -79, 58, 74, 1] -Максимальный отрицательный элемент в данном массиве = -5, его индекс 2 -""" - -from random import randint - - -def create_array(arr_length): - array = [randint(-99, 99) for i in range(arr_length)] - return array - - -def get_max_negative(array): - min_el = float("-inf") - index_ = 0 - for n, el in enumerate(array): - if min_el < el < 0: - min_el = el - index_ = n - return min_el, index_ - - -if __name__ == '__main__': - arr = create_array(10) - num, index = get_max_negative(arr) - print(f"Массив: {arr}", - f"Максимальный отрицательный элемент в массиве = {num}, его индекс {index}", - sep="\n" - ) - -# output: -# Массив: [40, 77, -72, -72, 85, 46, 61, -23, 90, -91] -# Максимальный отрицательный элемент в массиве = -23, его индекс 7 - diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" deleted file mode 100644 index 88e4303a..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_6.py" +++ /dev/null @@ -1,72 +0,0 @@ -""" -Задание_6. В одномерном массиве найти сумму элементов, -находящихся между минимальным и максимальным элементами. -Сами минимальный и максимальный элементы в сумму не включать. - -Подсказки: -1) берем первый минимальный и максимальный -2) не забудьте, что сначала может быть минимальный, потом максимальный -а может - наоборот. во всех этих случаях нужна корректная работа - -Пример: -Введите количество элементов в массиве: 10 -Массив: [88, 58, 50, 77, 49, 6, 42, 67, 14, 79] -Сумма элементов между минимальным (6) и максимальным (88) элементами: 234 -""" - -from random import randint - - -def get_arr_sum(array): - if len(array) == 0: - return 0 - if len(array) == 1: - return array[0] - return array[0] + get_arr_sum(array[1:]) - - -def create_array(arr_length): - array = [randint(-99, 99) for i in range(arr_length)] - return array - - -def get_min_index(array): - min_el = array[0] - index = 0 - for n, el in enumerate(array[1:], 1): - if el < min_el: - min_el = el - index = n - return index - - -def get_max_index(array): - max_el = array[0] - index = 0 - for n, el in enumerate(array[1:], 1): - if el > max_el: - max_el = el - index = n - return index - - -def get_sum_between(array, from_, to_): - if from_ > to_: - from_, to_ = to_, from_ - sum_ = get_arr_sum(array[from_+1:to_]) - return sum_ - - -if __name__ == '__main__': - # arr = create_array(int(input("Введите количество элементов в массиве: "))) - arr = create_array(10) - min_index = get_min_index(arr) - max_index = get_max_index(arr) - numbers_sum = get_sum_between(arr, min_index, max_index) - print(f"array: {arr}", - f"Sum of numbers between {min_index} and {max_index} indexes equals => {numbers_sum}", - sep="\n") - -# output: -# array: [11, -38, -44, -9, 4, -16, 30, -46, -66, 14] -# Sum of numbers between 8 and 6 indexes equals => -46 diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" deleted file mode 100644 index a65d8b3d..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_7.py" +++ /dev/null @@ -1,40 +0,0 @@ -""" -Задание_7. В одномерном массиве целых чисел определить два наименьших элемента. -Они могут быть как равны между собой (оба являться минимальными), так и различаться. - -Пример: -Исходный массив: [28, -86, 44, -37, -7, -52, -19, -3, -15, -73] -Наименьший элемент: -86, встречается в этом массиве 1 раз -Второй наименьший элемент: -73 -""" - -from random import randint - - -def create_array(arr_length): - array = [randint(-99, 99) for i in range(arr_length)] - return array - - -def find_2_min_nums(arr): - min_1, min_2 = arr[0], arr[0] - min_index = None - for n, el in enumerate(arr[1:], 1): - if el < min_1: - min_1 = el - min_index = n - for n, el in enumerate(arr[1:], 1): - if el < min_2 and n != min_index: - min_2 = el - - return min_1, min_2 - - -array = create_array(10) -print(f"array: {array}", - f"2 min nums: {find_2_min_nums(array)}", - sep="\n") - -# output: -# array: [-46, -63, -13, 9, -58, 2, -8, -65, -17, -95] -# 2 min nums: (-95, -65) diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" deleted file mode 100644 index 79c1590e..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_8.py" +++ /dev/null @@ -1,62 +0,0 @@ -""" -Задание_8. Матрица 5x4 заполняется вводом с клавиатуры кроме последних элементов строк. -Программа должна вычислять сумму введенных элементов каждой строки -и записывать ее в последнюю ячейку строки. -В конце следует вывести полученную матрицу. - -1-я строка: -3 -3 -3 -3 -2-я строка: -3 -3 -3 -3 -3-я строка: -3 -3 -3 -3 -4-я строка: -3 -3 -3 -3 -5-я строка: -3 -3 -3 -3 - -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -[3, 3, 3, 3, 12] -""" - - -def get_arr_sum(arr): - if len(arr) == 1: - return arr[0] - return arr[0] + get_arr_sum(arr[1:]) - - -matrix = list() -raws, columns = 5, 4 -for _ in range(raws): - raw = [int(input()) for _ in range(columns)] - last_el = get_arr_sum(raw) - raw.append(last_el) - matrix.append(raw) - -print(*matrix, sep="\n") - -# output -# [3, 3, 3, 3, 12] -# [3, 3, 3, 3, 12] -# [3, 3, 3, 3, 12] -# [3, 3, 3, 3, 12] -# [3, 3, 3, 3, 12] diff --git "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" "b/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" deleted file mode 100644 index df5a3161..00000000 --- "a/\320\243\321\200\320\276\320\272 3.\320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_9.py" +++ /dev/null @@ -1,65 +0,0 @@ -""" -Задание_9.Найти максимальный элемент среди минимальных элементов столбцов матрицы. - -Пример: - -Задайте количество строк в матрице: 3 -Задайте количество столбцов в матрице: 4 - 36 20 42 38 - 46 27 7 33 - 13 12 47 15 -[13, 12, 7, 15] минимальные значения по столбцам -Максимальное среди них = 15 -""" - -from random import randint - - -def create_matrix(i, j): - """ - :param i: вертикаль - :param j: горизонталь - """ - matrix = list() - for _ in range(i): - raw_elements = list() - for _ in range(j): - raw_elements.append(randint(-99, 99)) - matrix.append(raw_elements) - return matrix - - -def find_min_matrix_el(matrix): - min_elements = list() - for i in matrix: - min_raw_el = i[0] - for j in i[1:]: - if j < min_raw_el: - min_raw_el = j - min_elements.append(min_raw_el) - return min_elements - - -def find_max_arr_el(array): - max_el = array[0] - for el in array[1:]: - if el > max_el: - max_el = el - return max_el - - -if __name__ == '__main__': - i, j = 3, 4 - matrix = create_matrix(i, j) - min_elements_arr = find_min_matrix_el(matrix) - max_el = find_max_arr_el(min_elements_arr) - print(f"matrix: {matrix}", - f"min_elements_arr: {min_elements_arr}", - f"max_el: {max_el}", - sep="\n" - ) - -# output: -# matrix: [[7, -28, -33, -94], [-6, -53, 6, -6], [-29, -5, 24, -56]] -# min_elements_arr: [-94, -53, -56] -# max_el: -53 diff --git "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" "b/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" deleted file mode 100644 index 321e7670..00000000 --- "a/\320\243\321\200\320\276\320\272 4. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/task_2.py" +++ /dev/null @@ -1,87 +0,0 @@ -""" -Написать два алгоритма нахождения i-го по счёту простого числа. -Без использования «Решета Эратосфена»; -Используя алгоритм «Решето Эратосфена» - -Подсказка: -Сравните алгоритмы по времени на разных порядковых номерах чисел: -10, 100, 1000 -Опишите результаты, сделайте выводы, где и какой алгоритм эффективнее -Подумайте и по возможности определите сложность каждого алгоритма - -ВНИМАНИЕ: ЗАДАНИЯ, В КОТОРЫХ БУДУТ ГОЛЫЕ ЦИФРЫ ЗАМЕРОВ (БЕЗ АНАЛИТИКИ) -БУДУТ ПРИНИМАТЬСЯ С ОЦЕНКОЙ УДОВЛЕТВОРИТЕЛЬНО -""" - -from time import time -from timeit import timeit - - -def timer(func): - - def wrapper(*args, **kwargs): - start = time() - result = func(*args, **kwargs) - timer_result = time() - start - print(f"Executing {func.__name__} took {timer_result*1000} ms") - return result - return wrapper - - -# @timer -def ar_sieve(req_idx, lst): - """РЕШЕТО. Проигрывает в памяти, но не плохо работает по времени""" - for n, main_el in enumerate(lst, 1): - for sub_el in lst[n::]: - if sub_el % main_el == 0: - lst.remove(sub_el) - if n == req_idx: - return main_el - return "No element found" - - -def list_generator(): - num = 2 - while True: - yield num - num += 1 - - -@timer -def find_simple_num_3(req_idx): - """НЕРЕШЕТО. Выигрывает в памяти, но не очень хорошо работает со временем""" - simple_nums = list() - current_idx = 0 - gen = list_generator() - while req_idx != current_idx: - num = next(gen) - is_simple = True - for el in simple_nums: - if num % el == 0: - is_simple = False - if is_simple: - simple_nums.append(num) - current_idx += 1 - return simple_nums.pop(-1) - - -if __name__ == '__main__': - - # Решето Эратосфена - # Сложность O(n^2) (Приблизительно такая сложность, точна сложность высчитывается по матем. формулам) - # Среднее время при нахождении: - # 100го простого чилса: 0.44 сек - # 200го простого чилса: 1.30 сек - # 300го простого чилса: 4.04 сек - # lst_ = [i for i in range(10**4)][2:] - # print(timeit("ar_sieve(1000, lst_)", setup="from __main__ import ar_sieve, lst_", number=100)) - - find_simple_num_3(100) - - # НеРешето Эратосфена - # Сложность O(n * n!) (Приблизительно такая сложность) - # Среднее время при нахождении: - # 100го простого чилса: 2.50 сек - # 200го простого чилса: 12.30 сек - # 300го простого чилса: 27.44 сек - # print(timeit("find_simple_num_3(300)", setup="from __main__ import find_simple_num_3", number=100)) From fc1ead0cb89b2dc6d2acae29ef0e12a96a2b2c4a Mon Sep 17 00:00:00 2001 From: Farrukhraz Date: Wed, 1 Jul 2020 19:50:31 +0300 Subject: [PATCH 7/7] =?UTF-8?q?=D0=90=D0=BD=D0=B0=D0=BB=D0=B8=D0=B7=20?= =?UTF-8?q?=D1=81=D0=BE=D1=80=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../analisis.py" | 126 ++++++++++++++++++ 1 file changed, 126 insertions(+) diff --git "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/analisis.py" "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/analisis.py" index e69de29b..0221b795 100644 --- "a/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/analisis.py" +++ "b/\320\243\321\200\320\276\320\272 7. \320\237\321\200\320\260\320\272\321\202\320\270\321\207\320\265\321\201\320\272\320\276\320\265 \320\267\320\260\320\264\320\260\320\275\320\270\320\265/analisis.py" @@ -0,0 +1,126 @@ +import matplotlib.pyplot as plt +from random import randrange +from time import time + + +def timer(func): + def wrapper(*args, **kwargs): + start = time() + func(*args, **kwargs) + end = time() - start + return end + return wrapper + + +def get_list(stop, length, start=1): + return [randrange(start, stop) for _ in range(length)] + + +def swap(i, j): + temp = b_list[i] + b_list[i] = b_list[j] + b_list[j] = temp + + +def bubble_sort(lst_): + for j in range(len(lst_) - 1, 0, -1): + for i in range(j): + if lst_[i] < lst_[i + 1]: + swap(i, i + 1) + return lst_ + + +def merge_sort(arr): + def wrapper(arr_): + if len(arr_) > 1: + mid = len(arr_) // 2 + left = arr_[:mid] + right = arr_[mid:] + + merge_sort(left) + merge_sort(right) + + i = j = k = 0 + + # Copy data to temp arr_ays l[] and right[] + while i < len(left) and j < len(right): + if left[i] < right[j]: + arr_[k] = left[i] + i += 1 + else: + arr_[k] = right[j] + j += 1 + k += 1 + + # Checking if any element was left + while i < len(left): + arr_[k] = left[i] + i += 1 + k += 1 + + while j < len(right): + arr_[k] = right[j] + j += 1 + k += 1 + wrapper(arr) + + +def hoare_sort(arr): + if len(arr) <= 1: + return + barrier = arr[0] + left = [] + middle = [] + right = [] + for el in arr: + if el < barrier: + left.append(el) + elif el == barrier: + middle.append(el) + else: + right.append(el) + hoare_sort(left) + hoare_sort(right) + k = 0 + for el in left + middle + right: + arr[k] = el + k += 1 + + +@timer +def run_bubble_sort(lst_): + bubble_sort(lst_) + + +@timer +def run_hoare_sort(lst_): + merge_sort(lst_) + + +@timer +def run_merge_sort(lst_): + hoare_sort(lst_) + + +if __name__ == "__main__": + results = dict( + b_sort=(list(), list()), + h_sort=(list(), list()), + m_sort=(list(), list()) + ) + for x in [1, 50, 100, 250, 500, 750, 1000, 1250, 1500, 1750, 2000]: + lst = get_list(start=-100, stop=100, length=x) + m_list = lst[:] + b_list = lst[:] + h_list = lst[:] + m_sort = run_merge_sort(m_list) + b_sort = run_bubble_sort(b_list) + h_sort = run_hoare_sort(h_list) + for i in ['b_sort', 'h_sort', 'm_sort']: + results[i][1].append(eval(i)) + results[i][0].append(x) + + + print(results.get('b_sort')) + plt.plot(*results.get('b_sort'), 'r--', *results.get('h_sort'), 'b-', *results.get('m_sort'), 'g--') + plt.show()