master > master: code go - debug messages im algorithmus ausführlicher + minor stiländerung
This commit is contained in:
parent
31b3c19bf9
commit
a96d1bb6c9
@ -28,24 +28,27 @@ Outputs: Position von x in L, sonst −1 wenn x nicht in L.
|
|||||||
*/
|
*/
|
||||||
func BinarySearch(L []int, x int) int {
|
func BinarySearch(L []int, x int) int {
|
||||||
if len(L) == 0 {
|
if len(L) == 0 {
|
||||||
logging.Debug("x nicht in L")
|
logging.Debug("x nicht in L.")
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
metrics.AddTimeCost()
|
metrics.AddTimeCost()
|
||||||
m := int(len(L) / 2)
|
m := int(len(L) / 2)
|
||||||
if L[m] == x {
|
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
|
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] {
|
} 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)
|
index := BinarySearch(L[:m], x)
|
||||||
return index
|
return index
|
||||||
} else { // } else if x > L[m] {
|
} 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)
|
index := BinarySearch(L[m+1:], x)
|
||||||
if index >= 0 {
|
if index == -1 {
|
||||||
index += (m + 1) // NOTE: muss Indexwert kompensieren
|
return -1 // wenn nicht gefunden
|
||||||
}
|
}
|
||||||
return index
|
return index + (m + 1) // NOTE: muss Indexwert kompensieren
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,10 +44,10 @@ func JumpSearchLinear(L []int, x int, m int) int {
|
|||||||
if x < elementAfterBlock {
|
if x < elementAfterBlock {
|
||||||
logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1)
|
logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1)
|
||||||
index := sequential.SequentialSearch(block, x)
|
index := sequential.SequentialSearch(block, x)
|
||||||
if index >= 0 {
|
if index == -1 {
|
||||||
index += i0 // NOTE: muss wegen Offset kompensieren
|
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)
|
logging.Debug("Element befindet sich nicht im Block [%[1]v, %[2]v).", i0, i1)
|
||||||
i0 = i1
|
i0 = i1
|
||||||
@ -83,10 +83,10 @@ func JumpSearchExponentiell(L []int, x int) int {
|
|||||||
if x < elementAfterBlock {
|
if x < elementAfterBlock {
|
||||||
logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1)
|
logging.Debug("Element muss sich im Block [%[1]v, %[2]v) befinden.", i0, i1)
|
||||||
index := sequential.SequentialSearch(block, x)
|
index := sequential.SequentialSearch(block, x)
|
||||||
if index >= 0 {
|
if index == -1 {
|
||||||
index += i0 // NOTE: muss wegen Offset kompensieren
|
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)
|
logging.Debug("Element befindet sich nicht im Block [%[1]v, %[2]v).", i0, i1)
|
||||||
i0 = i1
|
i0 = i1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user