master > master: code - fügte exp Sprungsuche hinzu
This commit is contained in:
parent
9b1751fa5d
commit
76f9354fa4
@ -9,5 +9,6 @@ from code.algorithms.search.sequential import SequentialSearch;
|
||||
from code.algorithms.search.binary import BinarySearch;
|
||||
from code.algorithms.search.interpol import InterpolationSearch;
|
||||
from code.algorithms.search.jump import JumpSearchLinear;
|
||||
from code.algorithms.search.jump import JumpSearchExponentiell;
|
||||
from code.algorithms.search.ith_smallest import FindIthSmallest;
|
||||
from code.algorithms.search.ith_smallest_dc import FindIthSmallestDC;
|
||||
|
@ -39,7 +39,7 @@ def postChecks(L: List[int], x: int, index: int, **_):
|
||||
@algorithmInfos(name='Sprungsuche', outputnames='index', checks=True, metrics=True, preChecks=preChecks, postChecks=postChecks)
|
||||
def JumpSearchLinear(L: List[int], x: int, m: int) -> int:
|
||||
'''
|
||||
Inputs: L = Liste von Zahlen, x = Zahl, [u, v] = Suchinterval.
|
||||
Inputs: L = Liste von Zahlen, x = Zahl, m = lineare Sprunggröße.
|
||||
|
||||
Annahmen:
|
||||
- L sei aufsteigend sortiert.
|
||||
@ -54,9 +54,39 @@ def JumpSearchLinear(L: List[int], x: int, m: int) -> int:
|
||||
block = L[offset:][:m];
|
||||
elementAfterBlock = block[-1] + 1;
|
||||
if x < elementAfterBlock:
|
||||
logDebug('Element muss sich im Block {} befinden.'.format(i));
|
||||
logDebug('Element muss sich im Block [{i0}, {i1}) befinden.'.format(i0 = i*m, i1 = (i+1)*m));
|
||||
index = SequentialSearch(L=block, x=x);
|
||||
return offset + index; # NOTE: muss wegen Offset kompensieren
|
||||
logDebug('Element befindet sich nicht im Block {}.'.format(i));
|
||||
logDebug('Element befindet sich nicht im im Block [{i0}, {i1}) befinden.'.format(i0 = i*m, i1 = (i+1)*m));
|
||||
i += 1;
|
||||
return -1;
|
||||
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# ALGORITHM jump search - exponentiell
|
||||
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
@algorithmInfos(name='Sprungsuche (exponentiell)', outputnames='index', checks=True, metrics=True, preChecks=preChecks, postChecks=postChecks)
|
||||
def JumpSearchExponentiell(L: List[int], x: int) -> int:
|
||||
'''
|
||||
Inputs: L = Liste von Zahlen, x = Zahl.
|
||||
|
||||
Annahmen:
|
||||
- L sei aufsteigend sortiert.
|
||||
- L enthält keine Duplikate.
|
||||
|
||||
Outputs: Position von x in L, sonst −1 wenn x nicht in L.
|
||||
'''
|
||||
i0 = 0;
|
||||
i1 = 1;
|
||||
while i0 < len(L):
|
||||
AddToCounter();
|
||||
block = L[i0:i1];
|
||||
elementAfterBlock = block[-1] + 1;
|
||||
if x < elementAfterBlock:
|
||||
logDebug('Element muss sich im Block [{i0}, {i1}) befinden.'.format(i0 = i0, i1 = i1));
|
||||
index = SequentialSearch(L=block, x=x);
|
||||
return i0 + index; # NOTE: muss wegen Offset kompensieren
|
||||
logDebug('Element befindet sich nicht im Block [{i0}, {i1}) befinden.'.format(i0 = i0, i1 = i1));
|
||||
i0 = i1;
|
||||
i1 *= 2;
|
||||
return -1;
|
||||
|
@ -47,11 +47,12 @@ def LoopThroughCases(path: str):
|
||||
config = ReadConfigFile(path);
|
||||
cases = GetAttribute(config, 'parts', 'cases', expectedtype=list, default=[]);
|
||||
for caseindex, case in enumerate(cases):
|
||||
DisplayStartOfCase(caseindex);
|
||||
|
||||
command = GetAttribute(case, 'command', expectedtype=str, default='');
|
||||
descr = GetAttribute(case, 'description', expectedtype=str, default='');
|
||||
inputs = GetAttribute(case, 'inputs', expectedtype=dict, default={});
|
||||
|
||||
DisplayStartOfCase(caseindex, descr);
|
||||
|
||||
try:
|
||||
if command == 'algorithm-sum-maxsub':
|
||||
MaxSubSum(L=inputs['L']);
|
||||
@ -65,6 +66,8 @@ def LoopThroughCases(path: str):
|
||||
InterpolationSearch(L=inputs['L'], x=inputs['x'], u=0, v=len(inputs['L'])-1);
|
||||
elif command == 'algorithm-search-jump':
|
||||
JumpSearchLinear(L=inputs['L'], x=inputs['x'], m=inputs['m']);
|
||||
elif command == 'algorithm-search-jump-exp':
|
||||
JumpSearchExponentiell(L=inputs['L'], x=inputs['x']);
|
||||
elif command == 'algorithm-search-ith-element':
|
||||
FindIthSmallest(L=inputs['L'], i=inputs['i']);
|
||||
elif command == 'algorithm-search-ith-element-dc':
|
||||
|
Loading…
x
Reference in New Issue
Block a user