Разбить верхнюю часть на заданный ключ - PullRequest
0 голосов
/ 10 февраля 2020

Я бы хотел внедрить рекурсивный поиск, используя python, он разделит верхнюю часть для данного ключа
пример: список [2, 4, 6, 9, 10]
для ключа 6 регистр возврата 3
для ключа равен 4 регистр возврата 2
, если ключа нет в списке ie. ключ равен 7. Он по-прежнему должен возвращаться с индексом 3, потому что 9 больше 7.
Мой код имеет проблемы с рекурсивностью, если ключ отсутствует в массиве,
, даже если я установил граничное условие, и я предполагаю, это будет хорошо, это не может go до конца. Любой совет высоко ценится.

def qReturn(alist, start, end, key):

    if key is 1:
        return 0
    mid = (start + end)//2
    if alist[mid] < key:
        return qReturn(alist, mid + 1, end, key)
    elif alist[mid] > key:
        return qReturn(alist, start, mid, key)
    if (start == end | end == mid | start > mid):
        return mid+1 
    else:
        return mid+1


alist = input('Enter the sorted list of numbers: ')
alist = alist.split()
alist = [int(x) for x in alist]
key = int(input('The number to search for: '))

index = qReturn(alist, 0, len(alist), key)
print('number q is at %d.' %index) 


Например, список [2, 4, 6, 9, 10] и ключ 7
Код не может быть завершен


Какой граничного условия мне нужно установить и получить результат для верхнего раздела для 7?

1 Ответ

0 голосов
/ 10 февраля 2020
import numpy as np
alist = np.array([2, 4, 6, 9, 10])
key = 7
#index = qReturn(alist, 0, len(alist), key)
index_bin = (alist>key).argmax(axis=0).T
index_bin

вывод:

3

Рекурсивный:

def splitAndCheck(leftside, rightside  ):

    if (rightside - leftside  <= 0):
      if (aList[rightside] >= key):
        return rightside
      else:
        return leftside
    middle = (leftside+rightside) //2
    if (aList[middle] >= key ):
      return splitAndCheck(leftside,middle)
    else:
      return splitAndCheck(middle+1,rightside)

print(aList) 
for key in range(20):
  print('key : ',key,'index : ',splitAndCheck(0,len(aList)-1))

вывод:

[ 2  4  6  9 10 12 14 18]
key :  0 index :  0
key :  1 index :  0
key :  2 index :  0
key :  3 index :  1
key :  4 index :  1
key :  5 index :  2
key :  6 index :  2
key :  7 index :  3
key :  8 index :  3
key :  9 index :  3
key :  10 index :  4
key :  11 index :  5
key :  12 index :  5
key :  13 index :  6
key :  14 index :  6
key :  15 index :  7
key :  16 index :  7
key :  17 index :  7
key :  18 index :  7
key :  19 index :  7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...