Iwe unofunga kuti idzi mbiri sarudzo dzekuyedza mamiriro mukati me loop dzakafanana mukuita?
if a > b && c*2 > d {
....
}
// ΠΈ
if a <= b {
continue;
}
if c*2 > d {
....
}
Zvese zvakatanga ne βbrain warm-upβ; ndaifanira kupa muenzaniso wetsvakiridzo yakakwana yenhamba huru kwazvo munhevedzano yemanhamba [-x....x]. Ini ndanga ndichinetsekana kuti kuita kurinani kwaizove kwakadii kana ndikashandisa zvine musoro kuwanda ne1 kuti ndione kana nhamba iri kunyange kana kwete.
//Ρ ΡΠ΅ΡΠ½ΡΡ
ΡΠΈΡΠ΅Π» ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±ΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ 0
value & 1 == 0
//vs ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄
value % 2 == 0
Chiitiko changu chechirongwa muGo hachina kunyanyisa, inopfuura gore nehafu, ndakaishandisa, kunyangwe kazhinji, asi nekuda kwezvinangwa zvekushandisa (zvakanaka, pamwe kunze kwepurojekiti imwe ine chekuita neyakakura-mutoro http sevhisi), saka Ndakatanga nazvo. Vhura GoLand uye nyora bvunzo yakapusa
package main
import (
"fmt"
"log"
"math"
"math/rand"
"time"
)
const size = 100000000 //math.MaxInt32*2
type Result struct {
Name string
Duration time.Duration
Value int32
}
func main() {
log.Println("initial array capacity: " + fmt.Sprint(size))
var maxValue int32
// ΠΡΠ΄Π΅ΠΌ Π²Π°ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠΈΡΠ΅Π» ΠΎΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ
// Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ. Π§Π΅ΠΌ ΠΌΠ΅Π½ΡΡΠ΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅
// ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ ΡΡ
ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ
// ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΈΡΠ»Π°, Ρ ΡΠ°Π½Π΅Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠΌ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ
for maxValue = 128; maxValue < math.MaxInt32/2+1; maxValue = maxValue * 2 {
test(maxValue)
}
}
func test(maxValue int32) {
log.Println("max threshold: " + fmt.Sprint(maxValue))
arr := make([]int32, size)
for i := range arr {
arr[i] = rand.Int31n(maxValue)
// Π² ΡΠ΅ΡΡΠΎΠ²ΡΡ
Π΄Π°Π½Π½ΡΡ
Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΈΡΠ»Π°
sign := rand.Intn(2)
if sign == 1 {
arr[i] = -arr[i]
}
}
// Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΡ "Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ ΠΎΡΡΠ°ΡΠΊΠΎΠΌ"
result := maxEvenDividing("maxEvenDividing", arr)
log.Printf(result.Name+"t result: "+fmt.Sprint(result.Value)+"ttduration %s", result.Duration)
// Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΡΠ΅ΡΡ "ΠΊΠΎΠ½ΡΡΠ½ΠΊΡΠΈΠΈ"
result = maxEvenConjunction("maxEvenConjunction", arr)
log.Printf(result.Name+"t result: "+fmt.Sprint(result.Value)+"ttduration %s", result.Duration)
}
func maxEvenDividing(name string, arr []int32) Result {
start := time.Now()
var current int32 = math.MinInt32
for _, value := range arr {
if value > current && value%2 == 0 {
current = value
}
}
duration := time.Since(start)
result := Result{name, duration, current}
return result
}
func maxEvenConjunction(name string, arr []int32) Result {
start := time.Now()
var current int32 = math.MinInt32
for _, value := range arr {
if value > current && value&1 == 0 {
current = value
}
}
duration := time.Since(start)
result := Result{name, duration, current}
return result
}
Isu tinowana mhedzisiro inoratidza kuti iyo yakakwira chikumbaridzo, kazhinji kushanduka kwekuita kunooneka.
Enzanisamax threshold: 128
maxEvenDividing result: 126 duration 116.0067ms
maxEvenConjunction result: 126 duration 116.0066ms
max threshold: 16384
maxEvenDividing result: 16382 duration 115.0066ms
maxEvenConjunction result: 16382 duration 111.0064ms
......
max threshold: 8388608
maxEvenDividing result: 8388606 duration 109.0063ms
maxEvenConjunction result: 8388606 duration 109.0062ms
max threshold: 16777216
maxEvenDividing result: 16777214 duration 108.0062ms
maxEvenConjunction result: 16777214 duration 109.0062ms
max threshold: 33554432
maxEvenDividing result: 33554430 duration 114.0066ms
maxEvenConjunction result: 33554430 duration 110.0063ms
max threshold: 67108864
maxEvenDividing result: 67108860 duration 111.0064ms
maxEvenConjunction result: 67108860 duration 109.0062ms
max threshold: 134217728
maxEvenDividing result: 134217726 duration 108.0062ms
maxEvenConjunction result: 134217726 duration 109.0063ms
max threshold: 268435456
maxEvenDividing result: 268435446 duration 111.0063ms
maxEvenConjunction result: 268435446 duration 110.0063ms
Zviripachena kuti mune iyi kesi, kune akasiyana zvikumbaridzo isu tine akasiyana seti yebvunzo data, iyo processor mutoro (pai5-2540M laptop yangu) inosiyana kutenderera 20. nezve 30MB - izvi zvinokanganisawo kuvimbika kwemhedzisiro, unofanirwa kuchengetedza ma test kesi pa diski uye womhanyisa bvunzo dzese pachikumbaridzo chega kubva kune mumwe.
Uye zvino, ndichifunga nezve maitiro ekuita zvese izvi nemari shoma, ini ndinogadzirisa cheki cheki
if value > current && value&1 == 0 {
current = value
}
pamusoro
if value <= current {
continue;
}
if value&1 == 0 {
current = value
}
Ini ndinomhanyisa bvunzo zvakare ... uye ndinomira kunzwisisa chero chinhu :)
Nguva yakashandiswa pakuurayiwa inotanga kusiyanisa kwete nezvikamu / zvikamu zvezana, asi ne 10..15%. Ndinokurumidza kuwedzera mimwe miedzo miviri:
func maxEvenDividing2(name string, arr []int32) Result {
start := time.Now()
var current int32 = math.MinInt32
for _, value := range arr {
if value <= current {
continue
}
if value%2 == 0 {
current = value
}
}
duration := time.Since(start)
result := Result{name, duration, current}
return result
}
func maxEvenConjunction2(name string, arr []int32) Result {
start := time.Now()
var current int32 = math.MinInt32
for _, value := range arr {
if value <= current {
continue
}
if value&1 == 0 {
current = value
}
}
duration := time.Since(start)
result := Result{name, duration, current}
return result
}
Ndinomhanya uye ndinotora mufananidzo uyu:hurongwa hwekutanga huwandu: 100000000
Chikumbaridzo chikuru: 128
maxEvenDividing mhedzisiro: 126 duration 116.0066ms
maxEvenDividing2 mhedzisiro: 126 nguva 79.0045ms
maxEvenConjunction mhedzisiro: 126 nguva 114.0065ms
maxEvenConjunction2 mhedzisiro: 126 nguva 83.0048ms
Chikumbaridzo chikuru: 256
maxEvenDividing mhedzisiro: 254 duration 111.0063ms
maxEvenDividing2 mhedzisiro: 254 nguva 77.0044ms
maxEvenConjunction mhedzisiro: 254 nguva 110.0063ms
maxEvenConjunction2 mhedzisiro: 254 nguva 80.0046ms
Chikumbaridzo chikuru: 512
maxEvenDividing mhedzisiro: 510 duration 114.0066ms
maxEvenDividing2 mhedzisiro: 510 nguva 80.0045ms
maxEvenConjunction mhedzisiro: 510 nguva 110.0063ms
maxEvenConjunction2 mhedzisiro: 510 nguva 80.0046ms
Chikumbaridzo chikuru: 1024
maxEvenDividing mhedzisiro: 1022 duration 109.0063ms
maxEvenDividing2 mhedzisiro: 1022 nguva 77.0044ms
maxEvenConjunction mhedzisiro: 1022 nguva 111.0063ms
maxEvenConjunction2 mhedzisiro: 1022 nguva 81.0047ms
Chikumbaridzo chikuru: 2048
maxEvenDividing mhedzisiro: 2046 duration 114.0065ms
maxEvenDividing2 mhedzisiro: 2046 nguva 79.0045ms
maxEvenConjunction mhedzisiro: 2046 nguva 113.0065ms
maxEvenConjunction2 mhedzisiro: 2046 nguva 81.0046ms
Chikumbaridzo chikuru: 4096
maxEvenDividing mhedzisiro: 4094 duration 114.0065ms
maxEvenDividing2 mhedzisiro: 4094 nguva 80.0046ms
maxEvenConjunction mhedzisiro: 4094 nguva 111.0063ms
maxEvenConjunction2 mhedzisiro: 4094 nguva 78.0045ms
Chikumbaridzo chikuru: 8192
maxEvenDividing mhedzisiro: 8190 duration 107.0062ms
maxEvenDividing2 mhedzisiro: 8190 nguva 77.0044ms
maxEvenConjunction mhedzisiro: 8190 nguva 111.0063ms
maxEvenConjunction2 mhedzisiro: 8190 nguva 77.0044ms
Chikumbaridzo chikuru: 16384
maxEvenDividing mhedzisiro: 16382 duration 109.0063ms
maxEvenDividing2 mhedzisiro: 16382 nguva 77.0044ms
maxEvenConjunction mhedzisiro: 16382 nguva 108.0062ms
maxEvenConjunction2 mhedzisiro: 16382 nguva 77.0044ms
Chikumbaridzo chikuru: 32768
maxEvenDividing mhedzisiro: 32766 duration 112.0064ms
maxEvenDividing2 mhedzisiro: 32766 nguva 77.0044ms
maxEvenConjunction mhedzisiro: 32766 nguva 109.0062ms
maxEvenConjunction2 mhedzisiro: 32766 nguva 78.0045ms
Chikumbaridzo chikuru: 65536
maxEvenDividing mhedzisiro: 65534 duration 109.0062ms
maxEvenDividing2 mhedzisiro: 65534 nguva 75.0043ms
maxEvenConjunction mhedzisiro: 65534 nguva 109.0063ms
maxEvenConjunction2 mhedzisiro: 65534 nguva 79.0045ms
Chikumbaridzo chikuru: 131072
maxEvenDividing mhedzisiro: 131070 duration 108.0061ms
maxEvenDividing2 mhedzisiro: 131070 nguva 76.0044ms
maxEvenConjunction mhedzisiro: 131070 nguva 110.0063ms
maxEvenConjunction2 mhedzisiro: 131070 nguva 80.0046ms
Chikumbaridzo chikuru: 262144
maxEvenDividing mhedzisiro: 262142 duration 110.0063ms
maxEvenDividing2 mhedzisiro: 262142 nguva 76.0044ms
maxEvenConjunction mhedzisiro: 262142 nguva 107.0061ms
maxEvenConjunction2 mhedzisiro: 262142 nguva 78.0044ms
Chikumbaridzo chikuru: 524288
maxEvenDividing mhedzisiro: 524286 duration 109.0062ms
maxEvenDividing2 mhedzisiro: 524286 nguva 78.0045ms
maxEvenConjunction mhedzisiro: 524286 nguva 109.0062ms
maxEvenConjunction2 mhedzisiro: 524286 nguva 80.0046ms
Chikumbaridzo chikuru: 1048576
maxEvenDividing mhedzisiro: 1048574 duration 109.0063ms
maxEvenDividing2 mhedzisiro: 1048574 nguva 80.0045ms
maxEvenConjunction mhedzisiro: 1048574 nguva 114.0066ms
maxEvenConjunction2 mhedzisiro: 1048574 nguva 78.0044ms
Chikumbaridzo chikuru: 2097152
maxEvenDividing mhedzisiro: 2097150 duration 111.0064ms
maxEvenDividing2 mhedzisiro: 2097150 nguva 79.0045ms
maxEvenConjunction mhedzisiro: 2097150 nguva 112.0064ms
maxEvenConjunction2 mhedzisiro: 2097150 nguva 77.0044ms
Chikumbaridzo chikuru: 4194304
maxEvenDividing mhedzisiro: 4194302 duration 111.0063ms
maxEvenDividing2 mhedzisiro: 4194302 nguva 78.0045ms
maxEvenConjunction mhedzisiro: 4194302 nguva 111.0063ms
maxEvenConjunction2 mhedzisiro: 4194302 nguva 77.0044ms
Chikumbaridzo chikuru: 8388608
maxEvenDividing mhedzisiro: 8388606 duration 109.0062ms
maxEvenDividing2 mhedzisiro: 8388606 nguva 78.0045ms
maxEvenConjunction mhedzisiro: 8388606 nguva 114.0065ms
maxEvenConjunction2 mhedzisiro: 8388606 nguva 78.0045ms
Chikumbaridzo chikuru: 16777216
maxEvenDividing mhedzisiro: 16777214 duration 109.0062ms
maxEvenDividing2 mhedzisiro: 16777214 nguva 77.0044ms
maxEvenConjunction mhedzisiro: 16777214 nguva 109.0063ms
maxEvenConjunction2 mhedzisiro: 16777214 nguva 77.0044ms
Chikumbaridzo chikuru: 33554432
maxEvenDividing mhedzisiro: 33554430 duration 113.0065ms
maxEvenDividing2 mhedzisiro: 33554430 nguva 78.0045ms
maxEvenConjunction mhedzisiro: 33554430 nguva 110.0063ms
maxEvenConjunction2 mhedzisiro: 33554430 nguva 80.0045ms
Chikumbaridzo chikuru: 67108864
maxEvenDividing mhedzisiro: 67108860 duration 112.0064ms
maxEvenDividing2 mhedzisiro: 67108860 nguva 77.0044ms
maxEvenConjunction mhedzisiro: 67108860 nguva 112.0064ms
maxEvenConjunction2 mhedzisiro: 67108860 nguva 80.0046ms
Chikumbaridzo chikuru: 134217728
maxEvenDividing mhedzisiro: 134217726 duration 109.0063ms
maxEvenDividing2 mhedzisiro: 134217726 nguva 78.0044ms
maxEvenConjunction mhedzisiro: 134217726 nguva 114.0065ms
maxEvenConjunction2 mhedzisiro: 134217726 nguva 81.0047ms
Chikumbaridzo chikuru: 268435456
maxEvenDividing mhedzisiro: 268435446 duration 111.0064ms
maxEvenDividing2 mhedzisiro: 268435446 nguva 79.0045ms
maxEvenConjunction mhedzisiro: 268435446 nguva 114.0065ms
maxEvenConjunction2 mhedzisiro: 268435446 nguva 79.0045ms
Chikumbaridzo chikuru: 536870912
maxEvenDividing mhedzisiro: 536870910 duration 107.0062ms
maxEvenDividing2 mhedzisiro: 536870910 nguva 76.0043ms
maxEvenConjunction mhedzisiro: 536870910 nguva 109.0062ms
maxEvenConjunction2 mhedzisiro: 536870910 nguva 80.0046ms
Handina kuwana tsananguro yakajeka kuti sei Go compiler isingagadzirise kodhi uye inogara ichitarisa mamiriro echipiri, kunyangwe yekutanga inhema. Kana kuti pamwe maziso angu akajeka uye handisi kuona chero kukanganisa kuri pachena? Kana iwe unofanirwa kupa mimwe mirairo yakakosha kune iyo compiler? Ndingafara nemhinduro dzine musoro.
PS: Hongu, kungonakidzwa, ndakamhanya bvunzo dzakafanana paJava 5 neJava 7/8 - zvese zvakajeka, nguva yekuuraya yakafanana.
Source: www.habr.com