Ma u malaynaysaa in labadan doorasho ee xaaladaha tijaabada ah ee loop-ku ay u dhigmaan waxqabad ahaan?
if a > b && c*2 > d {
....
}
// ΠΈ
if a <= b {
continue;
}
if c*2 > d {
....
}
Dhammaantood waxay ku bilowdeen "kuleyl maskaxeed"; Waxaan ku qasbanaay inaan bixiyo tusaale raadinta ugu fican ee tirada ugu weyn ee isku dhafka ah [-x....x]. Waxaan la yaabanahay intee in le'eg ayay waxqabadka ka fiicnaan doontaa haddii aan isticmaalo isku dhufashada macquulka ah ee 1 si aan u ogaado in lambarku xitaa yahay iyo in kale.
//Ρ ΡΠ΅ΡΠ½ΡΡ
ΡΠΈΡΠ΅Π» ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±ΠΈΡ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π²Π΅Π½ 0
value & 1 == 0
//vs ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄
value % 2 == 0
Khibradayda barnaamijka ee Go ma ahan mid aad u ballaaran, kaliya hal sano iyo badh, waan isticmaali jiray, in kasta oo marar badan, laakiin kaliya ujeeddooyin faa'iido leh (si fiican, laga yaabee marka laga reebo hal mashruuc oo la xiriira adeegga sare ee http), sidaas darteed ku bilaabay. Fur GoLand oo qor imtixaan fudud
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
}
Waxaan helnaa natiijo muujinaysa in heerka sare u kaca, inta badan isbedbedelka waxqabadka ayaa muuqda.
Isbarbar dhigmax 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
Way caddahay in kiiskan, marxalado kala duwan aan haysano noocyo kala duwan oo xog tijaabo ah, culeyska processor-ka (ee ku jira laptop-ka i5-2540M) wuxuu ku kala duwan yahay 20..30%, xusuusta uu ku jiro arjiga ka socda GoLand waa celcelis ahaan. qiyaastii 813MB - tani waxay sidoo kale saameyneysaa isku halaynta natiijada, waxaad u baahan tahay inaad ku badbaadiso kiisaska imtixaanka diskka oo aad ku sameyso dhammaan imtixaannada marin kasta oo gooni ah midba midka kale.
Oo hadda, ka fekeraya sida loo hirgeliyo waxaas oo dhan kharashyada ugu yar, waxaan si toos ah u saxaa hubinta xaaladda
if value > current && value&1 == 0 {
current = value
}
on
if value <= current {
continue;
}
if value&1 == 0 {
current = value
}
Mar kale ayaan imtixaanada wadaa...oo waan joojinayaa in aan wax fahmo :)
Waqtiga lagu qaato fulinta wuxuu bilaabmaa inuu ku kala duwanaado boqolleyda/jajabyada boqolkiiba, laakiin 10%. Waxaan si degdeg ah ugu daraa 15 imtixaan oo kale:
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
}
Waan ordayaa oo helay sawirkan:Awoodda diyaarinta bilowga ah: 100000000
heerka ugu sarreeya: 128
maxEvenDividing natiijada: 126 duration 116.0066ms
maxEvenDividing2 natiijada: 126 duration 79.0045ms
natiijada maxEvenConjunction: 126 duration 114.0065ms
maxEvenConjunction2 natiijada: 126 duration 83.0048ms
heerka ugu sarreeya: 256
maxEvenDividing natiijada: 254 duration 111.0063ms
maxEvenDividing2 natiijada: 254 duration 77.0044ms
natiijada maxEvenConjunction: 254 duration 110.0063ms
maxEvenConjunction2 natiijada: 254 duration 80.0046ms
heerka ugu sarreeya: 512
maxEvenDividing natiijada: 510 duration 114.0066ms
maxEvenDividing2 natiijada: 510 duration 80.0045ms
natiijada maxEvenConjunction: 510 duration 110.0063ms
maxEvenConjunction2 natiijada: 510 duration 80.0046ms
heerka ugu sarreeya: 1024
maxEvenDividing natiijada: 1022 duration 109.0063ms
maxEvenDividing2 natiijada: 1022 duration 77.0044ms
natiijada maxEvenConjunction: 1022 duration 111.0063ms
maxEvenConjunction2 natiijada: 1022 duration 81.0047ms
heerka ugu sarreeya: 2048
maxEvenDividing natiijada: 2046 duration 114.0065ms
maxEvenDividing2 natiijada: 2046 duration 79.0045ms
natiijada maxEvenConjunction: 2046 duration 113.0065ms
maxEvenConjunction2 natiijada: 2046 duration 81.0046ms
heerka ugu sarreeya: 4096
maxEvenDividing natiijada: 4094 duration 114.0065ms
maxEvenDividing2 natiijada: 4094 duration 80.0046ms
natiijada maxEvenConjunction: 4094 duration 111.0063ms
maxEvenConjunction2 natiijada: 4094 duration 78.0045ms
heerka ugu sarreeya: 8192
maxEvenDividing natiijada: 8190 duration 107.0062ms
maxEvenDividing2 natiijada: 8190 duration 77.0044ms
natiijada maxEvenConjunction: 8190 duration 111.0063ms
maxEvenConjunction2 natiijada: 8190 duration 77.0044ms
heerka ugu sarreeya: 16384
maxEvenDividing natiijada: 16382 duration 109.0063ms
maxEvenDividing2 natiijada: 16382 duration 77.0044ms
natiijada maxEvenConjunction: 16382 duration 108.0062ms
maxEvenConjunction2 natiijada: 16382 duration 77.0044ms
heerka ugu sarreeya: 32768
maxEvenDividing natiijada: 32766 duration 112.0064ms
maxEvenDividing2 natiijada: 32766 duration 77.0044ms
natiijada maxEvenConjunction: 32766 duration 109.0062ms
maxEvenConjunction2 natiijada: 32766 duration 78.0045ms
heerka ugu sarreeya: 65536
maxEvenDividing natiijada: 65534 duration 109.0062ms
maxEvenDividing2 natiijada: 65534 duration 75.0043ms
natiijada maxEvenConjunction: 65534 duration 109.0063ms
maxEvenConjunction2 natiijada: 65534 duration 79.0045ms
heerka ugu sarreeya: 131072
maxEvenDividing natiijada: 131070 duration 108.0061ms
maxEvenDividing2 natiijada: 131070 duration 76.0044ms
natiijada maxEvenConjunction: 131070 duration 110.0063ms
maxEvenConjunction2 natiijada: 131070 duration 80.0046ms
heerka ugu sarreeya: 262144
maxEvenDividing natiijada: 262142 duration 110.0063ms
maxEvenDividing2 natiijada: 262142 duration 76.0044ms
natiijada maxEvenConjunction: 262142 duration 107.0061ms
maxEvenConjunction2 natiijada: 262142 duration 78.0044ms
heerka ugu sarreeya: 524288
maxEvenDividing natiijada: 524286 duration 109.0062ms
maxEvenDividing2 natiijada: 524286 duration 78.0045ms
natiijada maxEvenConjunction: 524286 duration 109.0062ms
maxEvenConjunction2 natiijada: 524286 duration 80.0046ms
heerka ugu sarreeya: 1048576
maxEvenDividing natiijada: 1048574 duration 109.0063ms
maxEvenDividing2 natiijada: 1048574 duration 80.0045ms
natiijada maxEvenConjunction: 1048574 duration 114.0066ms
maxEvenConjunction2 natiijada: 1048574 duration 78.0044ms
heerka ugu sarreeya: 2097152
maxEvenDividing natiijada: 2097150 duration 111.0064ms
maxEvenDividing2 natiijada: 2097150 duration 79.0045ms
natiijada maxEvenConjunction: 2097150 duration 112.0064ms
maxEvenConjunction2 natiijada: 2097150 duration 77.0044ms
heerka ugu sarreeya: 4194304
maxEvenDividing natiijada: 4194302 duration 111.0063ms
maxEvenDividing2 natiijada: 4194302 duration 78.0045ms
natiijada maxEvenConjunction: 4194302 duration 111.0063ms
maxEvenConjunction2 natiijada: 4194302 duration 77.0044ms
heerka ugu sarreeya: 8388608
maxEvenDividing natiijada: 8388606 duration 109.0062ms
maxEvenDividing2 natiijada: 8388606 duration 78.0045ms
natiijada maxEvenConjunction: 8388606 duration 114.0065ms
maxEvenConjunction2 natiijada: 8388606 duration 78.0045ms
heerka ugu sarreeya: 16777216
maxEvenDividing natiijada: 16777214 duration 109.0062ms
maxEvenDividing2 natiijada: 16777214 duration 77.0044ms
natiijada maxEvenConjunction: 16777214 duration 109.0063ms
maxEvenConjunction2 natiijada: 16777214 duration 77.0044ms
heerka ugu sarreeya: 33554432
maxEvenDividing natiijada: 33554430 duration 113.0065ms
maxEvenDividing2 natiijada: 33554430 duration 78.0045ms
natiijada maxEvenConjunction: 33554430 duration 110.0063ms
maxEvenConjunction2 natiijada: 33554430 duration 80.0045ms
heerka ugu sarreeya: 67108864
maxEvenDividing natiijada: 67108860 duration 112.0064ms
maxEvenDividing2 natiijada: 67108860 duration 77.0044ms
natiijada maxEvenConjunction: 67108860 duration 112.0064ms
maxEvenConjunction2 natiijada: 67108860 duration 80.0046ms
heerka ugu sarreeya: 134217728
maxEvenDividing natiijada: 134217726 duration 109.0063ms
maxEvenDividing2 natiijada: 134217726 duration 78.0044ms
natiijada maxEvenConjunction: 134217726 duration 114.0065ms
maxEvenConjunction2 natiijada: 134217726 duration 81.0047ms
heerka ugu sarreeya: 268435456
maxEvenDividing natiijada: 268435446 duration 111.0064ms
maxEvenDividing2 natiijada: 268435446 duration 79.0045ms
natiijada maxEvenConjunction: 268435446 duration 114.0065ms
maxEvenConjunction2 natiijada: 268435446 duration 79.0045ms
heerka ugu sarreeya: 536870912
maxEvenDividing natiijada: 536870910 duration 107.0062ms
maxEvenDividing2 natiijada: 536870910 duration 76.0043ms
natiijada maxEvenConjunction: 536870910 duration 109.0062ms
maxEvenConjunction2 natiijada: 536870910 duration 80.0046ms
Ma heli karin sharraxaad cad sababta isku-duwaha Go uusan u wanaajin koodhka oo had iyo jeer u hubiyo xaaladda labaad, xitaa haddii kan hore uu been yahay. Mise waxaa laga yaabaa in indhaheygu ay qallafsan yihiin oo aanan arkin qalad muuqda? Mise waxaad u baahan tahay inaad siiso hagitaan gaar ah iskuduweyaha? Waan ku farxi lahaa faallooyinka macquulka ah.
PS: Haa, kaliya madadaalo, waxaan ku orday imtixaano la mid ah Java 5 iyo Java 7/8 - wax walba waa cad yihiin, waqtiga fulinta waa isku mid.
Source: www.habr.com