From a4c401e5e1eccad08e6c880af2ddcced8597a36f Mon Sep 17 00:00:00 2001 From: Sergey Kopeykin Date: Wed, 1 Jul 2020 15:11:46 +0300 Subject: [PATCH 1/7] --- --- .../task_1.py" | 42 +++++++++++++++++++ 1 file changed, 42 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/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..757015f3 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,45 @@ Подсказка: обратите внимание, сортируем не по возрастанию, как в примере, а по убыванию """ +from random import randint +from timeit import timeit + + +def create_list(list_len, l_border, r_border): + return [randint(l_border, r_border - 1) for _ in range(list_len)] + + +# оригинальный +def bubble_sort(base_list): + flag = False + for idx in range(len(base_list[:]) - 1, 0, -1): + if base_list[idx] > base_list[idx-1]: + base_list[idx], base_list[idx-1], flag = base_list[idx-1], base_list[idx], True + return bubble_sort(base_list) if flag else base_list[:] + + +#оптимизированный +def bubble_sort_opt(base_list, itr=0): + flag = False + for idx in range(len(base_list[:]) - 1, itr, -1): + if base_list[idx] > base_list[idx-1]: + base_list[idx], base_list[idx-1], flag = base_list[idx-1], base_list[idx], True + return bubble_sort_opt(base_list, itr+1) if flag else base_list[:] + + +a = create_list(10, 0, 10) +print(a) +print(bubble_sort(a)) +print(bubble_sort_opt(a)) +print('Пузырьковая: ', timeit('bubble_sort(create_list(1000, 0, 10))', 'from __main__ import bubble_sort, create_list', number=100)) +print('Оптимизиров: ', timeit('bubble_sort_opt(create_list(1000, 0, 10))', 'from __main__ import bubble_sort_opt, create_list', number=100)) + +""" +[4, 9, 6, 2, 2, 3, 5, 3, 3, 3] +[9, 6, 5, 4, 3, 3, 3, 3, 2, 2] +[9, 6, 5, 4, 3, 3, 3, 3, 2, 2] +Пузырьковая: 8.634379411007103 +Оптимизиров: 6.528080139003578 +# Вывод: легкая оптимизация алгоритма высвободило почти 20% ресурсов. +""" + From decc1e8e675466344d81832c751f4a03b0106ddb Mon Sep 17 00:00:00 2001 From: Sergey Kopeykin Date: Wed, 1 Jul 2020 15:26:43 +0300 Subject: [PATCH 2/7] --- --- .../task_2.py" | 88 +++++++++++++++++++ 1 file changed, 88 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/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..50206036 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,91 @@ Исходный - [46.11436617832828, 41.62921998361278, 18.45859540989644, 12.128870723745806, 8.025098788570562] Отсортированный - [8.025098788570562, 12.128870723745806, 18.45859540989644, 41.62921998361278, 46.11436617832828] """ +# 2. Отсортируйте по возрастанию методом слияния одномерный вещественный массив, +# заданный случайными числами на промежутке [0; 50). +# Выведите на экран исходный и отсортированный массивы. +from random import random +from random import randint +from timeit import timeit + +# import sys +# sys.setrecursionlimit(100000) + + +def create_list_int(list_len, l_border, r_border): + return [randint(l_border, r_border - 1) for _ in range(list_len)] + + +def create_list_float(list_len, l_border, r_border): + return [randint(l_border, r_border - 1) + random() for _ in range(list_len)] + +# Читабельный вариант +def merge_sort2(list1, list2): + tmp = [] + while len(list1) > 0: + while len(list2) > 0 and list2[0] <= list1[0]: + tmp.append(list2.pop(0)) + tmp.append(list1.pop(0)) + return tmp + list2 + + +def merge_sort(base_list): + if len(base_list) > 2: + half = len(base_list) // 2 + return merge_sort2(merge_sort(base_list[:half]), merge_sort(base_list[half:])) + else: + if len(base_list) == 1: + return base_list + else: + return base_list if base_list[0] < base_list[1] else base_list[::-1] + +# НЕЕЕЕЕЕЕЕчитабельный вариант! +def merge_sort_opt2(list1, list2, tmp=[]): + while len(list1) > 0: + while len(list2) > 0 and list2[0] <= list1[0]: + tmp.append(list2.pop(0)) + tmp.append(list1.pop(0)) + return tmp + list2 + +def merge_sort_opt(base_list): + return merge_sort_opt2(merge_sort(base_list[:len(base_list) // 2]), merge_sort(base_list[len(base_list) // 2:])) \ + if len(base_list) > 2 else base_list if len(base_list) == 1 else base_list \ + if base_list[0] < base_list[1] else base_list[::-1] + + +a = create_list_float(8, 0, 50) +print(a) +print(merge_sort(a)) +print(merge_sort_opt(a)) +print('Обычный: ', timeit('merge_sort(create_list_float(10000, 0, 10))', 'from __main__ import merge_sort, merge_sort2, create_list_float', number=100)) +print('Оптимизиров: ', timeit('merge_sort_opt(create_list_float(10000, 0, 10))', 'from __main__ import merge_sort_opt, merge_sort_opt2, create_list_float', number=100)) +""" +[24.060749050634755, 5.569825488205687, 12.099656999933002, 25.489810820912094, 26.71010855578925, 20.318494463628316, 1.8343820847442003, 33.16803571517379] +[1.8343820847442003, 5.569825488205687, 12.099656999933002, 20.318494463628316, 24.060749050634755, 25.489810820912094, 26.71010855578925, 33.16803571517379] +[1.8343820847442003, 5.569825488205687, 12.099656999933002, 20.318494463628316, 24.060749050634755, 25.489810820912094, 26.71010855578925, 33.16803571517379] +Обычный: 0.30818897799326805 +Оптимизиров: 0.35243779300071765 + +#Вывод: вроде бы более лаконичная запись, а привела к перерасходу ресурсов. Вот как бывает при "неправильной" оптимизации +# причем на более длинных массивах разница увеличивается +# Если длинна массива = 1000 +# Обычный: 4.47612431399466 +# Оптимизиров: 5.975955189001979 +""" + + + + + + +""" +b = [1, 3, 8] +c = [1, 2, 7, 9] +print(b) +print(c) +print(merge_sort2(b, c)) +b = [1, 3, 8] +c = [1, 2, 7, 9] +print(merge_sort_opt2(b, c)) +print('-----------------------------------------') +""" \ No newline at end of file From 22bbefec77697cf3add5c6f95259fc3c651e2251 Mon Sep 17 00:00:00 2001 From: Sergey Kopeykin Date: Wed, 1 Jul 2020 15:45:45 +0300 Subject: [PATCH 3/7] --- --- .../task_3.py" | 27 +++++++++++++++++++ 1 file changed, 27 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/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..503d6780 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,30 @@ массива. Но если это слишком сложно, то используйте метод сортировки, который не рассматривался на уроках """ +from random import random +from random import randint +from timeit import timeit + + +def create_list_int(list_len, l_border, r_border): + return [randint(l_border, r_border - 1) for _ in range(list_len * 2 + 1)] + + +def get_median(base_list): + for idx, val in enumerate(base_list): + cnt1 = 0 + cnt2 = -1 + for idx2, val2 in enumerate(base_list): + if val2 < val: + cnt1 += 1 + else: + cnt2 += 1 + if cnt1 == cnt2: + return val + return None + + +a = create_list_int(5,0,10) +print(a) +print(sorted(a)) +print(get_median(a)) From b075a7d39302e92030368d537a0ef5d2fa8d8a59 Mon Sep 17 00:00:00 2001 From: Sergey Kopeykin Date: Wed, 1 Jul 2020 15:56:31 +0300 Subject: [PATCH 4/7] --- --- .../task_3.py" | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) 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 503d6780..2430054c 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" @@ -15,11 +15,12 @@ def create_list_int(list_len, l_border, r_border): return [randint(l_border, r_border - 1) for _ in range(list_len * 2 + 1)] +# Использую set, что дает прирост производительности def get_median(base_list): - for idx, val in enumerate(base_list): + for val in base_list: cnt1 = 0 cnt2 = -1 - for idx2, val2 in enumerate(base_list): + for val2 in base_list: if val2 < val: cnt1 += 1 else: @@ -29,7 +30,37 @@ def get_median(base_list): return None -a = create_list_int(5,0,10) +# Использую set, что дает прирост производительности +def get_median_opt(base_list): + for val in set(base_list): + cnt1 = 0 + cnt2 = -1 + for val2 in base_list: + if val2 < val: + cnt1 += 1 + else: + cnt2 += 1 + if cnt1 == cnt2: + return val + return None + + +a = create_list_int(500,0,1000000) print(a) print(sorted(a)) print(get_median(a)) +print(get_median_opt(a)) + +print('Обычный: ', timeit('get_median(a)', 'from __main__ import get_median, a', number=100)) +print('Оптимиз: ', timeit('get_median_opt(a)', 'from __main__ import get_median_opt, a', number=100)) + +""" +[300704, 236676, 598406, 726711, 811820, 588624, 191314, 36890, 340223, 141687, 611683, 526902, 731856, 120711, 714204, 599471, 405632, 209703, 18504, 956685, 639696, 895911, 591170, 842896, 125816, 921077, 268124, 480781, 852849, 689812, 854116, 495491, 572422, 176209, 178866, 340982, 190341, 64776, 728901, 938792, 452625, 508539, 324388, 681310, 463656, 1531, 454239, 525980, 504647, 171783, 892620, 806558, 97928, 728763, 349147, 19542, 605800, 646605, 257989, 668141, 203309, 994247, 28594, 14425, 926700, 786386, 418488, 922837, 463151, 970563, 797937, 699697, 629201, 891392, 904940, 439785, 951605, 947287, 731138, 870148, 216003, 615894, 916343, 131391, 674925, 705380, 449320, 717725, 903831, 92596, 358382, 828536, 745024, 625714, 419421, 490391, 877, 904247, 997601, 492171, 750278, 458177, 687130, 842035, 986850, 942527, 585312, 920140, 344743, 102145, 767222, 524482, 970643, 351191, 668726, 853917, 823724, 279553, 341556, 631931, 948590, 591683, 185770, 460146, 995775, 292401, 738859, 98247, 66876, 497496, 772160, 168010, 915266, 164621, 69225, 856415, 755958, 630030, 289661, 292086, 831104, 254321, 284361, 439959, 630910, 540167, 550075, 715924, 492146, 960361, 329129, 888020, 368740, 397246, 524720, 365684, 809875, 435680, 919284, 26827, 974880, 49656, 70434, 885614, 540433, 215032, 754361, 199196, 85095, 634693, 250117, 323742, 558069, 912224, 887459, 72605, 308993, 321014, 176512, 507889, 581048, 146657, 641767, 735529, 916, 310086, 794807, 973816, 591259, 145238, 778476, 695963, 397033, 810697, 73278, 567660, 705388, 851762, 341909, 955379, 355424, 978457, 753027, 539421, 93408, 972537, 25210, 665947, 980154, 527147, 312630, 481305, 516979, 13030, 98464, 774954, 475267, 374095, 478139, 197107, 787118, 743185, 339593, 731608, 929059, 892396, 525725, 998023, 972527, 689228, 905451, 838838, 418463, 987026, 284877, 300393, 765199, 106280, 247809, 175346, 263465, 186667, 698527, 960488, 135656, 769000, 613247, 710711, 984532, 724396, 122531, 921575, 326507, 231594, 723240, 857067, 779064, 950428, 824663, 64516, 268628, 913782, 76061, 89885, 136997, 708647, 736863, 607051, 45884, 775091, 403524, 15334, 773540, 589884, 784601, 107677, 340161, 321118, 208240, 319853, 189290, 574920, 916325, 267541, 288770, 223645, 165732, 18279, 690354, 946661, 774101, 787965, 538883, 253830, 192137, 108618, 261546, 154925, 675396, 658392, 645085, 121315, 862535, 301906, 193203, 328501, 828405, 853253, 644586, 821560, 543429, 163300, 234979, 796489, 245923, 739028, 74186, 871233, 486192, 72177, 251993, 648856, 244519, 288072, 161500, 362671, 155511, 121971, 162553, 424466, 303880, 186402, 601065, 81929, 719553, 359975, 865205, 290791, 594970, 121803, 216436, 759277, 348763, 502869, 10988, 598565, 237061, 119999, 598371, 153212, 780736, 72970, 242978, 74096, 360427, 697722, 473766, 726021, 98072, 738986, 669885, 146415, 961860, 119194, 299426, 603458, 867651, 497244, 357396, 89395, 51328, 707276, 518158, 532419, 19319, 624987, 689194, 504202, 404627, 717824, 638216, 406881, 905008, 617956, 564283, 409760, 230343, 432835, 32607, 853789, 390622, 289943, 741687, 257015, 865406, 786811, 930859, 701480, 244874, 868853, 952346, 489710, 995809, 230334, 983211, 156962, 406667, 299210, 440860, 440427, 383496, 742408, 944380, 262912, 83824, 317843, 642193, 796152, 815066, 637920, 321267, 829844, 357899, 321999, 525508, 192899, 551576, 563213, 13617, 164976, 672980, 759448, 3966, 733563, 649684, 734320, 799638, 945566, 941909, 327022, 971412, 487381, 798243, 160562, 144696, 267597, 483059, 327974, 954060, 615530, 660383, 322987, 68285, 576703, 656250, 567343, 488141, 87724, 536467, 771693, 508736, 437681, 900721, 318466, 472933, 662141, 123835, 686717, 960217, 201915, 225442, 36182, 323050, 252691, 508356, 489403, 662567, 527530, 58235, 222193, 833247, 159154, 344428, 764538, 875267, 837635, 981598, 471146, 110176, 850526, 427474, 474571, 332629, 779022, 344203, 937406, 399766, 503061, 906465, 619810, 642367, 873207, 960581, 105927, 782935, 634966, 737761, 731439, 738937, 936260, 5149, 333625, 879921, 525849, 665560, 770579, 436575, 502229, 318696, 775650, 770655, 842151, 360793, 983969, 827564, 224270, 500501, 939332, 590270, 64928, 288494, 562635, 610741, 909046, 594733, 532671, 912525, 340093, 716512, 987218, 126525, 484976, 820350, 689746, 644292, 22966, 340473, 525785, 131216, 151668, 143440, 189251, 703120, 417486, 993628, 259374, 343057, 167752, 710752, 710777, 336507, 177893, 488318, 265165, 298407, 102313, 722137, 659804, 582731, 649055, 296357, 207015, 998077, 403101, 466129, 313057, 472912, 154520, 401447, 831684, 603276, 551087, 680434, 322703, 766146, 320499, 139130, 511279, 507731, 3438, 588057, 519424, 697508, 758734, 760232, 942668, 791321, 403295, 49210, 292726, 15014, 292165, 203983, 138182, 850350, 802224, 527172, 600515, 786495, 262685, 302248, 783324, 867478, 695063, 103877, 400487, 437330, 261681, 684780, 318935, 413315, 719452, 45871, 667440, 588394, 855517, 510794, 393633, 962042, 943794, 15112, 365945, 883072, 948433, 948377, 366463, 375016, 56781, 486890, 744789, 109942, 895745, 703818, 780371, 943105, 860498, 97766, 602956, 915019, 795212, 992380, 704095, 161723, 200569, 872347, 95989, 104672, 443036, 462398, 66071, 14245, 439494, 364821, 373458, 160168, 386299, 591762, 802163, 655418, 732497, 805651, 887635, 399263, 739731, 435587, 384252, 372137, 31701, 809956, 846125, 917542, 307693, 568620, 853755, 601558, 866144, 779277, 169187, 817319, 84001, 123411, 900983, 602454, 565540, 771584, 287089, 937254, 749964, 773174, 325302, 640368, 996772, 18551, 910191, 375890, 216651, 861178, 587582, 932574, 743424, 100502, 174735, 544536, 191723, 867254, 674525, 198185, 11438, 143207, 417967, 937184, 263655, 175930, 805966, 987843, 117037, 158737, 844610, 345692, 443814, 949872, 27875, 340585, 631440, 383534, 930321, 523002, 641581, 779045, 266714, 171555, 608044, 210718, 924519, 660560, 985668, 597983, 96494, 372346, 139174, 134873, 511005, 518333, 755581, 892345, 961869, 117406, 276431, 817397, 577953, 697655, 83505, 583912, 622859, 684843, 546292, 319075, 195807, 539998, 238936, 936384, 205524, 373064, 594769, 393233, 230356, 121566, 586571, 658816, 867176, 245691, 714701, 648979, 161393, 502738, 44913, 409072, 590362, 449948, 366937, 129252, 354136, 14944, 900239, 296826, 697398, 185338, 445377, 342250, 899022, 927878, 839354, 462000, 213107, 186501, 956419, 631509, 306339, 654167, 848638, 808126, 826281, 555504, 535662, 277885, 319213, 299698, 268812, 514854, 638643, 353137, 796391, 594206, 502271, 779992, 885061, 660097, 800173, 767583, 292209, 966943, 187104, 378799, 399077, 311819, 535633, 304010, 154825, 155712, 152749, 244723, 597345, 886187, 634749, 238697, 598555, 297998, 289464, 227835, 341371, 786135, 66642, 333990, 545919, 757861, 565925, 631793, 577615, 902934, 517314, 264338, 877105, 833248, 657327, 256166, 621217, 281185, 232653, 171058, 360419, 747791, 906793, 16939, 257422, 241922, 893275, 599091, 749963, 484648, 492342, 99989, 187312, 505737, 431689, 10747, 189130, 325549, 241474, 414016, 244295, 400037, 738917, 759348, 692644, 852787, 629792, 22331, 17159, 377713, 622400, 570689, 750593, 738990, 757907, 360124, 31549, 710451, 761565, 245619, 187695, 782912, 931723, 945518, 37879, 745534, 9606, 116067, 480028, 701824, 964994, 69938, 546152, 707298, 708995, 196234, 642058, 296262, 102091, 92492, 125721, 572371, 811292, 226211, 767750, 216936, 142218, 761399, 858482, 219428, 985467, 859736, 612477, 662718, 599660, 2099, 316544, 541760, 445818, 21376, 686135, 372321, 799831, 429625, 109660, 648309, 54685, 899615, 394476, 411834, 84734, 297050, 747001, 124369, 164279, 135359, 753547, 592268, 937867, 689045, 383033, 532349, 787050, 204485, 552329, 936903, 195101, 955425, 487123, 874297, 61837, 455889, 608517, 114757, 162754, 901962, 577107, 910350, 498028, 590132, 485371, 977362, 139799, 191981, 388405, 2882, 587508, 347761, 102259, 622006, 975447, 46979] +[877, 916, 1531, 2099, 2882, 3438, 3966, 5149, 9606, 10747, 10988, 11438, 13030, 13617, 14245, 14425, 14944, 15014, 15112, 15334, 16939, 17159, 18279, 18504, 18551, 19319, 19542, 21376, 22331, 22966, 25210, 26827, 27875, 28594, 31549, 31701, 32607, 36182, 36890, 37879, 44913, 45871, 45884, 46979, 49210, 49656, 51328, 54685, 56781, 58235, 61837, 64516, 64776, 64928, 66071, 66642, 66876, 68285, 69225, 69938, 70434, 72177, 72605, 72970, 73278, 74096, 74186, 76061, 81929, 83505, 83824, 84001, 84734, 85095, 87724, 89395, 89885, 92492, 92596, 93408, 95989, 96494, 97766, 97928, 98072, 98247, 98464, 99989, 100502, 102091, 102145, 102259, 102313, 103877, 104672, 105927, 106280, 107677, 108618, 109660, 109942, 110176, 114757, 116067, 117037, 117406, 119194, 119999, 120711, 121315, 121566, 121803, 121971, 122531, 123411, 123835, 124369, 125721, 125816, 126525, 129252, 131216, 131391, 134873, 135359, 135656, 136997, 138182, 139130, 139174, 139799, 141687, 142218, 143207, 143440, 144696, 145238, 146415, 146657, 151668, 152749, 153212, 154520, 154825, 154925, 155511, 155712, 156962, 158737, 159154, 160168, 160562, 161393, 161500, 161723, 162553, 162754, 163300, 164279, 164621, 164976, 165732, 167752, 168010, 169187, 171058, 171555, 171783, 174735, 175346, 175930, 176209, 176512, 177893, 178866, 185338, 185770, 186402, 186501, 186667, 187104, 187312, 187695, 189130, 189251, 189290, 190341, 191314, 191723, 191981, 192137, 192899, 193203, 195101, 195807, 196234, 197107, 198185, 199196, 200569, 201915, 203309, 203983, 204485, 205524, 207015, 208240, 209703, 210718, 213107, 215032, 216003, 216436, 216651, 216936, 219428, 222193, 223645, 224270, 225442, 226211, 227835, 230334, 230343, 230356, 231594, 232653, 234979, 236676, 237061, 238697, 238936, 241474, 241922, 242978, 244295, 244519, 244723, 244874, 245619, 245691, 245923, 247809, 250117, 251993, 252691, 253830, 254321, 256166, 257015, 257422, 257989, 259374, 261546, 261681, 262685, 262912, 263465, 263655, 264338, 265165, 266714, 267541, 267597, 268124, 268628, 268812, 276431, 277885, 279553, 281185, 284361, 284877, 287089, 288072, 288494, 288770, 289464, 289661, 289943, 290791, 292086, 292165, 292209, 292401, 292726, 296262, 296357, 296826, 297050, 297998, 298407, 299210, 299426, 299698, 300393, 300704, 301906, 302248, 303880, 304010, 306339, 307693, 308993, 310086, 311819, 312630, 313057, 316544, 317843, 318466, 318696, 318935, 319075, 319213, 319853, 320499, 321014, 321118, 321267, 321999, 322703, 322987, 323050, 323742, 324388, 325302, 325549, 326507, 327022, 327974, 328501, 329129, 332629, 333625, 333990, 336507, 339593, 340093, 340161, 340223, 340473, 340585, 340982, 341371, 341556, 341909, 342250, 343057, 344203, 344428, 344743, 345692, 347761, 348763, 349147, 351191, 353137, 354136, 355424, 357396, 357899, 358382, 359975, 360124, 360419, 360427, 360793, 362671, 364821, 365684, 365945, 366463, 366937, 368740, 372137, 372321, 372346, 373064, 373458, 374095, 375016, 375890, 377713, 378799, 383033, 383496, 383534, 384252, 386299, 388405, 390622, 393233, 393633, 394476, 397033, 397246, 399077, 399263, 399766, 400037, 400487, 401447, 403101, 403295, 403524, 404627, 405632, 406667, 406881, 409072, 409760, 411834, 413315, 414016, 417486, 417967, 418463, 418488, 419421, 424466, 427474, 429625, 431689, 432835, 435587, 435680, 436575, 437330, 437681, 439494, 439785, 439959, 440427, 440860, 443036, 443814, 445377, 445818, 449320, 449948, 452625, 454239, 455889, 458177, 460146, 462000, 462398, 463151, 463656, 466129, 471146, 472912, 472933, 473766, 474571, 475267, 478139, 480028, 480781, 481305, 483059, 484648, 484976, 485371, 486192, 486890, 487123, 487381, 488141, 488318, 489403, 489710, 490391, 492146, 492171, 492342, 495491, 497244, 497496, 498028, 500501, 502229, 502271, 502738, 502869, 503061, 504202, 504647, 505737, 507731, 507889, 508356, 508539, 508736, 510794, 511005, 511279, 514854, 516979, 517314, 518158, 518333, 519424, 523002, 524482, 524720, 525508, 525725, 525785, 525849, 525980, 526902, 527147, 527172, 527530, 532349, 532419, 532671, 535633, 535662, 536467, 538883, 539421, 539998, 540167, 540433, 541760, 543429, 544536, 545919, 546152, 546292, 550075, 551087, 551576, 552329, 555504, 558069, 562635, 563213, 564283, 565540, 565925, 567343, 567660, 568620, 570689, 572371, 572422, 574920, 576703, 577107, 577615, 577953, 581048, 582731, 583912, 585312, 586571, 587508, 587582, 588057, 588394, 588624, 589884, 590132, 590270, 590362, 591170, 591259, 591683, 591762, 592268, 594206, 594733, 594769, 594970, 597345, 597983, 598371, 598406, 598555, 598565, 599091, 599471, 599660, 600515, 601065, 601558, 602454, 602956, 603276, 603458, 605800, 607051, 608044, 608517, 610741, 611683, 612477, 613247, 615530, 615894, 617956, 619810, 621217, 622006, 622400, 622859, 624987, 625714, 629201, 629792, 630030, 630910, 631440, 631509, 631793, 631931, 634693, 634749, 634966, 637920, 638216, 638643, 639696, 640368, 641581, 641767, 642058, 642193, 642367, 644292, 644586, 645085, 646605, 648309, 648856, 648979, 649055, 649684, 654167, 655418, 656250, 657327, 658392, 658816, 659804, 660097, 660383, 660560, 662141, 662567, 662718, 665560, 665947, 667440, 668141, 668726, 669885, 672980, 674525, 674925, 675396, 680434, 681310, 684780, 684843, 686135, 686717, 687130, 689045, 689194, 689228, 689746, 689812, 690354, 692644, 695063, 695963, 697398, 697508, 697655, 697722, 698527, 699697, 701480, 701824, 703120, 703818, 704095, 705380, 705388, 707276, 707298, 708647, 708995, 710451, 710711, 710752, 710777, 714204, 714701, 715924, 716512, 717725, 717824, 719452, 719553, 722137, 723240, 724396, 726021, 726711, 728763, 728901, 731138, 731439, 731608, 731856, 732497, 733563, 734320, 735529, 736863, 737761, 738859, 738917, 738937, 738986, 738990, 739028, 739731, 741687, 742408, 743185, 743424, 744789, 745024, 745534, 747001, 747791, 749963, 749964, 750278, 750593, 753027, 753547, 754361, 755581, 755958, 757861, 757907, 758734, 759277, 759348, 759448, 760232, 761399, 761565, 764538, 765199, 766146, 767222, 767583, 767750, 769000, 770579, 770655, 771584, 771693, 772160, 773174, 773540, 774101, 774954, 775091, 775650, 778476, 779022, 779045, 779064, 779277, 779992, 780371, 780736, 782912, 782935, 783324, 784601, 786135, 786386, 786495, 786811, 787050, 787118, 787965, 791321, 794807, 795212, 796152, 796391, 796489, 797937, 798243, 799638, 799831, 800173, 802163, 802224, 805651, 805966, 806558, 808126, 809875, 809956, 810697, 811292, 811820, 815066, 817319, 817397, 820350, 821560, 823724, 824663, 826281, 827564, 828405, 828536, 829844, 831104, 831684, 833247, 833248, 837635, 838838, 839354, 842035, 842151, 842896, 844610, 846125, 848638, 850350, 850526, 851762, 852787, 852849, 853253, 853755, 853789, 853917, 854116, 855517, 856415, 857067, 858482, 859736, 860498, 861178, 862535, 865205, 865406, 866144, 867176, 867254, 867478, 867651, 868853, 870148, 871233, 872347, 873207, 874297, 875267, 877105, 879921, 883072, 885061, 885614, 886187, 887459, 887635, 888020, 891392, 892345, 892396, 892620, 893275, 895745, 895911, 899022, 899615, 900239, 900721, 900983, 901962, 902934, 903831, 904247, 904940, 905008, 905451, 906465, 906793, 909046, 910191, 910350, 912224, 912525, 913782, 915019, 915266, 916325, 916343, 917542, 919284, 920140, 921077, 921575, 922837, 924519, 926700, 927878, 929059, 930321, 930859, 931723, 932574, 936260, 936384, 936903, 937184, 937254, 937406, 937867, 938792, 939332, 941909, 942527, 942668, 943105, 943794, 944380, 945518, 945566, 946661, 947287, 948377, 948433, 948590, 949872, 950428, 951605, 952346, 954060, 955379, 955425, 956419, 956685, 960217, 960361, 960488, 960581, 961860, 961869, 962042, 964994, 966943, 970563, 970643, 971412, 972527, 972537, 973816, 974880, 975447, 977362, 978457, 980154, 981598, 983211, 983969, 984532, 985467, 985668, 986850, 987026, 987218, 987843, 992380, 993628, 994247, 995775, 995809, 996772, 997601, 998023, 998077] +517314 +517314 +Обычный: 3.34402400298859 +Оптимиз: 2.316900566002005 + +#ВЫВОД: минимальная оптимизация (Замена list на set) дало прирост в 30% +""" \ No newline at end of file From 076a429b0643f1fa30e84dea8b845fba8f3424c0 Mon Sep 17 00:00:00 2001 From: Sergey Kopeykin Date: Wed, 1 Jul 2020 16:17:17 +0300 Subject: [PATCH 5/7] --- --- .../task_3.py" | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) 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 2430054c..ac9869c2 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" @@ -18,9 +18,10 @@ def create_list_int(list_len, l_border, r_border): # Использую set, что дает прирост производительности def get_median(base_list): for val in base_list: - cnt1 = 0 - cnt2 = -1 + cnt1 = cnt2 = 0 for val2 in base_list: + if val == val2: + continue if val2 < val: cnt1 += 1 else: @@ -33,9 +34,10 @@ def get_median(base_list): # Использую set, что дает прирост производительности def get_median_opt(base_list): for val in set(base_list): - cnt1 = 0 - cnt2 = -1 + cnt1 = cnt2 =0 for val2 in base_list: + if val == val2: + continue if val2 < val: cnt1 += 1 else: @@ -45,7 +47,7 @@ def get_median_opt(base_list): return None -a = create_list_int(500,0,1000000) +a = create_list_int(500,0,100000) print(a) print(sorted(a)) print(get_median(a)) From e66517f1954532a5ff2b0264f74709e3f5e5535b Mon Sep 17 00:00:00 2001 From: Sergey Kopeykin Date: Wed, 1 Jul 2020 16:26:20 +0300 Subject: [PATCH 6/7] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task_3.py" | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) 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 ac9869c2..67cd565f 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" @@ -34,7 +34,7 @@ def get_median(base_list): # Использую set, что дает прирост производительности def get_median_opt(base_list): for val in set(base_list): - cnt1 = cnt2 =0 + cnt1 = cnt2 = 0 for val2 in base_list: if val == val2: continue @@ -47,22 +47,39 @@ def get_median_opt(base_list): return None -a = create_list_int(500,0,100000) +a = create_list_int(500, 0, 100000) print(a) print(sorted(a)) print(get_median(a)) print(get_median_opt(a)) -print('Обычный: ', timeit('get_median(a)', 'from __main__ import get_median, a', number=100)) -print('Оптимиз: ', timeit('get_median_opt(a)', 'from __main__ import get_median_opt, a', number=100)) - +print('Обычный: ', + timeit('get_median(create_list_int(500,0,1000000))', 'from __main__ import get_median, create_list_int', + number=500)) +print('Оптимиз: ', + timeit('get_median_opt(create_list_int(500,0,1000000))', 'from __main__ import get_median_opt, create_list_int', + number=500)) """ -[300704, 236676, 598406, 726711, 811820, 588624, 191314, 36890, 340223, 141687, 611683, 526902, 731856, 120711, 714204, 599471, 405632, 209703, 18504, 956685, 639696, 895911, 591170, 842896, 125816, 921077, 268124, 480781, 852849, 689812, 854116, 495491, 572422, 176209, 178866, 340982, 190341, 64776, 728901, 938792, 452625, 508539, 324388, 681310, 463656, 1531, 454239, 525980, 504647, 171783, 892620, 806558, 97928, 728763, 349147, 19542, 605800, 646605, 257989, 668141, 203309, 994247, 28594, 14425, 926700, 786386, 418488, 922837, 463151, 970563, 797937, 699697, 629201, 891392, 904940, 439785, 951605, 947287, 731138, 870148, 216003, 615894, 916343, 131391, 674925, 705380, 449320, 717725, 903831, 92596, 358382, 828536, 745024, 625714, 419421, 490391, 877, 904247, 997601, 492171, 750278, 458177, 687130, 842035, 986850, 942527, 585312, 920140, 344743, 102145, 767222, 524482, 970643, 351191, 668726, 853917, 823724, 279553, 341556, 631931, 948590, 591683, 185770, 460146, 995775, 292401, 738859, 98247, 66876, 497496, 772160, 168010, 915266, 164621, 69225, 856415, 755958, 630030, 289661, 292086, 831104, 254321, 284361, 439959, 630910, 540167, 550075, 715924, 492146, 960361, 329129, 888020, 368740, 397246, 524720, 365684, 809875, 435680, 919284, 26827, 974880, 49656, 70434, 885614, 540433, 215032, 754361, 199196, 85095, 634693, 250117, 323742, 558069, 912224, 887459, 72605, 308993, 321014, 176512, 507889, 581048, 146657, 641767, 735529, 916, 310086, 794807, 973816, 591259, 145238, 778476, 695963, 397033, 810697, 73278, 567660, 705388, 851762, 341909, 955379, 355424, 978457, 753027, 539421, 93408, 972537, 25210, 665947, 980154, 527147, 312630, 481305, 516979, 13030, 98464, 774954, 475267, 374095, 478139, 197107, 787118, 743185, 339593, 731608, 929059, 892396, 525725, 998023, 972527, 689228, 905451, 838838, 418463, 987026, 284877, 300393, 765199, 106280, 247809, 175346, 263465, 186667, 698527, 960488, 135656, 769000, 613247, 710711, 984532, 724396, 122531, 921575, 326507, 231594, 723240, 857067, 779064, 950428, 824663, 64516, 268628, 913782, 76061, 89885, 136997, 708647, 736863, 607051, 45884, 775091, 403524, 15334, 773540, 589884, 784601, 107677, 340161, 321118, 208240, 319853, 189290, 574920, 916325, 267541, 288770, 223645, 165732, 18279, 690354, 946661, 774101, 787965, 538883, 253830, 192137, 108618, 261546, 154925, 675396, 658392, 645085, 121315, 862535, 301906, 193203, 328501, 828405, 853253, 644586, 821560, 543429, 163300, 234979, 796489, 245923, 739028, 74186, 871233, 486192, 72177, 251993, 648856, 244519, 288072, 161500, 362671, 155511, 121971, 162553, 424466, 303880, 186402, 601065, 81929, 719553, 359975, 865205, 290791, 594970, 121803, 216436, 759277, 348763, 502869, 10988, 598565, 237061, 119999, 598371, 153212, 780736, 72970, 242978, 74096, 360427, 697722, 473766, 726021, 98072, 738986, 669885, 146415, 961860, 119194, 299426, 603458, 867651, 497244, 357396, 89395, 51328, 707276, 518158, 532419, 19319, 624987, 689194, 504202, 404627, 717824, 638216, 406881, 905008, 617956, 564283, 409760, 230343, 432835, 32607, 853789, 390622, 289943, 741687, 257015, 865406, 786811, 930859, 701480, 244874, 868853, 952346, 489710, 995809, 230334, 983211, 156962, 406667, 299210, 440860, 440427, 383496, 742408, 944380, 262912, 83824, 317843, 642193, 796152, 815066, 637920, 321267, 829844, 357899, 321999, 525508, 192899, 551576, 563213, 13617, 164976, 672980, 759448, 3966, 733563, 649684, 734320, 799638, 945566, 941909, 327022, 971412, 487381, 798243, 160562, 144696, 267597, 483059, 327974, 954060, 615530, 660383, 322987, 68285, 576703, 656250, 567343, 488141, 87724, 536467, 771693, 508736, 437681, 900721, 318466, 472933, 662141, 123835, 686717, 960217, 201915, 225442, 36182, 323050, 252691, 508356, 489403, 662567, 527530, 58235, 222193, 833247, 159154, 344428, 764538, 875267, 837635, 981598, 471146, 110176, 850526, 427474, 474571, 332629, 779022, 344203, 937406, 399766, 503061, 906465, 619810, 642367, 873207, 960581, 105927, 782935, 634966, 737761, 731439, 738937, 936260, 5149, 333625, 879921, 525849, 665560, 770579, 436575, 502229, 318696, 775650, 770655, 842151, 360793, 983969, 827564, 224270, 500501, 939332, 590270, 64928, 288494, 562635, 610741, 909046, 594733, 532671, 912525, 340093, 716512, 987218, 126525, 484976, 820350, 689746, 644292, 22966, 340473, 525785, 131216, 151668, 143440, 189251, 703120, 417486, 993628, 259374, 343057, 167752, 710752, 710777, 336507, 177893, 488318, 265165, 298407, 102313, 722137, 659804, 582731, 649055, 296357, 207015, 998077, 403101, 466129, 313057, 472912, 154520, 401447, 831684, 603276, 551087, 680434, 322703, 766146, 320499, 139130, 511279, 507731, 3438, 588057, 519424, 697508, 758734, 760232, 942668, 791321, 403295, 49210, 292726, 15014, 292165, 203983, 138182, 850350, 802224, 527172, 600515, 786495, 262685, 302248, 783324, 867478, 695063, 103877, 400487, 437330, 261681, 684780, 318935, 413315, 719452, 45871, 667440, 588394, 855517, 510794, 393633, 962042, 943794, 15112, 365945, 883072, 948433, 948377, 366463, 375016, 56781, 486890, 744789, 109942, 895745, 703818, 780371, 943105, 860498, 97766, 602956, 915019, 795212, 992380, 704095, 161723, 200569, 872347, 95989, 104672, 443036, 462398, 66071, 14245, 439494, 364821, 373458, 160168, 386299, 591762, 802163, 655418, 732497, 805651, 887635, 399263, 739731, 435587, 384252, 372137, 31701, 809956, 846125, 917542, 307693, 568620, 853755, 601558, 866144, 779277, 169187, 817319, 84001, 123411, 900983, 602454, 565540, 771584, 287089, 937254, 749964, 773174, 325302, 640368, 996772, 18551, 910191, 375890, 216651, 861178, 587582, 932574, 743424, 100502, 174735, 544536, 191723, 867254, 674525, 198185, 11438, 143207, 417967, 937184, 263655, 175930, 805966, 987843, 117037, 158737, 844610, 345692, 443814, 949872, 27875, 340585, 631440, 383534, 930321, 523002, 641581, 779045, 266714, 171555, 608044, 210718, 924519, 660560, 985668, 597983, 96494, 372346, 139174, 134873, 511005, 518333, 755581, 892345, 961869, 117406, 276431, 817397, 577953, 697655, 83505, 583912, 622859, 684843, 546292, 319075, 195807, 539998, 238936, 936384, 205524, 373064, 594769, 393233, 230356, 121566, 586571, 658816, 867176, 245691, 714701, 648979, 161393, 502738, 44913, 409072, 590362, 449948, 366937, 129252, 354136, 14944, 900239, 296826, 697398, 185338, 445377, 342250, 899022, 927878, 839354, 462000, 213107, 186501, 956419, 631509, 306339, 654167, 848638, 808126, 826281, 555504, 535662, 277885, 319213, 299698, 268812, 514854, 638643, 353137, 796391, 594206, 502271, 779992, 885061, 660097, 800173, 767583, 292209, 966943, 187104, 378799, 399077, 311819, 535633, 304010, 154825, 155712, 152749, 244723, 597345, 886187, 634749, 238697, 598555, 297998, 289464, 227835, 341371, 786135, 66642, 333990, 545919, 757861, 565925, 631793, 577615, 902934, 517314, 264338, 877105, 833248, 657327, 256166, 621217, 281185, 232653, 171058, 360419, 747791, 906793, 16939, 257422, 241922, 893275, 599091, 749963, 484648, 492342, 99989, 187312, 505737, 431689, 10747, 189130, 325549, 241474, 414016, 244295, 400037, 738917, 759348, 692644, 852787, 629792, 22331, 17159, 377713, 622400, 570689, 750593, 738990, 757907, 360124, 31549, 710451, 761565, 245619, 187695, 782912, 931723, 945518, 37879, 745534, 9606, 116067, 480028, 701824, 964994, 69938, 546152, 707298, 708995, 196234, 642058, 296262, 102091, 92492, 125721, 572371, 811292, 226211, 767750, 216936, 142218, 761399, 858482, 219428, 985467, 859736, 612477, 662718, 599660, 2099, 316544, 541760, 445818, 21376, 686135, 372321, 799831, 429625, 109660, 648309, 54685, 899615, 394476, 411834, 84734, 297050, 747001, 124369, 164279, 135359, 753547, 592268, 937867, 689045, 383033, 532349, 787050, 204485, 552329, 936903, 195101, 955425, 487123, 874297, 61837, 455889, 608517, 114757, 162754, 901962, 577107, 910350, 498028, 590132, 485371, 977362, 139799, 191981, 388405, 2882, 587508, 347761, 102259, 622006, 975447, 46979] -[877, 916, 1531, 2099, 2882, 3438, 3966, 5149, 9606, 10747, 10988, 11438, 13030, 13617, 14245, 14425, 14944, 15014, 15112, 15334, 16939, 17159, 18279, 18504, 18551, 19319, 19542, 21376, 22331, 22966, 25210, 26827, 27875, 28594, 31549, 31701, 32607, 36182, 36890, 37879, 44913, 45871, 45884, 46979, 49210, 49656, 51328, 54685, 56781, 58235, 61837, 64516, 64776, 64928, 66071, 66642, 66876, 68285, 69225, 69938, 70434, 72177, 72605, 72970, 73278, 74096, 74186, 76061, 81929, 83505, 83824, 84001, 84734, 85095, 87724, 89395, 89885, 92492, 92596, 93408, 95989, 96494, 97766, 97928, 98072, 98247, 98464, 99989, 100502, 102091, 102145, 102259, 102313, 103877, 104672, 105927, 106280, 107677, 108618, 109660, 109942, 110176, 114757, 116067, 117037, 117406, 119194, 119999, 120711, 121315, 121566, 121803, 121971, 122531, 123411, 123835, 124369, 125721, 125816, 126525, 129252, 131216, 131391, 134873, 135359, 135656, 136997, 138182, 139130, 139174, 139799, 141687, 142218, 143207, 143440, 144696, 145238, 146415, 146657, 151668, 152749, 153212, 154520, 154825, 154925, 155511, 155712, 156962, 158737, 159154, 160168, 160562, 161393, 161500, 161723, 162553, 162754, 163300, 164279, 164621, 164976, 165732, 167752, 168010, 169187, 171058, 171555, 171783, 174735, 175346, 175930, 176209, 176512, 177893, 178866, 185338, 185770, 186402, 186501, 186667, 187104, 187312, 187695, 189130, 189251, 189290, 190341, 191314, 191723, 191981, 192137, 192899, 193203, 195101, 195807, 196234, 197107, 198185, 199196, 200569, 201915, 203309, 203983, 204485, 205524, 207015, 208240, 209703, 210718, 213107, 215032, 216003, 216436, 216651, 216936, 219428, 222193, 223645, 224270, 225442, 226211, 227835, 230334, 230343, 230356, 231594, 232653, 234979, 236676, 237061, 238697, 238936, 241474, 241922, 242978, 244295, 244519, 244723, 244874, 245619, 245691, 245923, 247809, 250117, 251993, 252691, 253830, 254321, 256166, 257015, 257422, 257989, 259374, 261546, 261681, 262685, 262912, 263465, 263655, 264338, 265165, 266714, 267541, 267597, 268124, 268628, 268812, 276431, 277885, 279553, 281185, 284361, 284877, 287089, 288072, 288494, 288770, 289464, 289661, 289943, 290791, 292086, 292165, 292209, 292401, 292726, 296262, 296357, 296826, 297050, 297998, 298407, 299210, 299426, 299698, 300393, 300704, 301906, 302248, 303880, 304010, 306339, 307693, 308993, 310086, 311819, 312630, 313057, 316544, 317843, 318466, 318696, 318935, 319075, 319213, 319853, 320499, 321014, 321118, 321267, 321999, 322703, 322987, 323050, 323742, 324388, 325302, 325549, 326507, 327022, 327974, 328501, 329129, 332629, 333625, 333990, 336507, 339593, 340093, 340161, 340223, 340473, 340585, 340982, 341371, 341556, 341909, 342250, 343057, 344203, 344428, 344743, 345692, 347761, 348763, 349147, 351191, 353137, 354136, 355424, 357396, 357899, 358382, 359975, 360124, 360419, 360427, 360793, 362671, 364821, 365684, 365945, 366463, 366937, 368740, 372137, 372321, 372346, 373064, 373458, 374095, 375016, 375890, 377713, 378799, 383033, 383496, 383534, 384252, 386299, 388405, 390622, 393233, 393633, 394476, 397033, 397246, 399077, 399263, 399766, 400037, 400487, 401447, 403101, 403295, 403524, 404627, 405632, 406667, 406881, 409072, 409760, 411834, 413315, 414016, 417486, 417967, 418463, 418488, 419421, 424466, 427474, 429625, 431689, 432835, 435587, 435680, 436575, 437330, 437681, 439494, 439785, 439959, 440427, 440860, 443036, 443814, 445377, 445818, 449320, 449948, 452625, 454239, 455889, 458177, 460146, 462000, 462398, 463151, 463656, 466129, 471146, 472912, 472933, 473766, 474571, 475267, 478139, 480028, 480781, 481305, 483059, 484648, 484976, 485371, 486192, 486890, 487123, 487381, 488141, 488318, 489403, 489710, 490391, 492146, 492171, 492342, 495491, 497244, 497496, 498028, 500501, 502229, 502271, 502738, 502869, 503061, 504202, 504647, 505737, 507731, 507889, 508356, 508539, 508736, 510794, 511005, 511279, 514854, 516979, 517314, 518158, 518333, 519424, 523002, 524482, 524720, 525508, 525725, 525785, 525849, 525980, 526902, 527147, 527172, 527530, 532349, 532419, 532671, 535633, 535662, 536467, 538883, 539421, 539998, 540167, 540433, 541760, 543429, 544536, 545919, 546152, 546292, 550075, 551087, 551576, 552329, 555504, 558069, 562635, 563213, 564283, 565540, 565925, 567343, 567660, 568620, 570689, 572371, 572422, 574920, 576703, 577107, 577615, 577953, 581048, 582731, 583912, 585312, 586571, 587508, 587582, 588057, 588394, 588624, 589884, 590132, 590270, 590362, 591170, 591259, 591683, 591762, 592268, 594206, 594733, 594769, 594970, 597345, 597983, 598371, 598406, 598555, 598565, 599091, 599471, 599660, 600515, 601065, 601558, 602454, 602956, 603276, 603458, 605800, 607051, 608044, 608517, 610741, 611683, 612477, 613247, 615530, 615894, 617956, 619810, 621217, 622006, 622400, 622859, 624987, 625714, 629201, 629792, 630030, 630910, 631440, 631509, 631793, 631931, 634693, 634749, 634966, 637920, 638216, 638643, 639696, 640368, 641581, 641767, 642058, 642193, 642367, 644292, 644586, 645085, 646605, 648309, 648856, 648979, 649055, 649684, 654167, 655418, 656250, 657327, 658392, 658816, 659804, 660097, 660383, 660560, 662141, 662567, 662718, 665560, 665947, 667440, 668141, 668726, 669885, 672980, 674525, 674925, 675396, 680434, 681310, 684780, 684843, 686135, 686717, 687130, 689045, 689194, 689228, 689746, 689812, 690354, 692644, 695063, 695963, 697398, 697508, 697655, 697722, 698527, 699697, 701480, 701824, 703120, 703818, 704095, 705380, 705388, 707276, 707298, 708647, 708995, 710451, 710711, 710752, 710777, 714204, 714701, 715924, 716512, 717725, 717824, 719452, 719553, 722137, 723240, 724396, 726021, 726711, 728763, 728901, 731138, 731439, 731608, 731856, 732497, 733563, 734320, 735529, 736863, 737761, 738859, 738917, 738937, 738986, 738990, 739028, 739731, 741687, 742408, 743185, 743424, 744789, 745024, 745534, 747001, 747791, 749963, 749964, 750278, 750593, 753027, 753547, 754361, 755581, 755958, 757861, 757907, 758734, 759277, 759348, 759448, 760232, 761399, 761565, 764538, 765199, 766146, 767222, 767583, 767750, 769000, 770579, 770655, 771584, 771693, 772160, 773174, 773540, 774101, 774954, 775091, 775650, 778476, 779022, 779045, 779064, 779277, 779992, 780371, 780736, 782912, 782935, 783324, 784601, 786135, 786386, 786495, 786811, 787050, 787118, 787965, 791321, 794807, 795212, 796152, 796391, 796489, 797937, 798243, 799638, 799831, 800173, 802163, 802224, 805651, 805966, 806558, 808126, 809875, 809956, 810697, 811292, 811820, 815066, 817319, 817397, 820350, 821560, 823724, 824663, 826281, 827564, 828405, 828536, 829844, 831104, 831684, 833247, 833248, 837635, 838838, 839354, 842035, 842151, 842896, 844610, 846125, 848638, 850350, 850526, 851762, 852787, 852849, 853253, 853755, 853789, 853917, 854116, 855517, 856415, 857067, 858482, 859736, 860498, 861178, 862535, 865205, 865406, 866144, 867176, 867254, 867478, 867651, 868853, 870148, 871233, 872347, 873207, 874297, 875267, 877105, 879921, 883072, 885061, 885614, 886187, 887459, 887635, 888020, 891392, 892345, 892396, 892620, 893275, 895745, 895911, 899022, 899615, 900239, 900721, 900983, 901962, 902934, 903831, 904247, 904940, 905008, 905451, 906465, 906793, 909046, 910191, 910350, 912224, 912525, 913782, 915019, 915266, 916325, 916343, 917542, 919284, 920140, 921077, 921575, 922837, 924519, 926700, 927878, 929059, 930321, 930859, 931723, 932574, 936260, 936384, 936903, 937184, 937254, 937406, 937867, 938792, 939332, 941909, 942527, 942668, 943105, 943794, 944380, 945518, 945566, 946661, 947287, 948377, 948433, 948590, 949872, 950428, 951605, 952346, 954060, 955379, 955425, 956419, 956685, 960217, 960361, 960488, 960581, 961860, 961869, 962042, 964994, 966943, 970563, 970643, 971412, 972527, 972537, 973816, 974880, 975447, 977362, 978457, 980154, 981598, 983211, 983969, 984532, 985467, 985668, 986850, 987026, 987218, 987843, 992380, 993628, 994247, 995775, 995809, 996772, 997601, 998023, 998077] -517314 -517314 -Обычный: 3.34402400298859 -Оптимиз: 2.316900566002005 +[91679, 94383, 34015, 40225, 76334, 48284, 13004, 54096, 65130, 83746, 1760, 61503, 38995, 89735, 93582, 11423, 45220, 4082, 1459, 60544, 41794, 70214, 78754, 54342, 82409, 33837, 65031, 38701, 91140, 98488, 1610, 11381, 25963, 37515, 93016, 58868, 86494, 36173, 68909, 67942, 29778, 14725, 91907, 54507, 74595, 79486, 18359, 55211, 60379, 32084, 31702, 3563, 21422, 66522, 22935, 24385, 69177, 70319, 33176, 62908, 7850, 40322, 36280, 87505, 59374, 32274, 50083, 74255, 44685, 75701, 7611, 6329, 79704, 20209, 88633, 6641, 70234, 29236, 24398, 54302, 15020, 38065, 53188, 56870, 57286, 28345, 55912, 6939, 21759, 24552, 35466, 8513, 65358, 25392, 63315, 84704, 68076, 5702, 135, 75435, 56395, 76312, 76556, 21849, 84286, 95311, 14402, 47498, 43487, 87548, 85684, 26279, 71224, 88967, 83061, 103, 51881, 64763, 66433, 11944, 46690, 70951, 9744, 89333, 59507, 35636, 17118, 45154, 10200, 54241, 35408, 55327, 25733, 80514, 18900, 37319, 86005, 41987, 48599, 13677, 24096, 42208, 90016, 8507, 16695, 17397, 88222, 14859, 53681, 63040, 14656, 75544, 89127, 81779, 85697, 23332, 24014, 8542, 42684, 28804, 45537, 17198, 78081, 30042, 93702, 67142, 69755, 6396, 42630, 76838, 1445, 58588, 10951, 73027, 82946, 9284, 14839, 5681, 11179, 22866, 13732, 84411, 53064, 75999, 75967, 2045, 73881, 34309, 80781, 16250, 52551, 14576, 12600, 207, 39198, 61849, 22444, 55081, 4052, 5929, 1038, 32087, 6304, 32806, 10704, 67502, 27914, 48615, 5394, 74292, 72851, 38083, 56431, 74931, 84488, 77618, 9309, 63047, 35388, 53730, 56037, 55361, 86079, 585, 94146, 98584, 5646, 42764, 6498, 37749, 76138, 67642, 16367, 47180, 33670, 38997, 76545, 66376, 98094, 55714, 84957, 31432, 84884, 68948, 85640, 88684, 59041, 60086, 80468, 92470, 35824, 25338, 50829, 71047, 80524, 197, 95570, 35037, 10182, 27607, 20372, 55915, 94934, 14725, 82082, 19961, 44252, 97911, 63861, 98789, 397, 49, 42592, 95567, 80271, 13634, 21325, 91650, 70004, 22048, 20460, 95114, 84166, 90975, 25663, 91766, 26591, 14360, 78227, 58422, 34549, 98111, 49027, 82759, 90392, 56456, 39190, 22065, 66724, 59674, 33662, 2587, 41101, 85319, 84930, 41010, 11022, 91613, 60079, 95970, 11161, 79216, 97581, 46200, 8787, 84616, 48949, 39628, 96014, 74035, 78617, 3012, 92115, 57526, 23087, 72686, 71244, 38795, 80827, 45865, 20715, 12484, 95443, 73329, 20163, 24825, 64950, 42859, 52198, 67431, 66558, 71893, 47899, 29753, 75127, 63662, 48245, 62135, 18132, 63960, 50874, 64271, 69783, 37902, 62369, 90895, 50940, 67635, 51548, 87539, 56816, 56703, 29449, 18144, 74077, 92860, 47708, 14550, 43039, 39939, 55561, 83822, 71724, 55102, 94364, 93486, 42048, 77171, 86154, 49491, 98246, 29273, 46398, 48289, 85032, 80557, 11203, 45196, 43746, 74519, 35457, 25885, 53750, 63911, 80753, 56720, 85855, 29384, 19091, 93828, 71859, 78473, 79281, 98631, 54530, 83362, 67266, 10921, 96671, 8698, 23580, 54699, 49414, 98863, 58825, 74075, 70403, 88169, 84736, 50811, 99234, 14330, 69141, 9404, 38438, 47173, 41573, 40753, 9350, 10649, 17782, 42273, 73680, 74413, 13729, 9909, 13615, 21483, 43003, 83737, 62697, 13631, 3339, 15701, 90304, 27742, 11590, 56170, 90024, 29286, 70476, 73245, 75852, 65902, 55536, 8717, 99496, 30789, 39740, 13744, 33190, 95517, 19057, 26819, 19317, 14124, 40101, 11475, 56350, 91503, 18100, 19356, 28706, 84806, 12045, 37140, 31459, 89851, 6295, 42379, 36153, 26438, 89337, 65723, 91595, 19622, 90040, 34824, 75689, 22968, 45180, 89753, 50794, 27173, 45181, 41961, 59870, 9023, 57313, 27261, 93545, 27211, 28707, 36900, 69305, 5780, 23510, 66469, 74551, 92701, 47353, 63823, 41073, 26302, 80664, 92070, 71958, 33577, 60267, 55856, 26019, 44652, 64168, 65790, 66111, 49413, 1794, 822, 95199, 30645, 10187, 69578, 48103, 1817, 42045, 28003, 56105, 11732, 31131, 17028, 89774, 74797, 50695, 60285, 35843, 57674, 49813, 32801, 51436, 95750, 11851, 42631, 73190, 59362, 99077, 9527, 6025, 38266, 65783, 92150, 93783, 10729, 77527, 88553, 63970, 97049, 16537, 37120, 73886, 97942, 98085, 65765, 53052, 9362, 60759, 15871, 33773, 36452, 89825, 66963, 55584, 11475, 68092, 44500, 72598, 34270, 21328, 46045, 97867, 8798, 43166, 84455, 55891, 12722, 97237, 99234, 49099, 95229, 92857, 55906, 42676, 67706, 73415, 75907, 28270, 61045, 68001, 7314, 79083, 40614, 76978, 68268, 43630, 51599, 11030, 32528, 82475, 42216, 57894, 34017, 7215, 6389, 35945, 1262, 92495, 16011, 51998, 6095, 73752, 7725, 79723, 18512, 50164, 88576, 40348, 71919, 89005, 89188, 46712, 71506, 43402, 23319, 66146, 13528, 13448, 1087, 47067, 8766, 84959, 28480, 17191, 16719, 60418, 28508, 43425, 66178, 63972, 91925, 53304, 65503, 821, 27637, 56921, 77584, 88514, 95988, 78577, 10817, 50550, 70900, 99353, 58574, 4385, 26396, 78581, 25309, 95677, 71243, 18413, 17126, 25347, 10840, 68122, 35764, 31357, 71539, 10031, 35416, 92180, 5094, 78143, 58647, 35920, 61089, 5150, 76368, 50622, 39839, 51700, 13543, 64298, 99168, 5647, 29861, 95022, 43386, 74246, 23217, 28286, 2189, 86327, 29289, 78554, 65092, 43797, 80769, 54085, 67241, 53008, 59856, 33559, 41939, 33964, 72138, 27021, 39428, 27551, 34796, 64753, 81365, 21000, 1145, 87701, 85180, 60861, 44892, 98293, 85067, 68967, 8906, 11033, 41453, 83422, 61481, 59349, 78044, 69176, 84956, 68226, 92215, 19935, 17882, 19251, 61350, 45588, 15136, 5283, 57773, 43888, 63680, 13246, 15695, 84724, 55087, 81201, 36169, 26035, 92121, 32610, 92754, 27381, 29359, 90493, 31010, 25198, 62326, 58253, 95064, 85871, 15136, 3066, 90862, 82754, 8614, 20927, 3238, 86477, 2160, 23465, 74493, 16775, 16344, 68726, 80169, 806, 78015, 98879, 90823, 41808, 58904, 62932, 30442, 25189, 1340, 80578, 70151, 36514, 82005, 86004, 36945, 39134, 54549, 59143, 27625, 87723, 56683, 79621, 63025, 95639, 89083, 39450, 89296, 72802, 97274, 28580, 53388, 86022, 43765, 28994, 94464, 67419, 24010, 80614, 96478, 45489, 25099, 71475, 46448, 80307, 47716, 45356, 49972, 60397, 90930, 53716, 59044, 98282, 47365, 15165, 23242, 24696, 2876, 71680, 81250, 58952, 8103, 34515, 83035, 21643, 75111, 5725, 98644, 20999, 30642, 13982, 37306, 63217, 88445, 91649, 41217, 40511, 38611, 44788, 3042, 37716, 18737, 93122, 28744, 17215, 20674, 53748, 47044, 14121, 30139, 23145, 19116, 480, 33084, 62374, 56982, 45974, 48153, 35353, 61613, 65315, 85510, 75231, 21474, 59308, 54245, 20542, 36919, 32798, 9882, 78810, 70188, 61735, 20764, 83159, 51901, 4282, 97598, 18126, 13002, 5633, 66817, 23182, 31605, 6123, 90306, 70579, 31769, 38860, 11294, 91592, 18678, 83484, 30018, 98383, 67195, 3684, 98932, 49596, 11094, 24814, 43013, 15034, 21744, 68557, 73097, 31413, 6829, 96193, 45399, 64343, 10383, 22277, 38935, 21152, 51247, 61106, 85519, 79368, 21070, 81865, 74002, 5594, 91272, 62209, 28814, 38640, 73158, 56987, 34674, 21655, 2406, 78083, 53751, 27541, 77780, 42838, 69484, 84167, 18000, 84896, 60909, 93313, 24115, 85841, 71311, 44779, 37756, 86066, 75415, 52647, 76474, 57389, 12273, 44435, 2482, 48319, 25191, 14812, 95159, 99780, 47963, 65792, 61770, 43342, 38967, 79803] +[49, 103, 135, 197, 207, 397, 480, 585, 806, 821, 822, 1038, 1087, 1145, 1262, 1340, 1445, 1459, 1610, 1760, 1794, 1817, 2045, 2160, 2189, 2406, 2482, 2587, 2876, 3012, 3042, 3066, 3238, 3339, 3563, 3684, 4052, 4082, 4282, 4385, 5094, 5150, 5283, 5394, 5594, 5633, 5646, 5647, 5681, 5702, 5725, 5780, 5929, 6025, 6095, 6123, 6295, 6304, 6329, 6389, 6396, 6498, 6641, 6829, 6939, 7215, 7314, 7611, 7725, 7850, 8103, 8507, 8513, 8542, 8614, 8698, 8717, 8766, 8787, 8798, 8906, 9023, 9284, 9309, 9350, 9362, 9404, 9527, 9744, 9882, 9909, 10031, 10182, 10187, 10200, 10383, 10649, 10704, 10729, 10817, 10840, 10921, 10951, 11022, 11030, 11033, 11094, 11161, 11179, 11203, 11294, 11381, 11423, 11475, 11475, 11590, 11732, 11851, 11944, 12045, 12273, 12484, 12600, 12722, 13002, 13004, 13246, 13448, 13528, 13543, 13615, 13631, 13634, 13677, 13729, 13732, 13744, 13982, 14121, 14124, 14330, 14360, 14402, 14550, 14576, 14656, 14725, 14725, 14812, 14839, 14859, 15020, 15034, 15136, 15136, 15165, 15695, 15701, 15871, 16011, 16250, 16344, 16367, 16537, 16695, 16719, 16775, 17028, 17118, 17126, 17191, 17198, 17215, 17397, 17782, 17882, 18000, 18100, 18126, 18132, 18144, 18359, 18413, 18512, 18678, 18737, 18900, 19057, 19091, 19116, 19251, 19317, 19356, 19622, 19935, 19961, 20163, 20209, 20372, 20460, 20542, 20674, 20715, 20764, 20927, 20999, 21000, 21070, 21152, 21325, 21328, 21422, 21474, 21483, 21643, 21655, 21744, 21759, 21849, 22048, 22065, 22277, 22444, 22866, 22935, 22968, 23087, 23145, 23182, 23217, 23242, 23319, 23332, 23465, 23510, 23580, 24010, 24014, 24096, 24115, 24385, 24398, 24552, 24696, 24814, 24825, 25099, 25189, 25191, 25198, 25309, 25338, 25347, 25392, 25663, 25733, 25885, 25963, 26019, 26035, 26279, 26302, 26396, 26438, 26591, 26819, 27021, 27173, 27211, 27261, 27381, 27541, 27551, 27607, 27625, 27637, 27742, 27914, 28003, 28270, 28286, 28345, 28480, 28508, 28580, 28706, 28707, 28744, 28804, 28814, 28994, 29236, 29273, 29286, 29289, 29359, 29384, 29449, 29753, 29778, 29861, 30018, 30042, 30139, 30442, 30642, 30645, 30789, 31010, 31131, 31357, 31413, 31432, 31459, 31605, 31702, 31769, 32084, 32087, 32274, 32528, 32610, 32798, 32801, 32806, 33084, 33176, 33190, 33559, 33577, 33662, 33670, 33773, 33837, 33964, 34015, 34017, 34270, 34309, 34515, 34549, 34674, 34796, 34824, 35037, 35353, 35388, 35408, 35416, 35457, 35466, 35636, 35764, 35824, 35843, 35920, 35945, 36153, 36169, 36173, 36280, 36452, 36514, 36900, 36919, 36945, 37120, 37140, 37306, 37319, 37515, 37716, 37749, 37756, 37902, 38065, 38083, 38266, 38438, 38611, 38640, 38701, 38795, 38860, 38935, 38967, 38995, 38997, 39134, 39190, 39198, 39428, 39450, 39628, 39740, 39839, 39939, 40101, 40225, 40322, 40348, 40511, 40614, 40753, 41010, 41073, 41101, 41217, 41453, 41573, 41794, 41808, 41939, 41961, 41987, 42045, 42048, 42208, 42216, 42273, 42379, 42592, 42630, 42631, 42676, 42684, 42764, 42838, 42859, 43003, 43013, 43039, 43166, 43342, 43386, 43402, 43425, 43487, 43630, 43746, 43765, 43797, 43888, 44252, 44435, 44500, 44652, 44685, 44779, 44788, 44892, 45154, 45180, 45181, 45196, 45220, 45356, 45399, 45489, 45537, 45588, 45865, 45974, 46045, 46200, 46398, 46448, 46690, 46712, 47044, 47067, 47173, 47180, 47353, 47365, 47498, 47708, 47716, 47899, 47963, 48103, 48153, 48245, 48284, 48289, 48319, 48599, 48615, 48949, 49027, 49099, 49413, 49414, 49491, 49596, 49813, 49972, 50083, 50164, 50550, 50622, 50695, 50794, 50811, 50829, 50874, 50940, 51247, 51436, 51548, 51599, 51700, 51881, 51901, 51998, 52198, 52551, 52647, 53008, 53052, 53064, 53188, 53304, 53388, 53681, 53716, 53730, 53748, 53750, 53751, 54085, 54096, 54241, 54245, 54302, 54342, 54507, 54530, 54549, 54699, 55081, 55087, 55102, 55211, 55327, 55361, 55536, 55561, 55584, 55714, 55856, 55891, 55906, 55912, 55915, 56037, 56105, 56170, 56350, 56395, 56431, 56456, 56683, 56703, 56720, 56816, 56870, 56921, 56982, 56987, 57286, 57313, 57389, 57526, 57674, 57773, 57894, 58253, 58422, 58574, 58588, 58647, 58825, 58868, 58904, 58952, 59041, 59044, 59143, 59308, 59349, 59362, 59374, 59507, 59674, 59856, 59870, 60079, 60086, 60267, 60285, 60379, 60397, 60418, 60544, 60759, 60861, 60909, 61045, 61089, 61106, 61350, 61481, 61503, 61613, 61735, 61770, 61849, 62135, 62209, 62326, 62369, 62374, 62697, 62908, 62932, 63025, 63040, 63047, 63217, 63315, 63662, 63680, 63823, 63861, 63911, 63960, 63970, 63972, 64168, 64271, 64298, 64343, 64753, 64763, 64950, 65031, 65092, 65130, 65315, 65358, 65503, 65723, 65765, 65783, 65790, 65792, 65902, 66111, 66146, 66178, 66376, 66433, 66469, 66522, 66558, 66724, 66817, 66963, 67142, 67195, 67241, 67266, 67419, 67431, 67502, 67635, 67642, 67706, 67942, 68001, 68076, 68092, 68122, 68226, 68268, 68557, 68726, 68909, 68948, 68967, 69141, 69176, 69177, 69305, 69484, 69578, 69755, 69783, 70004, 70151, 70188, 70214, 70234, 70319, 70403, 70476, 70579, 70900, 70951, 71047, 71224, 71243, 71244, 71311, 71475, 71506, 71539, 71680, 71724, 71859, 71893, 71919, 71958, 72138, 72598, 72686, 72802, 72851, 73027, 73097, 73158, 73190, 73245, 73329, 73415, 73680, 73752, 73881, 73886, 74002, 74035, 74075, 74077, 74246, 74255, 74292, 74413, 74493, 74519, 74551, 74595, 74797, 74931, 75111, 75127, 75231, 75415, 75435, 75544, 75689, 75701, 75852, 75907, 75967, 75999, 76138, 76312, 76334, 76368, 76474, 76545, 76556, 76838, 76978, 77171, 77527, 77584, 77618, 77780, 78015, 78044, 78081, 78083, 78143, 78227, 78473, 78554, 78577, 78581, 78617, 78754, 78810, 79083, 79216, 79281, 79368, 79486, 79621, 79704, 79723, 79803, 80169, 80271, 80307, 80468, 80514, 80524, 80557, 80578, 80614, 80664, 80753, 80769, 80781, 80827, 81201, 81250, 81365, 81779, 81865, 82005, 82082, 82409, 82475, 82754, 82759, 82946, 83035, 83061, 83159, 83362, 83422, 83484, 83737, 83746, 83822, 84166, 84167, 84286, 84411, 84455, 84488, 84616, 84704, 84724, 84736, 84806, 84884, 84896, 84930, 84956, 84957, 84959, 85032, 85067, 85180, 85319, 85510, 85519, 85640, 85684, 85697, 85841, 85855, 85871, 86004, 86005, 86022, 86066, 86079, 86154, 86327, 86477, 86494, 87505, 87539, 87548, 87701, 87723, 88169, 88222, 88445, 88514, 88553, 88576, 88633, 88684, 88967, 89005, 89083, 89127, 89188, 89296, 89333, 89337, 89735, 89753, 89774, 89825, 89851, 90016, 90024, 90040, 90304, 90306, 90392, 90493, 90823, 90862, 90895, 90930, 90975, 91140, 91272, 91503, 91592, 91595, 91613, 91649, 91650, 91679, 91766, 91907, 91925, 92070, 92115, 92121, 92150, 92180, 92215, 92470, 92495, 92701, 92754, 92857, 92860, 93016, 93122, 93313, 93486, 93545, 93582, 93702, 93783, 93828, 94146, 94364, 94383, 94464, 94934, 95022, 95064, 95114, 95159, 95199, 95229, 95311, 95443, 95517, 95567, 95570, 95639, 95677, 95750, 95970, 95988, 96014, 96193, 96478, 96671, 97049, 97237, 97274, 97581, 97598, 97867, 97911, 97942, 98085, 98094, 98111, 98246, 98282, 98293, 98383, 98488, 98584, 98631, 98644, 98789, 98863, 98879, 98932, 99077, 99168, 99234, 99234, 99353, 99496, 99780] +50622 +50622 +Обычный: 13.372933553997427 +Оптимиз: 14.595681944992975 -#ВЫВОД: минимальная оптимизация (Замена list на set) дало прирост в 30% -""" \ No newline at end of file +""" +# Сделаем разброс возможных значений массива минимальными +print('Обычный: ', + timeit('get_median(create_list_int(500,0,10))', 'from __main__ import get_median, create_list_int', number=500)) +print('Оптимиз: ', + timeit('get_median_opt(create_list_int(500,0,10))', 'from __main__ import get_median_opt, create_list_int', + number=500)) +""" +[88966, 9072, 58601, 39058, 42674, 52710, 26468, 93895, 27631, 34708, 48094, 22966, 19573, 26050, 35746, 98048, 1151, 55246, 11748, 48693, 65185, 22942, 68021, 53156, 88148, 41433, 24868, 50324, 49578, 4331, 58506, 86048, 41017, 92318, 91762, 94808, 49830, 16630, 31653, 31443, 59405, 40559, 29823, 16468, 81624, 40149, 47005, 47994, 74136, 1629, 13717, 46005, 31079, 99519, 54904, 32505, 83157, 13898, 8145, 54444, 46174, 87895, 71597, 79290, 99827, 41355, 30256, 45105, 948, 37880, 6860, 72968, 38789, 95430, 44506, 13472, 29625, 5673, 81927, 90325, 62068, 90025, 75720, 810, 17713, 51042, 36771, 55205, 8360, 36571, 28420, 85026, 50117, 62283, 19296, 85209, 25523, 6940, 72651, 6751, 26770, 77250, 64394, 67150, 48695, 57188, 34197, 58596, 11808, 41164, 79421, 3105, 23398, 77061, 22115, 6576, 68836, 2163, 30494, 77443, 96748, 40653, 96741, 17086, 49025, 30897, 73383, 82006, 89106, 94425, 75680, 18682, 9432, 75425, 2168, 86078, 33533, 16576, 37557, 61920, 36051, 51865, 62164, 12204, 22083, 26308, 20264, 53927, 78423, 7705, 93176, 72912, 7105, 50126, 2738, 14692, 57940, 52411, 23523, 88734, 19713, 51240, 53533, 95670, 25983, 29181, 24691, 52617, 28616, 40878, 58842, 29555, 9122, 71420, 41808, 11124, 93843, 40446, 86175, 34587, 15153, 6945, 28336, 98871, 93983, 45165, 76120, 67086, 40135, 24746, 4489, 76092, 43358, 57384, 44362, 21947, 79625, 50292, 73256, 67123, 43314, 46483, 52909, 78291, 14376, 85897, 84722, 18316, 36978, 14370, 81151, 77817, 61574, 98404, 54438, 81754, 6070, 79800, 90646, 27242, 7138, 99892, 53110, 20732, 92879, 38382, 71344, 92789, 34482, 32018, 43892, 10369, 68093, 23967, 83287, 22704, 99019, 28743, 63833, 65003, 82397, 14263, 70850, 32174, 41040, 63232, 73159, 789, 54862, 22210, 1600, 18888, 42614, 54470, 27558, 93763, 91318, 36406, 73583, 51418, 99954, 50910, 698, 29419, 49090, 76804, 2521, 75207, 92930, 46704, 52590, 39813, 29094, 10487, 78787, 41253, 43958, 2268, 12705, 65894, 32012, 66132, 97273, 26570, 29031, 51515, 54092, 5949, 53369, 41446, 39075, 21500, 21279, 81779, 59439, 15569, 45562, 72983, 21036, 49142, 99260, 26000, 51489, 18867, 53194, 17040, 3246, 26161, 66406, 13020, 79646, 17338, 26083, 87910, 6437, 85169, 28875, 66435, 27089, 38375, 34156, 10717, 85705, 68389, 21612, 72247, 78577, 46754, 97924, 97403, 87620, 83556, 5068, 55665, 84335, 84963, 25757, 47849, 58873, 40104, 28492, 23609, 8552, 83800, 53287, 8650, 86234, 46817, 7235, 77568, 63316, 69600, 89933, 21304, 10875, 3797, 19065, 54118, 83151, 73945, 43353, 55451, 95088, 88412, 56067, 32737, 1716, 25476, 26892, 13837, 2770, 25257, 20613, 3287, 16762, 70891, 36897, 86203, 19232, 26398, 66336, 21305, 7243, 7828, 67599, 19363, 83484, 42564, 45442, 56563, 82063, 81158, 12815, 25592, 44241, 61945, 78267, 963, 83202, 97465, 66291, 80424, 23090, 42487, 37131, 33156, 88286, 12704, 44035, 33857, 45369, 30024, 18480, 12727, 96811, 39351, 419, 60439, 95135, 91810, 55728, 95087, 3654, 66187, 13678, 2783, 85679, 66545, 40512, 2345, 91238, 22271, 78299, 16420, 60577, 17424, 91293, 34764, 55581, 96282, 25936, 57570, 28049, 78230, 30101, 35495, 52745, 66083, 56105, 39536, 39739, 32493, 22743, 3622, 61236, 60737, 54904, 15894, 13174, 16, 53999, 7907, 31911, 58766, 86525, 11716, 48056, 15721, 34589, 67741, 16497, 34997, 94299, 30411, 85373, 82126, 25130, 76232, 4184, 84345, 33914, 92234, 58330, 63086, 76141, 99837, 15995, 93682, 25703, 74576, 92495, 71506, 49535, 50885, 67024, 18229, 97478, 75366, 25239, 57578, 67081, 6329, 8010, 82434, 74864, 96104, 14234, 63237, 32538, 46245, 93073, 27296, 96826, 63357, 32529, 86512, 94256, 58458, 54594, 30254, 71932, 7859, 687, 48271, 64215, 94813, 62656, 35331, 47788, 9710, 21781, 33133, 3154, 19486, 73740, 49173, 24729, 27920, 33883, 63039, 64229, 71914, 77774, 41107, 14043, 99511, 68017, 72552, 79130, 11903, 35020, 29480, 89744, 50543, 64453, 94983, 81063, 88323, 23211, 48292, 1545, 76990, 16589, 94640, 10249, 60419, 9138, 25745, 45969, 68753, 85697, 50832, 78945, 56909, 36833, 30890, 12412, 28102, 90853, 1123, 24855, 84476, 51551, 92063, 24757, 51178, 32651, 8873, 75649, 84288, 18720, 18305, 83918, 65663, 1178, 42845, 56645, 31208, 52583, 95824, 88314, 8488, 3541, 18666, 56579, 51823, 80509, 55683, 19180, 48014, 74306, 68450, 98819, 6698, 36178, 35885, 3926, 96026, 28279, 5738, 28245, 53519, 17789, 62663, 66008, 86175, 3410, 453, 8188, 61418, 45749, 21340, 56950, 8024, 7889, 73606, 977, 47342, 78114, 39772, 96904, 23711, 39064, 63954, 52933, 32891, 55721, 21128, 82059, 53888, 56740, 41287, 12624, 47095, 94771, 41025, 26830, 40439, 57428, 49943, 32051, 85378, 25496, 77701, 65718, 20276, 24959, 78605, 93343, 36443, 46664, 24964, 10256, 24750, 98166, 20782, 57299, 23609, 35224, 72574, 98421, 89292, 31197, 63867, 66937, 46583, 1381, 14509, 72748, 30046, 58350, 79499, 38045, 86361, 20031, 79950, 4169, 29879, 65008, 61240, 19418, 55102, 98393, 58714, 29869, 35781, 2787, 17265, 28503, 95561, 17526, 38926, 49664, 7146, 57760, 49924, 15106, 33121, 59318, 76884, 38631, 51986, 10917, 28978, 76484, 61143, 31497, 70064, 40921, 81975, 78354, 88943, 14232, 26426, 73527, 39733, 30889, 6397, 30739, 38680, 56497, 81239, 70823, 75513, 97145, 68464, 85947, 75971, 27539, 78194, 76439, 28101, 33507, 17770, 11542, 79808, 39002, 21785, 36722, 61361, 68628, 88143, 66113, 10195, 89454, 4132, 53958, 37848, 30427, 32780, 8446, 11660, 59866, 41962, 60425, 85545, 73030, 44083, 792, 28563, 7434, 89905, 50048, 9276, 25198, 11294, 86928, 70587, 89375, 88086, 80453, 37813, 58078, 89176, 94919, 43858, 7186, 49905, 89039, 16167, 24194, 56494, 96767, 83080, 22413, 90237, 53332, 72833, 5244, 11615, 18832, 77611, 89376, 81223, 97677, 52845, 78640, 45215, 70171, 6679, 16645, 44586, 77484, 39049, 65452, 87181, 77880, 21370, 2057, 41907, 99665, 4540, 27385, 15735, 17544, 19759, 9518, 28808, 62510, 93204, 80701, 63811, 21299, 50557, 38849, 11200, 13182, 14503, 14500, 23530, 35510, 50652, 63539, 4451, 82493, 64183, 52439, 51274, 80212, 79910, 7676, 5324, 65580, 80428, 60699, 25483, 38780, 36443, 51300, 61389, 16976, 48680, 7711, 60995, 75057, 26743, 43240, 49225, 75644, 11510, 47278, 93930, 59204, 3092, 96980, 38126, 7315, 37804, 51419, 53912, 30144, 29986, 35633, 29538, 40957, 95853, 93344, 26549, 69688, 16996, 5488, 89202, 69717, 2174, 20328, 45247, 20416, 99080, 42827, 24886, 56045, 48614, 71176, 97861, 87724, 77574, 1436, 89756, 14092, 4508, 86147, 34372, 55591, 94353, 93942, 1485, 72714, 59635, 43395, 66494, 92042, 49174, 50066, 42608, 31322, 73463, 60239, 6488, 744, 84096, 27988, 53589, 16970, 31863, 41087, 17055, 35294, 73068, 31959, 44030, 83355, 44824, 70464, 42525, 81465, 95539, 93434, 56356, 40788, 48050, 68351, 13624, 61416, 30953, 32620, 45228, 58958, 25413, 75601, 93344, 11976, 8718, 73991, 91296, 63573, 5397, 75318, 30302, 22708, 3254, 30109, 19130, 50721, 57725, 51877, 51610, 62026, 56264, 29550, 82588, 61269, 91676, 1176, 12159, 88161, 17485, 58094, 88522, 59010, 60504, 4252] +[16, 419, 453, 687, 698, 744, 789, 792, 810, 948, 963, 977, 1123, 1151, 1176, 1178, 1381, 1436, 1485, 1545, 1600, 1629, 1716, 2057, 2163, 2168, 2174, 2268, 2345, 2521, 2738, 2770, 2783, 2787, 3092, 3105, 3154, 3246, 3254, 3287, 3410, 3541, 3622, 3654, 3797, 3926, 4132, 4169, 4184, 4252, 4331, 4451, 4489, 4508, 4540, 5068, 5244, 5324, 5397, 5488, 5673, 5738, 5949, 6070, 6329, 6397, 6437, 6488, 6576, 6679, 6698, 6751, 6860, 6940, 6945, 7105, 7138, 7146, 7186, 7235, 7243, 7315, 7434, 7676, 7705, 7711, 7828, 7859, 7889, 7907, 8010, 8024, 8145, 8188, 8360, 8446, 8488, 8552, 8650, 8718, 8873, 9072, 9122, 9138, 9276, 9432, 9518, 9710, 10195, 10249, 10256, 10369, 10487, 10717, 10875, 10917, 11124, 11200, 11294, 11510, 11542, 11615, 11660, 11716, 11748, 11808, 11903, 11976, 12159, 12204, 12412, 12624, 12704, 12705, 12727, 12815, 13020, 13174, 13182, 13472, 13624, 13678, 13717, 13837, 13898, 14043, 14092, 14232, 14234, 14263, 14370, 14376, 14500, 14503, 14509, 14692, 15106, 15153, 15569, 15721, 15735, 15894, 15995, 16167, 16420, 16468, 16497, 16576, 16589, 16630, 16645, 16762, 16970, 16976, 16996, 17040, 17055, 17086, 17265, 17338, 17424, 17485, 17526, 17544, 17713, 17770, 17789, 18229, 18305, 18316, 18480, 18666, 18682, 18720, 18832, 18867, 18888, 19065, 19130, 19180, 19232, 19296, 19363, 19418, 19486, 19573, 19713, 19759, 20031, 20264, 20276, 20328, 20416, 20613, 20732, 20782, 21036, 21128, 21279, 21299, 21304, 21305, 21340, 21370, 21500, 21612, 21781, 21785, 21947, 22083, 22115, 22210, 22271, 22413, 22704, 22708, 22743, 22942, 22966, 23090, 23211, 23398, 23523, 23530, 23609, 23609, 23711, 23967, 24194, 24691, 24729, 24746, 24750, 24757, 24855, 24868, 24886, 24959, 24964, 25130, 25198, 25239, 25257, 25413, 25476, 25483, 25496, 25523, 25592, 25703, 25745, 25757, 25936, 25983, 26000, 26050, 26083, 26161, 26308, 26398, 26426, 26468, 26549, 26570, 26743, 26770, 26830, 26892, 27089, 27242, 27296, 27385, 27539, 27558, 27631, 27920, 27988, 28049, 28101, 28102, 28245, 28279, 28336, 28420, 28492, 28503, 28563, 28616, 28743, 28808, 28875, 28978, 29031, 29094, 29181, 29419, 29480, 29538, 29550, 29555, 29625, 29823, 29869, 29879, 29986, 30024, 30046, 30101, 30109, 30144, 30254, 30256, 30302, 30411, 30427, 30494, 30739, 30889, 30890, 30897, 30953, 31079, 31197, 31208, 31322, 31443, 31497, 31653, 31863, 31911, 31959, 32012, 32018, 32051, 32174, 32493, 32505, 32529, 32538, 32620, 32651, 32737, 32780, 32891, 33121, 33133, 33156, 33507, 33533, 33857, 33883, 33914, 34156, 34197, 34372, 34482, 34587, 34589, 34708, 34764, 34997, 35020, 35224, 35294, 35331, 35495, 35510, 35633, 35746, 35781, 35885, 36051, 36178, 36406, 36443, 36443, 36571, 36722, 36771, 36833, 36897, 36978, 37131, 37557, 37804, 37813, 37848, 37880, 38045, 38126, 38375, 38382, 38631, 38680, 38780, 38789, 38849, 38926, 39002, 39049, 39058, 39064, 39075, 39351, 39536, 39733, 39739, 39772, 39813, 40104, 40135, 40149, 40439, 40446, 40512, 40559, 40653, 40788, 40878, 40921, 40957, 41017, 41025, 41040, 41087, 41107, 41164, 41253, 41287, 41355, 41433, 41446, 41808, 41907, 41962, 42487, 42525, 42564, 42608, 42614, 42674, 42827, 42845, 43240, 43314, 43353, 43358, 43395, 43858, 43892, 43958, 44030, 44035, 44083, 44241, 44362, 44506, 44586, 44824, 45105, 45165, 45215, 45228, 45247, 45369, 45442, 45562, 45749, 45969, 46005, 46174, 46245, 46483, 46583, 46664, 46704, 46754, 46817, 47005, 47095, 47278, 47342, 47788, 47849, 47994, 48014, 48050, 48056, 48094, 48271, 48292, 48614, 48680, 48693, 48695, 49025, 49090, 49142, 49173, 49174, 49225, 49535, 49578, 49664, 49830, 49905, 49924, 49943, 50048, 50066, 50117, 50126, 50292, 50324, 50543, 50557, 50652, 50721, 50832, 50885, 50910, 51042, 51178, 51240, 51274, 51300, 51418, 51419, 51489, 51515, 51551, 51610, 51823, 51865, 51877, 51986, 52411, 52439, 52583, 52590, 52617, 52710, 52745, 52845, 52909, 52933, 53110, 53156, 53194, 53287, 53332, 53369, 53519, 53533, 53589, 53888, 53912, 53927, 53958, 53999, 54092, 54118, 54438, 54444, 54470, 54594, 54862, 54904, 54904, 55102, 55205, 55246, 55451, 55581, 55591, 55665, 55683, 55721, 55728, 56045, 56067, 56105, 56264, 56356, 56494, 56497, 56563, 56579, 56645, 56740, 56909, 56950, 57188, 57299, 57384, 57428, 57570, 57578, 57725, 57760, 57940, 58078, 58094, 58330, 58350, 58458, 58506, 58596, 58601, 58714, 58766, 58842, 58873, 58958, 59010, 59204, 59318, 59405, 59439, 59635, 59866, 60239, 60419, 60425, 60439, 60504, 60577, 60699, 60737, 60995, 61143, 61236, 61240, 61269, 61361, 61389, 61416, 61418, 61574, 61920, 61945, 62026, 62068, 62164, 62283, 62510, 62656, 62663, 63039, 63086, 63232, 63237, 63316, 63357, 63539, 63573, 63811, 63833, 63867, 63954, 64183, 64215, 64229, 64394, 64453, 65003, 65008, 65185, 65452, 65580, 65663, 65718, 65894, 66008, 66083, 66113, 66132, 66187, 66291, 66336, 66406, 66435, 66494, 66545, 66937, 67024, 67081, 67086, 67123, 67150, 67599, 67741, 68017, 68021, 68093, 68351, 68389, 68450, 68464, 68628, 68753, 68836, 69600, 69688, 69717, 70064, 70171, 70464, 70587, 70823, 70850, 70891, 71176, 71344, 71420, 71506, 71597, 71914, 71932, 72247, 72552, 72574, 72651, 72714, 72748, 72833, 72912, 72968, 72983, 73030, 73068, 73159, 73256, 73383, 73463, 73527, 73583, 73606, 73740, 73945, 73991, 74136, 74306, 74576, 74864, 75057, 75207, 75318, 75366, 75425, 75513, 75601, 75644, 75649, 75680, 75720, 75971, 76092, 76120, 76141, 76232, 76439, 76484, 76804, 76884, 76990, 77061, 77250, 77443, 77484, 77568, 77574, 77611, 77701, 77774, 77817, 77880, 78114, 78194, 78230, 78267, 78291, 78299, 78354, 78423, 78577, 78605, 78640, 78787, 78945, 79130, 79290, 79421, 79499, 79625, 79646, 79800, 79808, 79910, 79950, 80212, 80424, 80428, 80453, 80509, 80701, 81063, 81151, 81158, 81223, 81239, 81465, 81624, 81754, 81779, 81927, 81975, 82006, 82059, 82063, 82126, 82397, 82434, 82493, 82588, 83080, 83151, 83157, 83202, 83287, 83355, 83484, 83556, 83800, 83918, 84096, 84288, 84335, 84345, 84476, 84722, 84963, 85026, 85169, 85209, 85373, 85378, 85545, 85679, 85697, 85705, 85897, 85947, 86048, 86078, 86147, 86175, 86175, 86203, 86234, 86361, 86512, 86525, 86928, 87181, 87620, 87724, 87895, 87910, 88086, 88143, 88148, 88161, 88286, 88314, 88323, 88412, 88522, 88734, 88943, 88966, 89039, 89106, 89176, 89202, 89292, 89375, 89376, 89454, 89744, 89756, 89905, 89933, 90025, 90237, 90325, 90646, 90853, 91238, 91293, 91296, 91318, 91676, 91762, 91810, 92042, 92063, 92234, 92318, 92495, 92789, 92879, 92930, 93073, 93176, 93204, 93343, 93344, 93344, 93434, 93682, 93763, 93843, 93895, 93930, 93942, 93983, 94256, 94299, 94353, 94425, 94640, 94771, 94808, 94813, 94919, 94983, 95087, 95088, 95135, 95430, 95539, 95561, 95670, 95824, 95853, 96026, 96104, 96282, 96741, 96748, 96767, 96811, 96826, 96904, 96980, 97145, 97273, 97403, 97465, 97478, 97677, 97861, 97924, 98048, 98166, 98393, 98404, 98421, 98819, 98871, 99019, 99080, 99260, 99511, 99519, 99665, 99827, 99837, 99892, 99954] +47278 +47278 +Обычный: 25.394727698992938 +Оптимиз: 0.5613820989965461 +""" +# ВЫВОД: в зависимости от типа входных данных разные алгоритмы могут как ускорить, так и замедлить работу From db2500ed9561035fcb2df59fbb2a0bd1fc0c8f2a Mon Sep 17 00:00:00 2001 From: Sergey Kopeykin Date: Wed, 1 Jul 2020 16:47:37 +0300 Subject: [PATCH 7/7] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82=D0=BC=203?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task_3.py" | 39 +++++++++---------- 1 file changed, 19 insertions(+), 20 deletions(-) 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 67cd565f..20e889e2 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" @@ -19,6 +19,7 @@ def create_list_int(list_len, l_border, r_border): def get_median(base_list): for val in base_list: cnt1 = cnt2 = 0 + cnt3 = base_list.count(val) for val2 in base_list: if val == val2: continue @@ -26,7 +27,7 @@ def get_median(base_list): cnt1 += 1 else: cnt2 += 1 - if cnt1 == cnt2: + if abs(cnt1-cnt2) <= cnt3: return val return None @@ -35,6 +36,7 @@ def get_median(base_list): def get_median_opt(base_list): for val in set(base_list): cnt1 = cnt2 = 0 + cnt3 = base_list.count(val) for val2 in base_list: if val == val2: continue @@ -42,44 +44,41 @@ def get_median_opt(base_list): cnt1 += 1 else: cnt2 += 1 - if cnt1 == cnt2: + if abs(cnt1-cnt2) <= cnt3: return val return None -a = create_list_int(500, 0, 100000) +a = create_list_int(5, 0, 10) print(a) print(sorted(a)) print(get_median(a)) print(get_median_opt(a)) - +""" +[5, 2, 0, 5, 9, 3, 3, 7, 3, 0, 2] +[0, 0, 2, 2, 3, 3, 3, 5, 5, 7, 9] +3 +3 +""" print('Обычный: ', timeit('get_median(create_list_int(500,0,1000000))', 'from __main__ import get_median, create_list_int', - number=500)) + number=100)) print('Оптимиз: ', timeit('get_median_opt(create_list_int(500,0,1000000))', 'from __main__ import get_median_opt, create_list_int', - number=500)) + number=100)) """ -[91679, 94383, 34015, 40225, 76334, 48284, 13004, 54096, 65130, 83746, 1760, 61503, 38995, 89735, 93582, 11423, 45220, 4082, 1459, 60544, 41794, 70214, 78754, 54342, 82409, 33837, 65031, 38701, 91140, 98488, 1610, 11381, 25963, 37515, 93016, 58868, 86494, 36173, 68909, 67942, 29778, 14725, 91907, 54507, 74595, 79486, 18359, 55211, 60379, 32084, 31702, 3563, 21422, 66522, 22935, 24385, 69177, 70319, 33176, 62908, 7850, 40322, 36280, 87505, 59374, 32274, 50083, 74255, 44685, 75701, 7611, 6329, 79704, 20209, 88633, 6641, 70234, 29236, 24398, 54302, 15020, 38065, 53188, 56870, 57286, 28345, 55912, 6939, 21759, 24552, 35466, 8513, 65358, 25392, 63315, 84704, 68076, 5702, 135, 75435, 56395, 76312, 76556, 21849, 84286, 95311, 14402, 47498, 43487, 87548, 85684, 26279, 71224, 88967, 83061, 103, 51881, 64763, 66433, 11944, 46690, 70951, 9744, 89333, 59507, 35636, 17118, 45154, 10200, 54241, 35408, 55327, 25733, 80514, 18900, 37319, 86005, 41987, 48599, 13677, 24096, 42208, 90016, 8507, 16695, 17397, 88222, 14859, 53681, 63040, 14656, 75544, 89127, 81779, 85697, 23332, 24014, 8542, 42684, 28804, 45537, 17198, 78081, 30042, 93702, 67142, 69755, 6396, 42630, 76838, 1445, 58588, 10951, 73027, 82946, 9284, 14839, 5681, 11179, 22866, 13732, 84411, 53064, 75999, 75967, 2045, 73881, 34309, 80781, 16250, 52551, 14576, 12600, 207, 39198, 61849, 22444, 55081, 4052, 5929, 1038, 32087, 6304, 32806, 10704, 67502, 27914, 48615, 5394, 74292, 72851, 38083, 56431, 74931, 84488, 77618, 9309, 63047, 35388, 53730, 56037, 55361, 86079, 585, 94146, 98584, 5646, 42764, 6498, 37749, 76138, 67642, 16367, 47180, 33670, 38997, 76545, 66376, 98094, 55714, 84957, 31432, 84884, 68948, 85640, 88684, 59041, 60086, 80468, 92470, 35824, 25338, 50829, 71047, 80524, 197, 95570, 35037, 10182, 27607, 20372, 55915, 94934, 14725, 82082, 19961, 44252, 97911, 63861, 98789, 397, 49, 42592, 95567, 80271, 13634, 21325, 91650, 70004, 22048, 20460, 95114, 84166, 90975, 25663, 91766, 26591, 14360, 78227, 58422, 34549, 98111, 49027, 82759, 90392, 56456, 39190, 22065, 66724, 59674, 33662, 2587, 41101, 85319, 84930, 41010, 11022, 91613, 60079, 95970, 11161, 79216, 97581, 46200, 8787, 84616, 48949, 39628, 96014, 74035, 78617, 3012, 92115, 57526, 23087, 72686, 71244, 38795, 80827, 45865, 20715, 12484, 95443, 73329, 20163, 24825, 64950, 42859, 52198, 67431, 66558, 71893, 47899, 29753, 75127, 63662, 48245, 62135, 18132, 63960, 50874, 64271, 69783, 37902, 62369, 90895, 50940, 67635, 51548, 87539, 56816, 56703, 29449, 18144, 74077, 92860, 47708, 14550, 43039, 39939, 55561, 83822, 71724, 55102, 94364, 93486, 42048, 77171, 86154, 49491, 98246, 29273, 46398, 48289, 85032, 80557, 11203, 45196, 43746, 74519, 35457, 25885, 53750, 63911, 80753, 56720, 85855, 29384, 19091, 93828, 71859, 78473, 79281, 98631, 54530, 83362, 67266, 10921, 96671, 8698, 23580, 54699, 49414, 98863, 58825, 74075, 70403, 88169, 84736, 50811, 99234, 14330, 69141, 9404, 38438, 47173, 41573, 40753, 9350, 10649, 17782, 42273, 73680, 74413, 13729, 9909, 13615, 21483, 43003, 83737, 62697, 13631, 3339, 15701, 90304, 27742, 11590, 56170, 90024, 29286, 70476, 73245, 75852, 65902, 55536, 8717, 99496, 30789, 39740, 13744, 33190, 95517, 19057, 26819, 19317, 14124, 40101, 11475, 56350, 91503, 18100, 19356, 28706, 84806, 12045, 37140, 31459, 89851, 6295, 42379, 36153, 26438, 89337, 65723, 91595, 19622, 90040, 34824, 75689, 22968, 45180, 89753, 50794, 27173, 45181, 41961, 59870, 9023, 57313, 27261, 93545, 27211, 28707, 36900, 69305, 5780, 23510, 66469, 74551, 92701, 47353, 63823, 41073, 26302, 80664, 92070, 71958, 33577, 60267, 55856, 26019, 44652, 64168, 65790, 66111, 49413, 1794, 822, 95199, 30645, 10187, 69578, 48103, 1817, 42045, 28003, 56105, 11732, 31131, 17028, 89774, 74797, 50695, 60285, 35843, 57674, 49813, 32801, 51436, 95750, 11851, 42631, 73190, 59362, 99077, 9527, 6025, 38266, 65783, 92150, 93783, 10729, 77527, 88553, 63970, 97049, 16537, 37120, 73886, 97942, 98085, 65765, 53052, 9362, 60759, 15871, 33773, 36452, 89825, 66963, 55584, 11475, 68092, 44500, 72598, 34270, 21328, 46045, 97867, 8798, 43166, 84455, 55891, 12722, 97237, 99234, 49099, 95229, 92857, 55906, 42676, 67706, 73415, 75907, 28270, 61045, 68001, 7314, 79083, 40614, 76978, 68268, 43630, 51599, 11030, 32528, 82475, 42216, 57894, 34017, 7215, 6389, 35945, 1262, 92495, 16011, 51998, 6095, 73752, 7725, 79723, 18512, 50164, 88576, 40348, 71919, 89005, 89188, 46712, 71506, 43402, 23319, 66146, 13528, 13448, 1087, 47067, 8766, 84959, 28480, 17191, 16719, 60418, 28508, 43425, 66178, 63972, 91925, 53304, 65503, 821, 27637, 56921, 77584, 88514, 95988, 78577, 10817, 50550, 70900, 99353, 58574, 4385, 26396, 78581, 25309, 95677, 71243, 18413, 17126, 25347, 10840, 68122, 35764, 31357, 71539, 10031, 35416, 92180, 5094, 78143, 58647, 35920, 61089, 5150, 76368, 50622, 39839, 51700, 13543, 64298, 99168, 5647, 29861, 95022, 43386, 74246, 23217, 28286, 2189, 86327, 29289, 78554, 65092, 43797, 80769, 54085, 67241, 53008, 59856, 33559, 41939, 33964, 72138, 27021, 39428, 27551, 34796, 64753, 81365, 21000, 1145, 87701, 85180, 60861, 44892, 98293, 85067, 68967, 8906, 11033, 41453, 83422, 61481, 59349, 78044, 69176, 84956, 68226, 92215, 19935, 17882, 19251, 61350, 45588, 15136, 5283, 57773, 43888, 63680, 13246, 15695, 84724, 55087, 81201, 36169, 26035, 92121, 32610, 92754, 27381, 29359, 90493, 31010, 25198, 62326, 58253, 95064, 85871, 15136, 3066, 90862, 82754, 8614, 20927, 3238, 86477, 2160, 23465, 74493, 16775, 16344, 68726, 80169, 806, 78015, 98879, 90823, 41808, 58904, 62932, 30442, 25189, 1340, 80578, 70151, 36514, 82005, 86004, 36945, 39134, 54549, 59143, 27625, 87723, 56683, 79621, 63025, 95639, 89083, 39450, 89296, 72802, 97274, 28580, 53388, 86022, 43765, 28994, 94464, 67419, 24010, 80614, 96478, 45489, 25099, 71475, 46448, 80307, 47716, 45356, 49972, 60397, 90930, 53716, 59044, 98282, 47365, 15165, 23242, 24696, 2876, 71680, 81250, 58952, 8103, 34515, 83035, 21643, 75111, 5725, 98644, 20999, 30642, 13982, 37306, 63217, 88445, 91649, 41217, 40511, 38611, 44788, 3042, 37716, 18737, 93122, 28744, 17215, 20674, 53748, 47044, 14121, 30139, 23145, 19116, 480, 33084, 62374, 56982, 45974, 48153, 35353, 61613, 65315, 85510, 75231, 21474, 59308, 54245, 20542, 36919, 32798, 9882, 78810, 70188, 61735, 20764, 83159, 51901, 4282, 97598, 18126, 13002, 5633, 66817, 23182, 31605, 6123, 90306, 70579, 31769, 38860, 11294, 91592, 18678, 83484, 30018, 98383, 67195, 3684, 98932, 49596, 11094, 24814, 43013, 15034, 21744, 68557, 73097, 31413, 6829, 96193, 45399, 64343, 10383, 22277, 38935, 21152, 51247, 61106, 85519, 79368, 21070, 81865, 74002, 5594, 91272, 62209, 28814, 38640, 73158, 56987, 34674, 21655, 2406, 78083, 53751, 27541, 77780, 42838, 69484, 84167, 18000, 84896, 60909, 93313, 24115, 85841, 71311, 44779, 37756, 86066, 75415, 52647, 76474, 57389, 12273, 44435, 2482, 48319, 25191, 14812, 95159, 99780, 47963, 65792, 61770, 43342, 38967, 79803] -[49, 103, 135, 197, 207, 397, 480, 585, 806, 821, 822, 1038, 1087, 1145, 1262, 1340, 1445, 1459, 1610, 1760, 1794, 1817, 2045, 2160, 2189, 2406, 2482, 2587, 2876, 3012, 3042, 3066, 3238, 3339, 3563, 3684, 4052, 4082, 4282, 4385, 5094, 5150, 5283, 5394, 5594, 5633, 5646, 5647, 5681, 5702, 5725, 5780, 5929, 6025, 6095, 6123, 6295, 6304, 6329, 6389, 6396, 6498, 6641, 6829, 6939, 7215, 7314, 7611, 7725, 7850, 8103, 8507, 8513, 8542, 8614, 8698, 8717, 8766, 8787, 8798, 8906, 9023, 9284, 9309, 9350, 9362, 9404, 9527, 9744, 9882, 9909, 10031, 10182, 10187, 10200, 10383, 10649, 10704, 10729, 10817, 10840, 10921, 10951, 11022, 11030, 11033, 11094, 11161, 11179, 11203, 11294, 11381, 11423, 11475, 11475, 11590, 11732, 11851, 11944, 12045, 12273, 12484, 12600, 12722, 13002, 13004, 13246, 13448, 13528, 13543, 13615, 13631, 13634, 13677, 13729, 13732, 13744, 13982, 14121, 14124, 14330, 14360, 14402, 14550, 14576, 14656, 14725, 14725, 14812, 14839, 14859, 15020, 15034, 15136, 15136, 15165, 15695, 15701, 15871, 16011, 16250, 16344, 16367, 16537, 16695, 16719, 16775, 17028, 17118, 17126, 17191, 17198, 17215, 17397, 17782, 17882, 18000, 18100, 18126, 18132, 18144, 18359, 18413, 18512, 18678, 18737, 18900, 19057, 19091, 19116, 19251, 19317, 19356, 19622, 19935, 19961, 20163, 20209, 20372, 20460, 20542, 20674, 20715, 20764, 20927, 20999, 21000, 21070, 21152, 21325, 21328, 21422, 21474, 21483, 21643, 21655, 21744, 21759, 21849, 22048, 22065, 22277, 22444, 22866, 22935, 22968, 23087, 23145, 23182, 23217, 23242, 23319, 23332, 23465, 23510, 23580, 24010, 24014, 24096, 24115, 24385, 24398, 24552, 24696, 24814, 24825, 25099, 25189, 25191, 25198, 25309, 25338, 25347, 25392, 25663, 25733, 25885, 25963, 26019, 26035, 26279, 26302, 26396, 26438, 26591, 26819, 27021, 27173, 27211, 27261, 27381, 27541, 27551, 27607, 27625, 27637, 27742, 27914, 28003, 28270, 28286, 28345, 28480, 28508, 28580, 28706, 28707, 28744, 28804, 28814, 28994, 29236, 29273, 29286, 29289, 29359, 29384, 29449, 29753, 29778, 29861, 30018, 30042, 30139, 30442, 30642, 30645, 30789, 31010, 31131, 31357, 31413, 31432, 31459, 31605, 31702, 31769, 32084, 32087, 32274, 32528, 32610, 32798, 32801, 32806, 33084, 33176, 33190, 33559, 33577, 33662, 33670, 33773, 33837, 33964, 34015, 34017, 34270, 34309, 34515, 34549, 34674, 34796, 34824, 35037, 35353, 35388, 35408, 35416, 35457, 35466, 35636, 35764, 35824, 35843, 35920, 35945, 36153, 36169, 36173, 36280, 36452, 36514, 36900, 36919, 36945, 37120, 37140, 37306, 37319, 37515, 37716, 37749, 37756, 37902, 38065, 38083, 38266, 38438, 38611, 38640, 38701, 38795, 38860, 38935, 38967, 38995, 38997, 39134, 39190, 39198, 39428, 39450, 39628, 39740, 39839, 39939, 40101, 40225, 40322, 40348, 40511, 40614, 40753, 41010, 41073, 41101, 41217, 41453, 41573, 41794, 41808, 41939, 41961, 41987, 42045, 42048, 42208, 42216, 42273, 42379, 42592, 42630, 42631, 42676, 42684, 42764, 42838, 42859, 43003, 43013, 43039, 43166, 43342, 43386, 43402, 43425, 43487, 43630, 43746, 43765, 43797, 43888, 44252, 44435, 44500, 44652, 44685, 44779, 44788, 44892, 45154, 45180, 45181, 45196, 45220, 45356, 45399, 45489, 45537, 45588, 45865, 45974, 46045, 46200, 46398, 46448, 46690, 46712, 47044, 47067, 47173, 47180, 47353, 47365, 47498, 47708, 47716, 47899, 47963, 48103, 48153, 48245, 48284, 48289, 48319, 48599, 48615, 48949, 49027, 49099, 49413, 49414, 49491, 49596, 49813, 49972, 50083, 50164, 50550, 50622, 50695, 50794, 50811, 50829, 50874, 50940, 51247, 51436, 51548, 51599, 51700, 51881, 51901, 51998, 52198, 52551, 52647, 53008, 53052, 53064, 53188, 53304, 53388, 53681, 53716, 53730, 53748, 53750, 53751, 54085, 54096, 54241, 54245, 54302, 54342, 54507, 54530, 54549, 54699, 55081, 55087, 55102, 55211, 55327, 55361, 55536, 55561, 55584, 55714, 55856, 55891, 55906, 55912, 55915, 56037, 56105, 56170, 56350, 56395, 56431, 56456, 56683, 56703, 56720, 56816, 56870, 56921, 56982, 56987, 57286, 57313, 57389, 57526, 57674, 57773, 57894, 58253, 58422, 58574, 58588, 58647, 58825, 58868, 58904, 58952, 59041, 59044, 59143, 59308, 59349, 59362, 59374, 59507, 59674, 59856, 59870, 60079, 60086, 60267, 60285, 60379, 60397, 60418, 60544, 60759, 60861, 60909, 61045, 61089, 61106, 61350, 61481, 61503, 61613, 61735, 61770, 61849, 62135, 62209, 62326, 62369, 62374, 62697, 62908, 62932, 63025, 63040, 63047, 63217, 63315, 63662, 63680, 63823, 63861, 63911, 63960, 63970, 63972, 64168, 64271, 64298, 64343, 64753, 64763, 64950, 65031, 65092, 65130, 65315, 65358, 65503, 65723, 65765, 65783, 65790, 65792, 65902, 66111, 66146, 66178, 66376, 66433, 66469, 66522, 66558, 66724, 66817, 66963, 67142, 67195, 67241, 67266, 67419, 67431, 67502, 67635, 67642, 67706, 67942, 68001, 68076, 68092, 68122, 68226, 68268, 68557, 68726, 68909, 68948, 68967, 69141, 69176, 69177, 69305, 69484, 69578, 69755, 69783, 70004, 70151, 70188, 70214, 70234, 70319, 70403, 70476, 70579, 70900, 70951, 71047, 71224, 71243, 71244, 71311, 71475, 71506, 71539, 71680, 71724, 71859, 71893, 71919, 71958, 72138, 72598, 72686, 72802, 72851, 73027, 73097, 73158, 73190, 73245, 73329, 73415, 73680, 73752, 73881, 73886, 74002, 74035, 74075, 74077, 74246, 74255, 74292, 74413, 74493, 74519, 74551, 74595, 74797, 74931, 75111, 75127, 75231, 75415, 75435, 75544, 75689, 75701, 75852, 75907, 75967, 75999, 76138, 76312, 76334, 76368, 76474, 76545, 76556, 76838, 76978, 77171, 77527, 77584, 77618, 77780, 78015, 78044, 78081, 78083, 78143, 78227, 78473, 78554, 78577, 78581, 78617, 78754, 78810, 79083, 79216, 79281, 79368, 79486, 79621, 79704, 79723, 79803, 80169, 80271, 80307, 80468, 80514, 80524, 80557, 80578, 80614, 80664, 80753, 80769, 80781, 80827, 81201, 81250, 81365, 81779, 81865, 82005, 82082, 82409, 82475, 82754, 82759, 82946, 83035, 83061, 83159, 83362, 83422, 83484, 83737, 83746, 83822, 84166, 84167, 84286, 84411, 84455, 84488, 84616, 84704, 84724, 84736, 84806, 84884, 84896, 84930, 84956, 84957, 84959, 85032, 85067, 85180, 85319, 85510, 85519, 85640, 85684, 85697, 85841, 85855, 85871, 86004, 86005, 86022, 86066, 86079, 86154, 86327, 86477, 86494, 87505, 87539, 87548, 87701, 87723, 88169, 88222, 88445, 88514, 88553, 88576, 88633, 88684, 88967, 89005, 89083, 89127, 89188, 89296, 89333, 89337, 89735, 89753, 89774, 89825, 89851, 90016, 90024, 90040, 90304, 90306, 90392, 90493, 90823, 90862, 90895, 90930, 90975, 91140, 91272, 91503, 91592, 91595, 91613, 91649, 91650, 91679, 91766, 91907, 91925, 92070, 92115, 92121, 92150, 92180, 92215, 92470, 92495, 92701, 92754, 92857, 92860, 93016, 93122, 93313, 93486, 93545, 93582, 93702, 93783, 93828, 94146, 94364, 94383, 94464, 94934, 95022, 95064, 95114, 95159, 95199, 95229, 95311, 95443, 95517, 95567, 95570, 95639, 95677, 95750, 95970, 95988, 96014, 96193, 96478, 96671, 97049, 97237, 97274, 97581, 97598, 97867, 97911, 97942, 98085, 98094, 98111, 98246, 98282, 98293, 98383, 98488, 98584, 98631, 98644, 98789, 98863, 98879, 98932, 99077, 99168, 99234, 99234, 99353, 99496, 99780] -50622 -50622 -Обычный: 13.372933553997427 -Оптимиз: 14.595681944992975 +Обычный: 5.44049578999693 +Оптимиз: 6.0076921620056964 """ # Сделаем разброс возможных значений массива минимальными print('Обычный: ', - timeit('get_median(create_list_int(500,0,10))', 'from __main__ import get_median, create_list_int', number=500)) + timeit('get_median(create_list_int(500,0,10))', 'from __main__ import get_median, create_list_int', number=100)) print('Оптимиз: ', timeit('get_median_opt(create_list_int(500,0,10))', 'from __main__ import get_median_opt, create_list_int', - number=500)) + number=100)) """ -[88966, 9072, 58601, 39058, 42674, 52710, 26468, 93895, 27631, 34708, 48094, 22966, 19573, 26050, 35746, 98048, 1151, 55246, 11748, 48693, 65185, 22942, 68021, 53156, 88148, 41433, 24868, 50324, 49578, 4331, 58506, 86048, 41017, 92318, 91762, 94808, 49830, 16630, 31653, 31443, 59405, 40559, 29823, 16468, 81624, 40149, 47005, 47994, 74136, 1629, 13717, 46005, 31079, 99519, 54904, 32505, 83157, 13898, 8145, 54444, 46174, 87895, 71597, 79290, 99827, 41355, 30256, 45105, 948, 37880, 6860, 72968, 38789, 95430, 44506, 13472, 29625, 5673, 81927, 90325, 62068, 90025, 75720, 810, 17713, 51042, 36771, 55205, 8360, 36571, 28420, 85026, 50117, 62283, 19296, 85209, 25523, 6940, 72651, 6751, 26770, 77250, 64394, 67150, 48695, 57188, 34197, 58596, 11808, 41164, 79421, 3105, 23398, 77061, 22115, 6576, 68836, 2163, 30494, 77443, 96748, 40653, 96741, 17086, 49025, 30897, 73383, 82006, 89106, 94425, 75680, 18682, 9432, 75425, 2168, 86078, 33533, 16576, 37557, 61920, 36051, 51865, 62164, 12204, 22083, 26308, 20264, 53927, 78423, 7705, 93176, 72912, 7105, 50126, 2738, 14692, 57940, 52411, 23523, 88734, 19713, 51240, 53533, 95670, 25983, 29181, 24691, 52617, 28616, 40878, 58842, 29555, 9122, 71420, 41808, 11124, 93843, 40446, 86175, 34587, 15153, 6945, 28336, 98871, 93983, 45165, 76120, 67086, 40135, 24746, 4489, 76092, 43358, 57384, 44362, 21947, 79625, 50292, 73256, 67123, 43314, 46483, 52909, 78291, 14376, 85897, 84722, 18316, 36978, 14370, 81151, 77817, 61574, 98404, 54438, 81754, 6070, 79800, 90646, 27242, 7138, 99892, 53110, 20732, 92879, 38382, 71344, 92789, 34482, 32018, 43892, 10369, 68093, 23967, 83287, 22704, 99019, 28743, 63833, 65003, 82397, 14263, 70850, 32174, 41040, 63232, 73159, 789, 54862, 22210, 1600, 18888, 42614, 54470, 27558, 93763, 91318, 36406, 73583, 51418, 99954, 50910, 698, 29419, 49090, 76804, 2521, 75207, 92930, 46704, 52590, 39813, 29094, 10487, 78787, 41253, 43958, 2268, 12705, 65894, 32012, 66132, 97273, 26570, 29031, 51515, 54092, 5949, 53369, 41446, 39075, 21500, 21279, 81779, 59439, 15569, 45562, 72983, 21036, 49142, 99260, 26000, 51489, 18867, 53194, 17040, 3246, 26161, 66406, 13020, 79646, 17338, 26083, 87910, 6437, 85169, 28875, 66435, 27089, 38375, 34156, 10717, 85705, 68389, 21612, 72247, 78577, 46754, 97924, 97403, 87620, 83556, 5068, 55665, 84335, 84963, 25757, 47849, 58873, 40104, 28492, 23609, 8552, 83800, 53287, 8650, 86234, 46817, 7235, 77568, 63316, 69600, 89933, 21304, 10875, 3797, 19065, 54118, 83151, 73945, 43353, 55451, 95088, 88412, 56067, 32737, 1716, 25476, 26892, 13837, 2770, 25257, 20613, 3287, 16762, 70891, 36897, 86203, 19232, 26398, 66336, 21305, 7243, 7828, 67599, 19363, 83484, 42564, 45442, 56563, 82063, 81158, 12815, 25592, 44241, 61945, 78267, 963, 83202, 97465, 66291, 80424, 23090, 42487, 37131, 33156, 88286, 12704, 44035, 33857, 45369, 30024, 18480, 12727, 96811, 39351, 419, 60439, 95135, 91810, 55728, 95087, 3654, 66187, 13678, 2783, 85679, 66545, 40512, 2345, 91238, 22271, 78299, 16420, 60577, 17424, 91293, 34764, 55581, 96282, 25936, 57570, 28049, 78230, 30101, 35495, 52745, 66083, 56105, 39536, 39739, 32493, 22743, 3622, 61236, 60737, 54904, 15894, 13174, 16, 53999, 7907, 31911, 58766, 86525, 11716, 48056, 15721, 34589, 67741, 16497, 34997, 94299, 30411, 85373, 82126, 25130, 76232, 4184, 84345, 33914, 92234, 58330, 63086, 76141, 99837, 15995, 93682, 25703, 74576, 92495, 71506, 49535, 50885, 67024, 18229, 97478, 75366, 25239, 57578, 67081, 6329, 8010, 82434, 74864, 96104, 14234, 63237, 32538, 46245, 93073, 27296, 96826, 63357, 32529, 86512, 94256, 58458, 54594, 30254, 71932, 7859, 687, 48271, 64215, 94813, 62656, 35331, 47788, 9710, 21781, 33133, 3154, 19486, 73740, 49173, 24729, 27920, 33883, 63039, 64229, 71914, 77774, 41107, 14043, 99511, 68017, 72552, 79130, 11903, 35020, 29480, 89744, 50543, 64453, 94983, 81063, 88323, 23211, 48292, 1545, 76990, 16589, 94640, 10249, 60419, 9138, 25745, 45969, 68753, 85697, 50832, 78945, 56909, 36833, 30890, 12412, 28102, 90853, 1123, 24855, 84476, 51551, 92063, 24757, 51178, 32651, 8873, 75649, 84288, 18720, 18305, 83918, 65663, 1178, 42845, 56645, 31208, 52583, 95824, 88314, 8488, 3541, 18666, 56579, 51823, 80509, 55683, 19180, 48014, 74306, 68450, 98819, 6698, 36178, 35885, 3926, 96026, 28279, 5738, 28245, 53519, 17789, 62663, 66008, 86175, 3410, 453, 8188, 61418, 45749, 21340, 56950, 8024, 7889, 73606, 977, 47342, 78114, 39772, 96904, 23711, 39064, 63954, 52933, 32891, 55721, 21128, 82059, 53888, 56740, 41287, 12624, 47095, 94771, 41025, 26830, 40439, 57428, 49943, 32051, 85378, 25496, 77701, 65718, 20276, 24959, 78605, 93343, 36443, 46664, 24964, 10256, 24750, 98166, 20782, 57299, 23609, 35224, 72574, 98421, 89292, 31197, 63867, 66937, 46583, 1381, 14509, 72748, 30046, 58350, 79499, 38045, 86361, 20031, 79950, 4169, 29879, 65008, 61240, 19418, 55102, 98393, 58714, 29869, 35781, 2787, 17265, 28503, 95561, 17526, 38926, 49664, 7146, 57760, 49924, 15106, 33121, 59318, 76884, 38631, 51986, 10917, 28978, 76484, 61143, 31497, 70064, 40921, 81975, 78354, 88943, 14232, 26426, 73527, 39733, 30889, 6397, 30739, 38680, 56497, 81239, 70823, 75513, 97145, 68464, 85947, 75971, 27539, 78194, 76439, 28101, 33507, 17770, 11542, 79808, 39002, 21785, 36722, 61361, 68628, 88143, 66113, 10195, 89454, 4132, 53958, 37848, 30427, 32780, 8446, 11660, 59866, 41962, 60425, 85545, 73030, 44083, 792, 28563, 7434, 89905, 50048, 9276, 25198, 11294, 86928, 70587, 89375, 88086, 80453, 37813, 58078, 89176, 94919, 43858, 7186, 49905, 89039, 16167, 24194, 56494, 96767, 83080, 22413, 90237, 53332, 72833, 5244, 11615, 18832, 77611, 89376, 81223, 97677, 52845, 78640, 45215, 70171, 6679, 16645, 44586, 77484, 39049, 65452, 87181, 77880, 21370, 2057, 41907, 99665, 4540, 27385, 15735, 17544, 19759, 9518, 28808, 62510, 93204, 80701, 63811, 21299, 50557, 38849, 11200, 13182, 14503, 14500, 23530, 35510, 50652, 63539, 4451, 82493, 64183, 52439, 51274, 80212, 79910, 7676, 5324, 65580, 80428, 60699, 25483, 38780, 36443, 51300, 61389, 16976, 48680, 7711, 60995, 75057, 26743, 43240, 49225, 75644, 11510, 47278, 93930, 59204, 3092, 96980, 38126, 7315, 37804, 51419, 53912, 30144, 29986, 35633, 29538, 40957, 95853, 93344, 26549, 69688, 16996, 5488, 89202, 69717, 2174, 20328, 45247, 20416, 99080, 42827, 24886, 56045, 48614, 71176, 97861, 87724, 77574, 1436, 89756, 14092, 4508, 86147, 34372, 55591, 94353, 93942, 1485, 72714, 59635, 43395, 66494, 92042, 49174, 50066, 42608, 31322, 73463, 60239, 6488, 744, 84096, 27988, 53589, 16970, 31863, 41087, 17055, 35294, 73068, 31959, 44030, 83355, 44824, 70464, 42525, 81465, 95539, 93434, 56356, 40788, 48050, 68351, 13624, 61416, 30953, 32620, 45228, 58958, 25413, 75601, 93344, 11976, 8718, 73991, 91296, 63573, 5397, 75318, 30302, 22708, 3254, 30109, 19130, 50721, 57725, 51877, 51610, 62026, 56264, 29550, 82588, 61269, 91676, 1176, 12159, 88161, 17485, 58094, 88522, 59010, 60504, 4252] -[16, 419, 453, 687, 698, 744, 789, 792, 810, 948, 963, 977, 1123, 1151, 1176, 1178, 1381, 1436, 1485, 1545, 1600, 1629, 1716, 2057, 2163, 2168, 2174, 2268, 2345, 2521, 2738, 2770, 2783, 2787, 3092, 3105, 3154, 3246, 3254, 3287, 3410, 3541, 3622, 3654, 3797, 3926, 4132, 4169, 4184, 4252, 4331, 4451, 4489, 4508, 4540, 5068, 5244, 5324, 5397, 5488, 5673, 5738, 5949, 6070, 6329, 6397, 6437, 6488, 6576, 6679, 6698, 6751, 6860, 6940, 6945, 7105, 7138, 7146, 7186, 7235, 7243, 7315, 7434, 7676, 7705, 7711, 7828, 7859, 7889, 7907, 8010, 8024, 8145, 8188, 8360, 8446, 8488, 8552, 8650, 8718, 8873, 9072, 9122, 9138, 9276, 9432, 9518, 9710, 10195, 10249, 10256, 10369, 10487, 10717, 10875, 10917, 11124, 11200, 11294, 11510, 11542, 11615, 11660, 11716, 11748, 11808, 11903, 11976, 12159, 12204, 12412, 12624, 12704, 12705, 12727, 12815, 13020, 13174, 13182, 13472, 13624, 13678, 13717, 13837, 13898, 14043, 14092, 14232, 14234, 14263, 14370, 14376, 14500, 14503, 14509, 14692, 15106, 15153, 15569, 15721, 15735, 15894, 15995, 16167, 16420, 16468, 16497, 16576, 16589, 16630, 16645, 16762, 16970, 16976, 16996, 17040, 17055, 17086, 17265, 17338, 17424, 17485, 17526, 17544, 17713, 17770, 17789, 18229, 18305, 18316, 18480, 18666, 18682, 18720, 18832, 18867, 18888, 19065, 19130, 19180, 19232, 19296, 19363, 19418, 19486, 19573, 19713, 19759, 20031, 20264, 20276, 20328, 20416, 20613, 20732, 20782, 21036, 21128, 21279, 21299, 21304, 21305, 21340, 21370, 21500, 21612, 21781, 21785, 21947, 22083, 22115, 22210, 22271, 22413, 22704, 22708, 22743, 22942, 22966, 23090, 23211, 23398, 23523, 23530, 23609, 23609, 23711, 23967, 24194, 24691, 24729, 24746, 24750, 24757, 24855, 24868, 24886, 24959, 24964, 25130, 25198, 25239, 25257, 25413, 25476, 25483, 25496, 25523, 25592, 25703, 25745, 25757, 25936, 25983, 26000, 26050, 26083, 26161, 26308, 26398, 26426, 26468, 26549, 26570, 26743, 26770, 26830, 26892, 27089, 27242, 27296, 27385, 27539, 27558, 27631, 27920, 27988, 28049, 28101, 28102, 28245, 28279, 28336, 28420, 28492, 28503, 28563, 28616, 28743, 28808, 28875, 28978, 29031, 29094, 29181, 29419, 29480, 29538, 29550, 29555, 29625, 29823, 29869, 29879, 29986, 30024, 30046, 30101, 30109, 30144, 30254, 30256, 30302, 30411, 30427, 30494, 30739, 30889, 30890, 30897, 30953, 31079, 31197, 31208, 31322, 31443, 31497, 31653, 31863, 31911, 31959, 32012, 32018, 32051, 32174, 32493, 32505, 32529, 32538, 32620, 32651, 32737, 32780, 32891, 33121, 33133, 33156, 33507, 33533, 33857, 33883, 33914, 34156, 34197, 34372, 34482, 34587, 34589, 34708, 34764, 34997, 35020, 35224, 35294, 35331, 35495, 35510, 35633, 35746, 35781, 35885, 36051, 36178, 36406, 36443, 36443, 36571, 36722, 36771, 36833, 36897, 36978, 37131, 37557, 37804, 37813, 37848, 37880, 38045, 38126, 38375, 38382, 38631, 38680, 38780, 38789, 38849, 38926, 39002, 39049, 39058, 39064, 39075, 39351, 39536, 39733, 39739, 39772, 39813, 40104, 40135, 40149, 40439, 40446, 40512, 40559, 40653, 40788, 40878, 40921, 40957, 41017, 41025, 41040, 41087, 41107, 41164, 41253, 41287, 41355, 41433, 41446, 41808, 41907, 41962, 42487, 42525, 42564, 42608, 42614, 42674, 42827, 42845, 43240, 43314, 43353, 43358, 43395, 43858, 43892, 43958, 44030, 44035, 44083, 44241, 44362, 44506, 44586, 44824, 45105, 45165, 45215, 45228, 45247, 45369, 45442, 45562, 45749, 45969, 46005, 46174, 46245, 46483, 46583, 46664, 46704, 46754, 46817, 47005, 47095, 47278, 47342, 47788, 47849, 47994, 48014, 48050, 48056, 48094, 48271, 48292, 48614, 48680, 48693, 48695, 49025, 49090, 49142, 49173, 49174, 49225, 49535, 49578, 49664, 49830, 49905, 49924, 49943, 50048, 50066, 50117, 50126, 50292, 50324, 50543, 50557, 50652, 50721, 50832, 50885, 50910, 51042, 51178, 51240, 51274, 51300, 51418, 51419, 51489, 51515, 51551, 51610, 51823, 51865, 51877, 51986, 52411, 52439, 52583, 52590, 52617, 52710, 52745, 52845, 52909, 52933, 53110, 53156, 53194, 53287, 53332, 53369, 53519, 53533, 53589, 53888, 53912, 53927, 53958, 53999, 54092, 54118, 54438, 54444, 54470, 54594, 54862, 54904, 54904, 55102, 55205, 55246, 55451, 55581, 55591, 55665, 55683, 55721, 55728, 56045, 56067, 56105, 56264, 56356, 56494, 56497, 56563, 56579, 56645, 56740, 56909, 56950, 57188, 57299, 57384, 57428, 57570, 57578, 57725, 57760, 57940, 58078, 58094, 58330, 58350, 58458, 58506, 58596, 58601, 58714, 58766, 58842, 58873, 58958, 59010, 59204, 59318, 59405, 59439, 59635, 59866, 60239, 60419, 60425, 60439, 60504, 60577, 60699, 60737, 60995, 61143, 61236, 61240, 61269, 61361, 61389, 61416, 61418, 61574, 61920, 61945, 62026, 62068, 62164, 62283, 62510, 62656, 62663, 63039, 63086, 63232, 63237, 63316, 63357, 63539, 63573, 63811, 63833, 63867, 63954, 64183, 64215, 64229, 64394, 64453, 65003, 65008, 65185, 65452, 65580, 65663, 65718, 65894, 66008, 66083, 66113, 66132, 66187, 66291, 66336, 66406, 66435, 66494, 66545, 66937, 67024, 67081, 67086, 67123, 67150, 67599, 67741, 68017, 68021, 68093, 68351, 68389, 68450, 68464, 68628, 68753, 68836, 69600, 69688, 69717, 70064, 70171, 70464, 70587, 70823, 70850, 70891, 71176, 71344, 71420, 71506, 71597, 71914, 71932, 72247, 72552, 72574, 72651, 72714, 72748, 72833, 72912, 72968, 72983, 73030, 73068, 73159, 73256, 73383, 73463, 73527, 73583, 73606, 73740, 73945, 73991, 74136, 74306, 74576, 74864, 75057, 75207, 75318, 75366, 75425, 75513, 75601, 75644, 75649, 75680, 75720, 75971, 76092, 76120, 76141, 76232, 76439, 76484, 76804, 76884, 76990, 77061, 77250, 77443, 77484, 77568, 77574, 77611, 77701, 77774, 77817, 77880, 78114, 78194, 78230, 78267, 78291, 78299, 78354, 78423, 78577, 78605, 78640, 78787, 78945, 79130, 79290, 79421, 79499, 79625, 79646, 79800, 79808, 79910, 79950, 80212, 80424, 80428, 80453, 80509, 80701, 81063, 81151, 81158, 81223, 81239, 81465, 81624, 81754, 81779, 81927, 81975, 82006, 82059, 82063, 82126, 82397, 82434, 82493, 82588, 83080, 83151, 83157, 83202, 83287, 83355, 83484, 83556, 83800, 83918, 84096, 84288, 84335, 84345, 84476, 84722, 84963, 85026, 85169, 85209, 85373, 85378, 85545, 85679, 85697, 85705, 85897, 85947, 86048, 86078, 86147, 86175, 86175, 86203, 86234, 86361, 86512, 86525, 86928, 87181, 87620, 87724, 87895, 87910, 88086, 88143, 88148, 88161, 88286, 88314, 88323, 88412, 88522, 88734, 88943, 88966, 89039, 89106, 89176, 89202, 89292, 89375, 89376, 89454, 89744, 89756, 89905, 89933, 90025, 90237, 90325, 90646, 90853, 91238, 91293, 91296, 91318, 91676, 91762, 91810, 92042, 92063, 92234, 92318, 92495, 92789, 92879, 92930, 93073, 93176, 93204, 93343, 93344, 93344, 93434, 93682, 93763, 93843, 93895, 93930, 93942, 93983, 94256, 94299, 94353, 94425, 94640, 94771, 94808, 94813, 94919, 94983, 95087, 95088, 95135, 95430, 95539, 95561, 95670, 95824, 95853, 96026, 96104, 96282, 96741, 96748, 96767, 96811, 96826, 96904, 96980, 97145, 97273, 97403, 97465, 97478, 97677, 97861, 97924, 98048, 98166, 98393, 98404, 98421, 98819, 98871, 99019, 99080, 99260, 99511, 99519, 99665, 99827, 99837, 99892, 99954] -47278 -47278 -Обычный: 25.394727698992938 -Оптимиз: 0.5613820989965461 +Обычный: 0.19541699200635776 +Оптимиз: 0.15574709400243592 """ # ВЫВОД: в зависимости от типа входных данных разные алгоритмы могут как ускорить, так и замедлить работу