1. Python / Говнокод #22422

    −16

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    import math
    arr = list(range(1, 10001))
    num = int(input('Число: '))
    log = int(math.log2(len(arr)))
    
    lens = int(len(arr)/2)
    arr1 = arr[:lens]
    arr2 = arr[lens:]
    
    i = 0
    while i <= log:
      print('Шаг', i, 'из', log)
      
      if arr1:
        if num == arr1[0]:
          print(arr1[0])
          break
        if num == arr1[-1]:
          print(arr1[-1])
          break
      if arr2:
        if num == arr2[0]:
          print(arr2[0])
          break
        if num == arr2[-1]:
          print(arr2[-1])
          break
          
      if num in arr1:
        len1 = arr1
        arr1 = arr1[:int(len(arr1)/2) if int(len(arr1)/2) == 0 else int(len(arr1)/2+1)] 
        arr2 = len1[int(len(arr1)/2) if int(len(arr1)/2) == 0 else int(len(arr1)/2+1):]
        
      if num in arr2:
        len2 = arr2
        arr2 = arr2[:int(len(arr2)/2) if int(len(arr2)/2) == 0 else int(len(arr2)/2+1)]
        arr1 = len2[int(len(arr2)/2) if int(len(arr2)/2) == 0 else int(len(arr2)/2+1):]
          
      i += 1

    Бинарный поиск, говно?

    Запостил: lols, 21 Февраля 2017

    Комментарии (16) RSS

    • > arr
      > list
      Мне кажется, нас наебали
      Ответить
      • Ага, питоний list это массив, а не связный список. Гвидо всех наебал.
        Ответить
    • > if num in arr1
      Ахуенный двоичный поиск.
      Ответить
      • "/2, log2, arr2"
        Ну и где тут не двоичный поиск?
        Ответить
        • Привет, Сёма.
          Ответить
        • Ты знаешь, что под капотом у оператора in и сколько элементов он просканирует, чтобы дать ответ?
          Ответить
        • Это двоичный поиск, но не за log(n)
          Ответить
          • Это двоичный поиск, внутри которого используется линейный.
            Ответить
            • двоичный * линейный = билинейный color=green
              Ответить
          • Двоичный поиск, с капусткой, но не красный
            Ответить
      • Это, кстати, хуйня на фоне того, что вверху берутся слайсы от списка. А они не COW.
        Ответить
        • То есть в итоге у программы квадратичный расход памяти?
          Ответить
          • Я не смотрел в кишки питона, но вполне может быть.
            Ответить
          • > То есть в итоге у программы квадратичный расход памяти?

            А как насчитался квадратичный? Вроде бы каждый раз размер слайса уменьшается вдвое.
            2*N/2 + 2*N/4 + 2*N/8 + ... <= 2*N
            Ответить
    • Я, cykablyad, находясь в здравом уме и твердой памяти, торжественно заявляю:
      говно
      Ответить

    Добавить комментарий