แแพโแขแแแโแแทแโแแถโแแแแแพแโแแถแแโแแธแโแแแโแแแแแถแแโแแแแแแแแโแแโแแถแโแแถแแแแแโแแ โแแแแปแโแแแแแแโแแฝแโแแบโแแแแผแโแแแแปแโแแถแโแขแแปแแแแ?
if a > b && c*2 > d {
....
}
// ะธ
if a <= b {
continue;
}
if c*2 > d {
....
}
แแถแแถแแแขแแแแถแแ
แถแแแแแแพแแแถแแฝแแแนแ "แแถแแกแพแแแแแ
แแฝแแแแแถแ" แแแแปแแแแแผแแแแแแแงแแถแ แแแแแแแถแแแแแแแแแแแแแขแแแแแพแแแแแแถแแแ
แแแฝแแแผแแแแแแปแแแ
แแแแปแแขแถแแแแแ
แแแฝแแแแ [-x....x]แ แแแแปแแแแแแแแถแแพแแแแพแแแถแแแแขแแถแแแแแแแปแแแแถแแแแแแทแแแพแแแแปแแแแแพแแถแแแปแแกแผแแธแแแแแ 1 แแพแแแแธแแแแพแแแถแแพแ
แแแฝแแแฝแแแบแแผแฌแขแแแ
//ั ัะตัะฝัั
ัะธัะตะป ะฟะพัะปะตะดะฝะธะน ะฑะธั ะฒัะตะณะดะฐ ัะฐะฒะตะฝ 0
value & 1 == 0
//vs ะบะปะฐััะธัะตัะบะธะน ะผะตัะพะด
value % 2 == 0
แแแแทแแแแแแแแแแแแแแแแทแแธแแแแแแแแปแแแ แแแแปแ Go แแบแแทแแแผแแแแผแแถแแแ แแแแถแแแแแแถแแแฝแแแแแถแแแแแแแแแปแแแแแ แแแแปแแแถแแแแแพแแถ แแแแแธแแถแแนแแแถแแ แแแปแแแแแแแแแถแแแแแแแแแแแแแพแแแแถแแแแปแแแแแถแ (แแแแ แแแแถแแพแแแแแแแแแแแแแแฝแแแถแแแแแแนแแแแแถแแแแ http แแแแแถแแแแแปแแแแแแ) แแผแ แแแแแแแแปแ แแถแแ แถแแแแแแพแแแถแแฝแแแถแ แแพแ GoLand แ แพแแแแแแแแถแแแแแพแแแแแแแถแแแแ
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
}
แแพแแแแฝแแแถแแแแแแแแแแแแแแ แถแแแถแแแแแทแแแถแแแแแแแแแ แแถแแแแแแแแแฝแแแแแถแแขแแปแแแแแแถแแแแแแแ แกแพแแ
แแแแแแแแmax 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
แแถแ
แแแถแแแแถแแแแถแแแแปแแแแแธแแแแแแแแถแแแแแแแทแแแปแแแแแถ แแพแแแถแแแแแปแแแทแแแแแแแแถแแแแแแแปแแแแแแถ แแถแแแแแปแแแฝแแแแแถแ (แแ
แแพแแปแแแแแผแแแแแฝแแแ i5-2540M แแแแแแแแปแ) แแแแแแแแฝแแแแแ แแ 20..30% แขแแแแ
แแ
แถแแแแแแถแแแแถแแแแแแแแแแแทแแธแแแแแแแพแแแถแแแธ GoLand แแบแแถแแแแแ แแแแ แแ 813MB - แแแแแแแแแแถแแแแแแแถแแแฟแแถแแแแแแแแแแแแแ แขแแแแแแแผแแแแแแถแแปแแแแแธแแถแแแแแแแ
แแพแแถแ แ แพแแแแแพแแแถแแแถแแแแแพแแแแแแแถแแแขแแแแแแแถแแแแแแแทแแแธแแฝแแแแแแปแแแถแแฏแแแแธแแแแถแแ
แแทแแแ
แแแ
แ แพแแฅแกแผแแแแ แแแแแทแแขแแแธแแแแแขแแปแแแแแแถแแแขแแแแแแแถแแฝแแแนแแแถแแ แแแถแแแทแ แแฝแ แแแแปแแแแแแแแผแแแถแแแแแฝแแแทแแทแแแแแแแแแแแแแแแแแแแแแแแแแแแท
if value > current && value&1 == 0 {
current = value
}
แแ แแพ
if value <= current {
continue;
}
if value&1 == 0 {
current = value
}
แแแแปแแแแแพแแแถแแแแแแแแแแแแแ... แ แพแแแแแปแแแแแแแแขแแแธแแถแแแขแแ :)
แแแแแแแถแแแแแถแแ แแแถแแแพแแถแแแแแแทแแแแแทแ แถแแแแแแพแแแทแแแปแแแแแถแแแแแแแแแแถแแแ/แแแแแถแแแแแถแแแ แแแปแแแแแแแ 10..15% แแแแปแแแแแแแแแถแแแถแแแแแแ แแแฝแ 2 แแแแแแถแแแถแแแแ แแแ
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
}
แแแแปแโแแแโแแถโแ แพแโแแแฝแโแแถแโแแผแแแถแโแแแแแแแแแแแถแแขแถแแแแแแผแ: 100000000
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 126 แแแแแแ 116.0066ms
maxEvenDividing2 แแแแแแแ 126 แแแแแแ 79.0045ms
แแแแแแ maxEvenConjunction: 126 แแแแแแ 114.0065ms
แแแแแแ maxEvenConjunction2: 126 แแแแแแ 83.0048ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 254 แแแแแแ 111.0063ms
maxEvenDividing2 แแแแแแแ 254 แแแแแแ 77.0044ms
แแแแแแ maxEvenConjunction: 254 แแแแแแ 110.0063ms
แแแแแแ maxEvenConjunction2: 254 แแแแแแ 80.0046ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 510 แแแแแแ 114.0066ms
maxEvenDividing2 แแแแแแแ 510 แแแแแแ 80.0045ms
แแแแแแ maxEvenConjunction: 510 แแแแแแ 110.0063ms
แแแแแแ maxEvenConjunction2: 510 แแแแแแ 80.0046ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 1022 แแแแแแ 109.0063ms
maxEvenDividing2 แแแแแแแ 1022 แแแแแแ 77.0044ms
แแแแแแ maxEvenConjunction: 1022 แแแแแแ 111.0063ms
แแแแแแ maxEvenConjunction2: 1022 แแแแแแ 81.0047ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 2046 แแแแแแ 114.0065ms
maxEvenDividing2 แแแแแแแ 2046 แแแแแแ 79.0045ms
แแแแแแ maxEvenConjunction: 2046 แแแแแแ 113.0065ms
แแแแแแ maxEvenConjunction2: 2046 แแแแแแ 81.0046ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 4094 แแแแแแ 114.0065ms
maxEvenDividing2 แแแแแแแ 4094 แแแแแแ 80.0046ms
แแแแแแ maxEvenConjunction: 4094 แแแแแแ 111.0063ms
แแแแแแ maxEvenConjunction2: 4094 แแแแแแ 78.0045ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 8190 แแแแแแ 107.0062ms
maxEvenDividing2 แแแแแแแ 8190 แแแแแแ 77.0044ms
แแแแแแ maxEvenConjunction: 8190 แแแแแแ 111.0063ms
แแแแแแ maxEvenConjunction2: 8190 แแแแแแ 77.0044ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 16382 แแแแแแ 109.0063ms
maxEvenDividing2 แแแแแแแ 16382 แแแแแแ 77.0044ms
แแแแแแ maxEvenConjunction: 16382 แแแแแแ 108.0062ms
แแแแแแ maxEvenConjunction2: 16382 แแแแแแ 77.0044ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 32766 แแแแแแ 112.0064ms
maxEvenDividing2 แแแแแแแ 32766 แแแแแแ 77.0044ms
แแแแแแ maxEvenConjunction: 32766 แแแแแแ 109.0062ms
แแแแแแ maxEvenConjunction2: 32766 แแแแแแ 78.0045ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 65534 แแแแแแ 109.0062ms
maxEvenDividing2 แแแแแแแ 65534 แแแแแแ 75.0043ms
แแแแแแ maxEvenConjunction: 65534 แแแแแแ 109.0063ms
แแแแแแ maxEvenConjunction2: 65534 แแแแแแ 79.0045ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 131070 แแแแแแ 108.0061ms
maxEvenDividing2 แแแแแแแ 131070 แแแแแแ 76.0044ms
แแแแแแ maxEvenConjunction: 131070 แแแแแแ 110.0063ms
แแแแแแ maxEvenConjunction2: 131070 แแแแแแ 80.0046ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 262142 แแแแแแ 110.0063ms
maxEvenDividing2 แแแแแแแ 262142 แแแแแแ 76.0044ms
แแแแแแ maxEvenConjunction: 262142 แแแแแแ 107.0061ms
แแแแแแ maxEvenConjunction2: 262142 แแแแแแ 78.0044ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 524286 แแแแแแ 109.0062ms
maxEvenDividing2 แแแแแแแ 524286 แแแแแแ 78.0045ms
แแแแแแ maxEvenConjunction: 524286 แแแแแแ 109.0062ms
แแแแแแ maxEvenConjunction2: 524286 แแแแแแ 80.0046ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 1048574 แแแแแแ 109.0063ms
maxEvenDividing2 แแแแแแแ 1048574 แแแแแแ 80.0045ms
แแแแแแ maxEvenConjunction: 1048574 แแแแแแ 114.0066ms
แแแแแแ maxEvenConjunction2: 1048574 แแแแแแ 78.0044ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 2097150 แแแแแแ 111.0064ms
maxEvenDividing2 แแแแแแแ 2097150 แแแแแแ 79.0045ms
แแแแแแ maxEvenConjunction: 2097150 แแแแแแ 112.0064ms
แแแแแแ maxEvenConjunction2: 2097150 แแแแแแ 77.0044ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 4194302 แแแแแแ 111.0063ms
maxEvenDividing2 แแแแแแแ 4194302 แแแแแแ 78.0045ms
แแแแแแ maxEvenConjunction: 4194302 แแแแแแ 111.0063ms
แแแแแแ maxEvenConjunction2: 4194302 แแแแแแ 77.0044ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 8388606 แแแแแแ 109.0062ms
maxEvenDividing2 แแแแแแแ 8388606 แแแแแแ 78.0045ms
แแแแแแ maxEvenConjunction: 8388606 แแแแแแ 114.0065ms
แแแแแแ maxEvenConjunction2: 8388606 แแแแแแ 78.0045ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 16777214 แแแแแแ 109.0062ms
maxEvenDividing2 แแแแแแแ 16777214 แแแแแแ 77.0044ms
แแแแแแ maxEvenConjunction: 16777214 แแแแแแ 109.0063ms
แแแแแแ maxEvenConjunction2: 16777214 แแแแแแ 77.0044ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 33554430 แแแแแแ 113.0065ms
maxEvenDividing2 แแแแแแแ 33554430 แแแแแแ 78.0045ms
แแแแแแ maxEvenConjunction: 33554430 แแแแแแ 110.0063ms
แแแแแแ maxEvenConjunction2: 33554430 แแแแแแ 80.0045ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 67108860 แแแแแแ 112.0064ms
maxEvenDividing2 แแแแแแแ 67108860 แแแแแแ 77.0044ms
แแแแแแ maxEvenConjunction: 67108860 แแแแแแ 112.0064ms
แแแแแแ maxEvenConjunction2: 67108860 แแแแแแ 80.0046ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 134217726 แแแแแแ 109.0063ms
maxEvenDividing2 แแแแแแแ 134217726 แแแแแแ 78.0044ms
แแแแแแ maxEvenConjunction: 134217726 แแแแแแ 114.0065ms
แแแแแแ maxEvenConjunction2: 134217726 แแแแแแ 81.0047ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 268435446 แแแแแแ 111.0064ms
maxEvenDividing2 แแแแแแแ 268435446 แแแแแแ 79.0045ms
แแแแแแ maxEvenConjunction: 268435446 แแแแแแ 114.0065ms
แแแแแแ maxEvenConjunction2: 268435446 แแแแแแ 79.0045ms
แแแแแทแแขแแทแแแแถแ แกแขแจ
แแแแแแ maxEvenDividing: 536870910 แแแแแแ 107.0062ms
maxEvenDividing2 แแแแแแแ 536870910 แแแแแแ 76.0043ms
แแแแแแ maxEvenConjunction: 536870910 แแแแแแ 109.0062ms
แแแแแแ maxEvenConjunction2: 536870910 แแแแแแ 80.0046ms
แแแแปแแแทแแขแถแ แแแแแแแแแถแแแแแแแแ แแแถแแแแถแแแแถแ แแแปแขแแแธแแถแแแถแแแแแแทแแธ Go compiler แแทแแแแแแพแแแแแแทแแแแแถแแแผแ แ แพแแแแแแแแทแแทแแแแแพแแแแแแแแแแแธแแธแ แแพแแแแแธแแถแแธแแฝแแแทแแแทแแแแแแแ แฌแแแแ แแแแถแแแแแแแแแแแแแปแแแแแถแแแแแแแแทแ แ แพแแแแแปแแแทแแแพแแแถแแแแ แปแแ แแแถแแแแถแแแแ? แฌแแพแขแแแแแแแผแแแถแแแแแแแแถแแแแแถแแแทแแแแแฝแแ แแแฝแแแแแขแแแแ แแแแแ? แแแแปแโแแนแโแแธแแแถแโแ แแแแโแแแทโแแแโแแแ แแแปแแแแแ
PS: แแถแ/แ แถแ แแพแแแแธแแถแแแแแแถแแแธแแแถแ แแแแปแแแถแแแแแพแแแถแแแถแแแแแพแแแแแแแแแแแแแแแถแแ แแพ Java 5 แแทแ Java 7/8 - แขแแแธแแแแแแแแถแแแบแ แแแถแแ แแแแแแแถแแแแแทแแแแแทแแบแแผแ แแแแถแ
แแแแแ: www.habr.com