Compare commits
8 Commits
6c54e8827e
...
9e7a1904a5
Author | SHA1 | Date |
---|---|---|
0xAX | 9e7a1904a5 | 2 years ago |
0xAX | 3d6755a742 | 2 years ago |
0xAX | 8b7a3eee46 | 2 years ago |
ridwanfathin | f0fbbd2ff2 | 4 years ago |
ridwanfathin | 13b2e9dab7 | 4 years ago |
ridwanfathin | 1f17712ce4 | 4 years ago |
ridwanfathin | 0bcd28f8e5 | 4 years ago |
ridwanfathin | c18442cc01 | 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…
Reference in New Issue