ads1_2021/code/search/methods.py

41 lines
1.2 KiB
Python
Raw Normal View History

2021-10-22 15:29:01 +02:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# IMPORTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from local.maths import *;
from local.typing import *;
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# GLOBAL VARIABLES/CONSTANTS
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# ALGORITHM
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def AlgoInterpol(L: List[int], u: int, v: int, x: int) -> int:
if not(L[u] <= x and x <= L[v]):
print('out of bounds!')
return -1;
p = getSuchposition(L, u, v, x);
print('Interpolatiert von u={u}, v={v} -> p = {p}.'.format(u=u, v=v, p=p));
if L[p] == x:
print('gefunden!');
return p;
elif x > L[p]:
print('x > L[p]');
return AlgoInterpol(L, p+1, v, x);
else:
print('x < L[p]');
return AlgoInterpol(L, u, p-1, x);
def getSuchposition(L: List[int], u: int, v: int, x: int) -> int:
r = (x - L[u])/(L[v]-L[u]);
p = math.floor(u + r*(v-u))
return p;