Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
41
Task/Statistics-Basic/Go/statistics-basic-1.go
Normal file
41
Task/Statistics-Basic/Go/statistics-basic-1.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"math/rand"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
sample(100)
|
||||
sample(1000)
|
||||
sample(10000)
|
||||
}
|
||||
|
||||
func sample(n int) {
|
||||
// generate data
|
||||
d := make([]float64, n)
|
||||
for i := range d {
|
||||
d[i] = rand.Float64()
|
||||
}
|
||||
// show mean, standard deviation
|
||||
var sum, ssq float64
|
||||
for _, s := range d {
|
||||
sum += s
|
||||
ssq += s * s
|
||||
}
|
||||
fmt.Println(n, "numbers")
|
||||
m := sum / float64(n)
|
||||
fmt.Println("Mean: ", m)
|
||||
fmt.Println("Stddev:", math.Sqrt(ssq/float64(n)-m*m))
|
||||
// show histogram
|
||||
h := make([]int, 10)
|
||||
for _, s := range d {
|
||||
h[int(s*10)]++
|
||||
}
|
||||
for _, c := range h {
|
||||
fmt.Println(strings.Repeat("*", c*205/int(n)))
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
64
Task/Statistics-Basic/Go/statistics-basic-2.go
Normal file
64
Task/Statistics-Basic/Go/statistics-basic-2.go
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"math/rand"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
bigSample(1e7)
|
||||
}
|
||||
|
||||
func bigSample(n int64) {
|
||||
sum, ssq, h := reduce(0, n)
|
||||
// compute final statistics and output as above
|
||||
fmt.Println(n, "numbers")
|
||||
m := sum / float64(n)
|
||||
fmt.Println("Mean: ", m)
|
||||
fmt.Println("Stddev:", math.Sqrt(ssq/float64(n)-m*m))
|
||||
for _, c := range h {
|
||||
fmt.Println(strings.Repeat("*", c*205/int(n)))
|
||||
}
|
||||
fmt.Println()
|
||||
}
|
||||
|
||||
const threshold = 1e6
|
||||
|
||||
func reduce(start, end int64) (sum, ssq float64, h []int) {
|
||||
n := end - start
|
||||
if n < threshold {
|
||||
d := getSegment(start, end)
|
||||
return computeSegment(d)
|
||||
}
|
||||
// map to two sub problems
|
||||
half := (start + end) / 2
|
||||
sum1, ssq1, h1 := reduce(start, half)
|
||||
sum2, ssq2, h2 := reduce(half, end)
|
||||
// combine results
|
||||
for i, c := range h2 {
|
||||
h1[i] += c
|
||||
}
|
||||
return sum1 + sum2, ssq1 + ssq2, h1
|
||||
}
|
||||
|
||||
func getSegment(start, end int64) []float64 {
|
||||
d := make([]float64, end-start)
|
||||
for i := range d {
|
||||
d[i] = rand.Float64()
|
||||
}
|
||||
return d
|
||||
}
|
||||
|
||||
func computeSegment(d []float64) (sum, ssq float64, h []int) {
|
||||
for _, s := range d {
|
||||
sum += s
|
||||
ssq += s * s
|
||||
}
|
||||
h = make([]int, 10)
|
||||
for _, s := range d {
|
||||
h[int(s*10)]++
|
||||
}
|
||||
return
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue