From a96d1bb6c92a1d3e31a09393e4d0a0f50cec7ff8 Mon Sep 17 00:00:00 2001 From: raj_mathe Date: Thu, 4 Nov 2021 11:36:14 +0100 Subject: [PATCH] =?UTF-8?q?master=20>=20master:=20code=20go=20-=20debug=20?= =?UTF-8?q?messages=20im=20algorithmus=20ausf=C3=BChrlicher=20+=20minor=20?= =?UTF-8?q?stil=C3=A4nderung?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/algorithms/search/binary/binary.go | 17 ++++++++++------- .../internal/algorithms/search/jump/jump.go | 12 ++++++------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/code/golang/internal/algorithms/search/binary/binary.go b/code/golang/internal/algorithms/search/binary/binary.go index e51a0ef..fff9577 100644 --- a/code/golang/internal/algorithms/search/binary/binary.go +++ b/code/golang/internal/algorithms/search/binary/binary.go @@ -28,24 +28,27 @@ Outputs: Position von x in L, sonst −1 wenn x nicht in L. */ func BinarySearch(L []int, x int) int { if len(L) == 0 { - logging.Debug("x nicht in L") + logging.Debug("x nicht in L.") return -1 } metrics.AddTimeCost() m := int(len(L) / 2) if L[m] == x { - logging.Debug("x in Position m gefunden") + logging.Debug("Suche in %v .. %v; m = %v; L[m] = x ==> Element gefunden.", 0, len(L)-1, m) return m + } else if len(L) == 1 { + logging.Debug("L enthält 1 Element; L[m] =/= x; ==> x nicht in L.") + return -1 } else if x < L[m] { - logging.Debug("Suche in linker Hälfte fortsetzen.") + logging.Debug("Suche in %v .. %v; m = %v; L[m] = %v > x ==> Suche in linker Hälfte fortsetzen.", 0, len(L)-1, m, L[m]) index := BinarySearch(L[:m], x) return index } else { // } else if x > L[m] { - logging.Debug("Suche in rechter Hälfte fortsetzen.") + logging.Debug("Suche in %v .. %v; m = %v; L[m] = %v < x ==> Suche in rechter Hälfte fortsetzen.", 0, len(L)-1, m, L[m]) index := BinarySearch(L[m+1:], x) - if index >= 0 { - index += (m + 1) // NOTE: muss Indexwert kompensieren + if index == -1 { + return -1 // wenn nicht gefunden } - return index + return index + (m + 1) // NOTE: muss Indexwert kompensieren } } diff --git a/code/golang/internal/algorithms/search/jump/jump.go b/code/golang/internal/algorithms/search/jump/jump.go index 6ea0746..674e5b7 100644 --- a/code/golang/internal/algorithms/search/jump/jump.go +++ b/code/golang/internal/algorithms/search/jump/jump.go @@ -44,10 +44,10 @@ func JumpSearchLinear(L []int, x int, m int) int { if x < elementAfterBlock { logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1) index := sequential.SequentialSearch(block, x) - if index >= 0 { - index += i0 // NOTE: muss wegen Offset kompensieren + if index == -1 { + return -1 // wenn nicht gefunden } - return index + return index + i0 // NOTE: muss wegen Offset kompensieren } logging.Debug("Element befindet sich nicht im Block [%[1]v, %[2]v).", i0, i1) i0 = i1 @@ -83,10 +83,10 @@ func JumpSearchExponentiell(L []int, x int) int { if x < elementAfterBlock { logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1) index := sequential.SequentialSearch(block, x) - if index >= 0 { - index += i0 // NOTE: muss wegen Offset kompensieren + if index == -1 { + return -1 // wenn nicht gefunden } - return index + return index + i0 // NOTE: muss wegen Offset kompensieren } logging.Debug("Element befindet sich nicht im Block [%[1]v, %[2]v).", i0, i1) i0 = i1