Compare commits

...

8 Commits

Author SHA1 Message Date
0xAX 9e7a1904a5
Merge pull request #34 from ridwanfathin/graph_fw
add flowd-warshall algorithm
2 years ago
0xAX 3d6755a742
Merge pull request #33 from ridwanfathin/master
Add Max subArray
2 years ago
0xAX 8b7a3eee46
Merge pull request #35 from ridwanfathin/swap
Add verify swap using pointers
2 years ago
ridwanfathin f0fbbd2ff2 Add verify swap using pointers 4 years ago
ridwanfathin 13b2e9dab7 fix comment typo 4 years ago
ridwanfathin 1f17712ce4 add flowd-warshall algorithm 4 years ago
ridwanfathin 0bcd28f8e5 add test case 4 years ago
ridwanfathin c18442cc01 Add Max subArray 4 years ago

@ -0,0 +1,57 @@
// shortest distances between every pair of vertices using floyd-warshall algorithm
// https://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm
// http://www.golangprograms.com/golang-program-for-implementation-of-floyd-warshall-algorithm.html
package graph
import (
"fmt"
"math"
)
type graph struct {
to int
wt float64
}
func floydWarshall(g [][]graph) [][]float64 {
dist := make([][]float64, len(g))
for i := range dist {
di := make([]float64, len(g))
for j := range di {
di[j] = math.Inf(1)
}
di[i] = 0
dist[i] = di
}
for u, graphs := range g {
for _, v := range graphs {
dist[u][v.to] = v.wt
}
}
for k, dk := range dist {
for _, di := range dist {
for j, dij := range di {
if d := di[k] + dk[j]; dij > d {
di[j] = d
}
}
}
}
return dist
}
func main() {
gra := [][]graph{
1: {{2, 3}, {3, 8}, {5, -4}},
2: {{4, 1}, {5, 7}},
3: {{2, 4}},
4: {{1, 2}, {3, -5}},
5: {{4, 6}},
}
dist := floydWarshall(gra)
//dist[][] will be the output matrix that will have the shortest distances between every pair of vertices
for _, d := range dist {
fmt.Printf("%4g\n", d)
}
}

@ -0,0 +1,31 @@
package numerical
import (
"fmt"
)
/* O(n) solution for calculating maximum subarray sum. */
func Max(x int, y int) int {
if x < y {
return y
}
return x
}
func maxSubarray(array []int) int {
var currentMax int = 0
var maxTillNow int = 0
for _, v := range array {
currentMax = Max(v, currentMax+v)
maxTillNow = Max(maxTillNow, currentMax)
}
return maxTillNow
}
func main() {
array := []int{-3, -4, 7, 1, -2, 0, -5, 1, 0, 6, -5}
fmt.Println("Maximum subarray sum: ", maxSubarray(array))
array = []int{3, 4, -7, 2, 0, 0, -3, -1, 0, -5, 7}
fmt.Println("Maximum subarray sum: ", maxSubarray(array))
}

@ -0,0 +1,15 @@
package numerical
import "fmt"
func swap(x, y *int) {
*x, *y = *y, *x
}
func main() {
x := 3
y := 2
fmt.Println(x, y)
swap(&x, &y)
fmt.Println(x, y)
}

@ -0,0 +1,19 @@
package numerical
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestSwap(t *testing.T) {
x := 5
y := 6
expectedX := 6
expectedY := 5
swap(&x, &y)
assert.Equal(t, x, expectedX, "value should be equal")
assert.Equal(t, y, expectedY, "value should be equal")
}
Loading…
Cancel
Save