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