2015-09-03 3 views
0

В python, реализуя алгоритм бинарного поиска, какая математическая функция оптимальна для определения среднего значения - пола или потолка?Алгоритм двоичного поиска - Python

+5

оптимальный способ? –

+0

Выполняются ли эти численные значения? Или это общий бинарный поиск? –

+3

Python имеет встроенный модуль [** 'bisect' **] (https://docs.python.org/2/library/bisect.html), который имеет [примеры поиска отсортированного списка] (https: // docs .python.org/2/библиотека/bisect.html # поиск отсортированные-листы). –

ответ

1

Для реализации двоичного поиска в python вам не нужно использовать функцию ceil или floor. В зависимости от проблемы, вы должны округлить среднее значение вверх или вниз.

mid = low + (high-low)/2 #rounds down the mid value 
mid = low + (high-low+1)/2 #rounds up the mid value 

Попытайтесь решить эти две проблемы, вы получите представление о том, как это работает.

  1. Дан массив А и целевое значение, возвращает индекс первого элемента в А равно или больше, чем целевое значение
  2. Учитывая массив А и целевое значение, возвращают индекс последнего элемента который меньше целевого значения.

Сначала попробуйте эти проблемы самостоятельно, и если вы застряли, обратитесь к this.

+0

Ваше использование комментария '//' для комментариев здесь немного запутанно. Я предлагаю использовать '//' для деления и '#' для комментариев. –

0

Из того, что я понимаю о floor и ceil, не представляется более оптимальным вариантом. Вы можете найти more на этом сайте.

+0

Я думаю, что ваш вопрос должен быть немного более кратким с точки зрения того, что вы делаете с алогоритом, есть ли у вас сценарий вашей работы? – txsaw1

0

Вы на самом деле не нужно использовать CEIL или пол @shivam_mitra упоминается. При необходимости это алгоритм двоичного поиска.

def bSearch(L, e, low, high): 
    """ 
    L: is a sorted list 
    e: is the targeted number 
    low: is the lowest value of the list 
    hight: is the highest value of list 
    """ 
    if len(L) == 0:     # empty list 
     return False 

    if high == low:     # if the list is one element 
     return L[low] == e 

    mid = low + int((high - low)/2) 

    if L[mid] == e:     # If the midpoint is the targeted number 
     return True 
    if L[mid] > e:      # check if the number is in the lower half of the list 
     return bSearch(L, e, low, mid - 1) 
    else:        # otherwire it is in the higher of the list 
     return bSearch(L, e, mid + 1, high) 
Смежные вопросы