master > master: code go - vereinfachte logging
This commit is contained in:
@@ -5,8 +5,6 @@ package binary
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"ads/internal/core/logging"
|
||||
"ads/internal/core/metrics"
|
||||
)
|
||||
@@ -30,20 +28,20 @@ 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.LogDebug(fmt.Sprintf("x nicht in L"))
|
||||
logging.Debug("x nicht in L")
|
||||
return -1
|
||||
}
|
||||
metrics.AddTimeCost()
|
||||
m := int(len(L) / 2)
|
||||
if L[m] == x {
|
||||
logging.LogDebug(fmt.Sprintf("x in Position m gefunden"))
|
||||
logging.Debug("x in Position m gefunden")
|
||||
return m
|
||||
} else if x < L[m] {
|
||||
logging.LogDebug(fmt.Sprintf("Suche in linker Hälfte fortsetzen."))
|
||||
logging.Debug("Suche in linker Hälfte fortsetzen.")
|
||||
index := BinarySearch(L[:m], x)
|
||||
return index
|
||||
} else { // } else if x > L[m] {
|
||||
logging.LogDebug(fmt.Sprintf("Suche in rechter Hälfte fortsetzen."))
|
||||
logging.Debug("Suche in rechter Hälfte fortsetzen.")
|
||||
index := BinarySearch(L[m+1:], x)
|
||||
if index >= 0 {
|
||||
index += (m + 1) // NOTE: muss Indexwert kompensieren
|
||||
|
||||
@@ -5,7 +5,6 @@ package interpol
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
|
||||
"ads/internal/core/logging"
|
||||
@@ -31,23 +30,23 @@ Outputs: Position von x in L, sonst −1 wenn x nicht in L.
|
||||
*/
|
||||
func InterpolationSearch(L []int, x int, u int, v int) int {
|
||||
if len(L) == 0 {
|
||||
logging.LogDebug(fmt.Sprintf("Liste L leer, also x nicht in L"))
|
||||
logging.Debug("Liste L leer, also x nicht in L")
|
||||
return -1
|
||||
} else if !(L[u] <= x && x <= L[v]) {
|
||||
logging.LogDebug(fmt.Sprintf("x liegt außerhalb der Grenzen von L"))
|
||||
logging.Debug("x liegt außerhalb der Grenzen von L")
|
||||
return -1
|
||||
}
|
||||
metrics.AddTimeCost()
|
||||
p := getSuchposition(L, x, u, v)
|
||||
logging.LogDebug(fmt.Sprintf("Interpolante von x in (u, v)=(%[1]v, %[2]v) ist p = %[3]v.", u, v, p))
|
||||
logging.Debug("Interpolante von x in (u, v)=(%[1]v, %[2]v) ist p = %[3]v.", u, v, p)
|
||||
if L[p] == x {
|
||||
logging.LogDebug(fmt.Sprintf("x in Position p gefunden"))
|
||||
logging.Debug("x in Position p gefunden")
|
||||
return p
|
||||
} else if x < L[p] {
|
||||
logging.LogDebug(fmt.Sprintf("Suche in linker Hälfte fortsetzen."))
|
||||
logging.Debug("Suche in linker Hälfte fortsetzen.")
|
||||
return InterpolationSearch(L, x, u, p-1)
|
||||
} else { // } else if x > L[p] {
|
||||
logging.LogDebug(fmt.Sprintf("Suche in rechter Hälfte fortsetzen."))
|
||||
logging.Debug("Suche in rechter Hälfte fortsetzen.")
|
||||
return InterpolationSearch(L, x, p+1, v)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@ package ith_element
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"ads/internal/core/logging"
|
||||
"ads/internal/core/metrics"
|
||||
"ads/internal/core/utils"
|
||||
@@ -41,10 +39,10 @@ func FindIthSmallest(L []int, i int) int {
|
||||
minValue := L[index]
|
||||
// Falls i = 1, dann wird das Minimum gesucht, sonst Minimum entfernen und nach i-1. Element suchen
|
||||
if i == 1 {
|
||||
logging.LogDebug("Das i. kleinste Element wurde gefunden.")
|
||||
logging.Debug("Das i. kleinste Element wurde gefunden.")
|
||||
return minValue
|
||||
} else {
|
||||
logging.LogDebug(fmt.Sprintf("Entferne Minimum: %[1]v.", minValue))
|
||||
logging.Debug("Entferne Minimum: %[1]v.", minValue)
|
||||
i = i - 1
|
||||
L_ := utils.PopIndexListInt(L, index) // entferne Element mit Index = index
|
||||
return FindIthSmallest(L_, i)
|
||||
@@ -83,13 +81,13 @@ func FindIthSmallestDC(L []int, i int) int {
|
||||
}
|
||||
// Fallunterscheidung:
|
||||
if len(Ll) == i-1 {
|
||||
logging.LogDebug(fmt.Sprintf("Es gibt i-1 Elemente vor p=%[1]v. ==> i. kleinste Element = p", p))
|
||||
logging.Debug("Es gibt i-1 Elemente vor p=%[1]v. ==> i. kleinste Element = p", p)
|
||||
return p
|
||||
} else if len(Ll) >= i {
|
||||
logging.LogDebug(fmt.Sprintf("Es gibt >= i Elemente vor p=%[1]v. ==> Suche in linker Hälfte!", p))
|
||||
logging.Debug("Es gibt >= i Elemente vor p=%[1]v. ==> Suche in linker Hälfte!", p)
|
||||
return FindIthSmallestDC(Ll, i)
|
||||
} else {
|
||||
logging.LogDebug(fmt.Sprintf("Es gibt < i-1 Elemente vor p=%[1]v. ==> Suche in rechter Hälfte!", p))
|
||||
logging.Debug("Es gibt < i-1 Elemente vor p=%[1]v. ==> Suche in rechter Hälfte!", p)
|
||||
i = i - (len(Ll) + 1)
|
||||
return FindIthSmallestDC(Lr, i)
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@ package jump
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"ads/internal/algorithms/search/sequential"
|
||||
"ads/internal/core/logging"
|
||||
"ads/internal/core/metrics"
|
||||
@@ -44,14 +42,14 @@ func JumpSearchLinear(L []int, x int, m int) int {
|
||||
block := L[i0:i1]
|
||||
elementAfterBlock := block[len(block)-1] + 1
|
||||
if x < elementAfterBlock {
|
||||
logging.LogDebug(fmt.Sprintf("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)
|
||||
if index >= 0 {
|
||||
index += i0 // NOTE: muss wegen Offset kompensieren
|
||||
}
|
||||
return index
|
||||
}
|
||||
logging.LogDebug(fmt.Sprintf("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
|
||||
i1 += m
|
||||
}
|
||||
@@ -83,14 +81,14 @@ func JumpSearchExponentiell(L []int, x int) int {
|
||||
block := L[i0:i1]
|
||||
elementAfterBlock := block[len(block)-1] + 1
|
||||
if x < elementAfterBlock {
|
||||
logging.LogDebug(fmt.Sprintf("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)
|
||||
if index >= 0 {
|
||||
index += i0 // NOTE: muss wegen Offset kompensieren
|
||||
}
|
||||
return index
|
||||
}
|
||||
logging.LogDebug(fmt.Sprintf("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
|
||||
i1 *= 2
|
||||
}
|
||||
|
||||
@@ -5,8 +5,6 @@ package poison
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"ads/internal/core/logging"
|
||||
"ads/internal/core/metrics"
|
||||
"ads/internal/core/utils"
|
||||
@@ -32,17 +30,17 @@ Outputs: Der Index des vergifteten Getränks, falls es eines gibt, ansonsten -1.
|
||||
NOTE: Zeitkosten hier messen nur die Anzahl der Vorkoster.
|
||||
*/
|
||||
func FindPoison(L []int) int {
|
||||
logging.LogDebug("Bereite Vorkoster vor")
|
||||
logging.Debug("Bereite Vorkoster vor")
|
||||
n := len(L)
|
||||
testers := [][]int{}
|
||||
for i := 0; i < n; i++ {
|
||||
metrics.AddSpaceCost()
|
||||
logging.LogDebug(fmt.Sprintf("Füge Vorkoster hinzu, der nur Getränk %[1]v testet.", i))
|
||||
logging.Debug("Füge Vorkoster hinzu, der nur Getränk %[1]v testet.", i)
|
||||
testers = append(testers, []int{i})
|
||||
}
|
||||
logging.LogDebug("Warte auf Effekte")
|
||||
logging.Debug("Warte auf Effekte")
|
||||
effects := waitForEffects(L, testers)
|
||||
logging.LogDebug("Effekte auswerten, um vergiftete Getränke zu lokalisieren.")
|
||||
logging.Debug("Effekte auswerten, um vergiftete Getränke zu lokalisieren.")
|
||||
poisened := evaluateEffects(testers, effects)
|
||||
if len(poisened) > 0 {
|
||||
return poisened[0]
|
||||
@@ -64,7 +62,7 @@ Outputs: Der Index des vergifteten Getränks, falls es eines gibt, ansonsten -1.
|
||||
NOTE: Zeitkosten hier messen nur die Anzahl der Vorkoster.
|
||||
*/
|
||||
func FindPoisonFast(L []int) int {
|
||||
logging.LogDebug("Bereite Vorkoster vor")
|
||||
logging.Debug("Bereite Vorkoster vor")
|
||||
n := len(L)
|
||||
p := utils.LengthOfBinary(n)
|
||||
testers := [][]int{}
|
||||
@@ -85,13 +83,13 @@ func FindPoisonFast(L []int) int {
|
||||
* Darum zählen wir nicht 2 sondern 1 Vorkoster.
|
||||
*/
|
||||
metrics.AddSpaceCost(1)
|
||||
logging.LogDebug(fmt.Sprintf("Füge Vorkoster hinzu, der alle Getränke k testet mit %[1]v. Bit von k = 0.", i))
|
||||
logging.Debug("Füge Vorkoster hinzu, der alle Getränke k testet mit %[1]v. Bit von k = 0.", i)
|
||||
testers = append(testers, tester0)
|
||||
testers = append(testers, tester1)
|
||||
}
|
||||
logging.LogDebug("Warte auf Effekte")
|
||||
logging.Debug("Warte auf Effekte")
|
||||
effects := waitForEffects(L, testers)
|
||||
logging.LogDebug("Effekte auswerten, um vergiftete Getränke zu lokalisieren.")
|
||||
logging.Debug("Effekte auswerten, um vergiftete Getränke zu lokalisieren.")
|
||||
poisened := evaluateEffects(testers, effects)
|
||||
if len(poisened) > 0 {
|
||||
return poisened[0]
|
||||
|
||||
@@ -5,8 +5,6 @@ package sequential
|
||||
* ---------------------------------------------------------------- */
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"ads/internal/core/logging"
|
||||
"ads/internal/core/metrics"
|
||||
)
|
||||
@@ -30,10 +28,10 @@ func SequentialSearch(L []int, x int) int {
|
||||
for i := 0; i < n; i++ {
|
||||
metrics.AddTimeCost()
|
||||
if L[i] == x {
|
||||
logging.LogDebug(fmt.Sprintf("Element in Position %[1]v gefunden.", i))
|
||||
logging.Debug("Element in Position %[1]v gefunden.", i)
|
||||
return i
|
||||
}
|
||||
logging.LogDebug(fmt.Sprintf("Element nicht in Position %[1]v.", i))
|
||||
logging.Debug("Element nicht in Position %[1]v.", i)
|
||||
}
|
||||
return -1
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user