แ แแแแ แคแแฅแ แแแ, แแแ แงแฃแแแก แจแแแแแ แขแแกแขแแ แแแแก แแแ แแแแแแก แแก แแ แ แแแ แแแแขแ แแฅแแแแแแแแขแฃแ แแ แจแแกแ แฃแแแแแก แแแแแกแแแ แแกแแ?
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-แแแ แแแจแแแแฃแแ แแแแแแแชแแแก แแแแ แแแแแแแแฃแแ แแแฎแกแแแ แแแ แกแแจแฃแแแแ แแ แแก. แแแแฎแแแแแแ 813 แแ - แแก แแกแแแ แแแแแแแแก แแฎแแแแก แจแแแแแแก แกแแแแแแแแแ, แแฅแแแ แฃแแแ แจแแแแแฎแแ แขแแกแขแแก แจแแแแฎแแแแแแ แแแกแแแ แแ แแแฃแจแแแ แงแแแแ แขแแกแขแ แแแแแแฃแแ แแฆแฃแ แแแแกแแแแก แแ แแแแแแแแกแแแ แแแแแแ แแแฃแแแ.
แแฎแแ แแ, แแแแแ แแคแแฅแ แแ, แ แแแแ แแแแแแฎแแ แชแแแแ แแก แงแแแแแคแแ แ แแแแแแแแฃแ แ แฎแแ แฏแแแแ, แแแขแแแแขแฃแ แแ แแแกแฌแแ แแ แแแแแแแ แแแแแก แจแแแแฌแแแแแก
if value > current && value&1 == 0 {
current = value
}
on
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
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 128
maxEvenDividing แจแแแแแ: 126 แฎแแแแ แซแแแแแแ 116.0066ms
maxEvenDividing2 แจแแแแแ: 126 แฎแแแแ แซแแแแแแ 79.0045 ms
maxEvenConjunction แจแแแแแ: 126 แฎแแแแ แซแแแแแแ 114.0065 ms
maxEvenConjunction2 แจแแแแแ: 126 แฎแแแแ แซแแแแแแ 83.0048 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 256
maxEvenDividing แจแแแแแ: 254 แฎแแแแ แซแแแแแแ 111.0063ms
maxEvenDividing2 แจแแแแแ: 254 แฎแแแแ แซแแแแแแ 77.0044 ms
maxEvenConjunction แจแแแแแ: 254 แฎแแแแ แซแแแแแแ 110.0063 ms
maxEvenConjunction2 แจแแแแแ: 254 แฎแแแแ แซแแแแแแ 80.0046 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 512
maxEvenDividing แจแแแแแ: 510 แฎแแแแ แซแแแแแแ 114.0066ms
maxEvenDividing2 แจแแแแแ: 510 แฎแแแแ แซแแแแแแ 80.0045 ms
maxEvenConjunction แจแแแแแ: 510 แฎแแแแ แซแแแแแแ 110.0063 ms
maxEvenConjunction2 แจแแแแแ: 510 แฎแแแแ แซแแแแแแ 80.0046 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 1024
maxEvenDividing แจแแแแแ: 1022 แฎแแแแ แซแแแแแแ 109.0063ms
maxEvenDividing2 แจแแแแแ: 1022 แฎแแแแ แซแแแแแแ 77.0044 ms
maxEvenConjunction แจแแแแแ: 1022 แฎแแแแ แซแแแแแแ 111.0063 ms
maxEvenConjunction2 แจแแแแแ: 1022 แฎแแแแ แซแแแแแแ 81.0047 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 2048
maxEvenDividing แจแแแแแ: 2046 แฎแแแแ แซแแแแแแ 114.0065ms
maxEvenDividing2 แจแแแแแ: 2046 แฎแแแแ แซแแแแแแ 79.0045 ms
maxEvenConjunction แจแแแแแ: 2046 แฎแแแแ แซแแแแแแ 113.0065 ms
maxEvenConjunction2 แจแแแแแ: 2046 แฎแแแแ แซแแแแแแ 81.0046 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 4096
maxEvenDividing แจแแแแแ: 4094 แฎแแแแ แซแแแแแแ 114.0065ms
maxEvenDividing2 แจแแแแแ: 4094 แฎแแแแ แซแแแแแแ 80.0046 ms
maxEvenConjunction แจแแแแแ: 4094 แฎแแแแ แซแแแแแแ 111.0063 ms
maxEvenConjunction2 แจแแแแแ: 4094 แฎแแแแ แซแแแแแแ 78.0045 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 8192
maxEvenDividing แจแแแแแ: 8190 แฎแแแแ แซแแแแแแ 107.0062ms
maxEvenDividing2 แจแแแแแ: 8190 แฎแแแแ แซแแแแแแ 77.0044 ms
maxEvenConjunction แจแแแแแ: 8190 แฎแแแแ แซแแแแแแ 111.0063 ms
maxEvenConjunction2 แจแแแแแ: 8190 แฎแแแแ แซแแแแแแ 77.0044 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 16384
maxEvenDividing แจแแแแแ: 16382 แฎแแแแ แซแแแแแแ 109.0063ms
maxEvenDividing2 แจแแแแแ: 16382 แฎแแแแ แซแแแแแแ 77.0044 ms
maxEvenConjunction แจแแแแแ: 16382 แฎแแแแ แซแแแแแแ 108.0062 ms
maxEvenConjunction2 แจแแแแแ: 16382 แฎแแแแ แซแแแแแแ 77.0044 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 32768
maxEvenDividing แจแแแแแ: 32766 แฎแแแแ แซแแแแแแ 112.0064ms
maxEvenDividing2 แจแแแแแ: 32766 แฎแแแแ แซแแแแแแ 77.0044 ms
maxEvenConjunction แจแแแแแ: 32766 แฎแแแแ แซแแแแแแ 109.0062 ms
maxEvenConjunction2 แจแแแแแ: 32766 แฎแแแแ แซแแแแแแ 78.0045 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 65536
maxEvenDividing แจแแแแแ: 65534 แฎแแแแ แซแแแแแแ 109.0062ms
maxEvenDividing2 แจแแแแแ: 65534 แฎแแแแ แซแแแแแแ 75.0043 ms
maxEvenConjunction แจแแแแแ: 65534 แฎแแแแ แซแแแแแแ 109.0063 ms
maxEvenConjunction2 แจแแแแแ: 65534 แฎแแแแ แซแแแแแแ 79.0045 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 131072
maxEvenDividing แจแแแแแ: 131070 แฎแแแแ แซแแแแแแ 108.0061ms
maxEvenDividing2 แจแแแแแ: 131070 แฎแแแแ แซแแแแแแ 76.0044 ms
maxEvenConjunction แจแแแแแ: 131070 แฎแแแแ แซแแแแแแ 110.0063 ms
maxEvenConjunction2 แจแแแแแ: 131070 แฎแแแแ แซแแแแแแ 80.0046 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 262144
maxEvenDividing แจแแแแแ: 262142 แฎแแแแ แซแแแแแแ 110.0063ms
maxEvenDividing2 แจแแแแแ: 262142 แฎแแแแ แซแแแแแแ 76.0044 ms
maxEvenConjunction แจแแแแแ: 262142 แฎแแแแ แซแแแแแแ 107.0061 ms
maxEvenConjunction2 แจแแแแแ: 262142 แฎแแแแ แซแแแแแแ 78.0044 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 524288
maxEvenDividing แจแแแแแ: 524286 แฎแแแแ แซแแแแแแ 109.0062ms
maxEvenDividing2 แจแแแแแ: 524286 แฎแแแแ แซแแแแแแ 78.0045 ms
maxEvenConjunction แจแแแแแ: 524286 แฎแแแแ แซแแแแแแ 109.0062 ms
maxEvenConjunction2 แจแแแแแ: 524286 แฎแแแแ แซแแแแแแ 80.0046 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 1048576
maxEvenDividing แจแแแแแ: 1048574 แฎแแแแ แซแแแแแแ 109.0063ms
maxEvenDividing2 แจแแแแแ: 1048574 แฎแแแแ แซแแแแแแ 80.0045 ms
maxEvenConjunction แจแแแแแ: 1048574 แฎแแแแ แซแแแแแแ 114.0066 ms
maxEvenConjunction2 แจแแแแแ: 1048574 แฎแแแแ แซแแแแแแ 78.0044 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 2097152
maxEvenDividing แจแแแแแ: 2097150 แฎแแแแ แซแแแแแแ 111.0064ms
maxEvenDividing2 แจแแแแแ: 2097150 แฎแแแแ แซแแแแแแ 79.0045 ms
maxEvenConjunction แจแแแแแ: 2097150 แฎแแแแ แซแแแแแแ 112.0064 ms
maxEvenConjunction2 แจแแแแแ: 2097150 แฎแแแแ แซแแแแแแ 77.0044 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 4194304
maxEvenDividing แจแแแแแ: 4194302 แฎแแแแ แซแแแแแแ 111.0063ms
maxEvenDividing2 แจแแแแแ: 4194302 แฎแแแแ แซแแแแแแ 78.0045 ms
maxEvenConjunction แจแแแแแ: 4194302 แฎแแแแ แซแแแแแแ 111.0063 ms
maxEvenConjunction2 แจแแแแแ: 4194302 แฎแแแแ แซแแแแแแ 77.0044 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 8388608
maxEvenDividing แจแแแแแ: 8388606 แฎแแแแ แซแแแแแแ 109.0062ms
maxEvenDividing2 แจแแแแแ: 8388606 แฎแแแแ แซแแแแแแ 78.0045 ms
maxEvenConjunction แจแแแแแ: 8388606 แฎแแแแ แซแแแแแแ 114.0065 ms
maxEvenConjunction2 แจแแแแแ: 8388606 แฎแแแแ แซแแแแแแ 78.0045 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 16777216
maxEvenDividing แจแแแแแ: 16777214 แฎแแแแ แซแแแแแแ 109.0062ms
maxEvenDividing2 แจแแแแแ: 16777214 แฎแแแแ แซแแแแแแ 77.0044 ms
maxEvenConjunction แจแแแแแ: 16777214 แฎแแแแ แซแแแแแแ 109.0063 ms
maxEvenConjunction2 แจแแแแแ: 16777214 แฎแแแแ แซแแแแแแ 77.0044 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 33554432
maxEvenDividing แจแแแแแ: 33554430 แฎแแแแ แซแแแแแแ 113.0065ms
maxEvenDividing2 แจแแแแแ: 33554430 แฎแแแแ แซแแแแแแ 78.0045 ms
maxEvenConjunction แจแแแแแ: 33554430 แฎแแแแ แซแแแแแแ 110.0063 ms
maxEvenConjunction2 แจแแแแแ: 33554430 แฎแแแแ แซแแแแแแ 80.0045 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 67108864
maxEvenDividing แจแแแแแ: 67108860 แฎแแแแ แซแแแแแแ 112.0064ms
maxEvenDividing2 แจแแแแแ: 67108860 แฎแแแแ แซแแแแแแ 77.0044 ms
maxEvenConjunction แจแแแแแ: 67108860 แฎแแแแ แซแแแแแแ 112.0064 ms
maxEvenConjunction2 แจแแแแแ: 67108860 แฎแแแแ แซแแแแแแ 80.0046 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 134217728
maxEvenDividing แจแแแแแ: 134217726 แฎแแแแ แซแแแแแแ 109.0063ms
maxEvenDividing2 แจแแแแแ: 134217726 แฎแแแแ แซแแแแแแ 78.0044 ms
maxEvenConjunction แจแแแแแ: 134217726 แฎแแแแ แซแแแแแแ 114.0065 ms
maxEvenConjunction2 แจแแแแแ: 134217726 แฎแแแแ แซแแแแแแ 81.0047 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 268435456
maxEvenDividing แจแแแแแ: 268435446 แฎแแแแ แซแแแแแแ 111.0064ms
maxEvenDividing2 แจแแแแแ: 268435446 แฎแแแแ แซแแแแแแ 79.0045 ms
maxEvenConjunction แจแแแแแ: 268435446 แฎแแแแ แซแแแแแแ 114.0065 ms
maxEvenConjunction2 แจแแแแแ: 268435446 แฎแแแแ แซแแแแแแ 79.0045 ms
แแแฅแกแแแแแฃแ แ แแแ แแแ แ: 536870912
maxEvenDividing แจแแแแแ: 536870910 แฎแแแแ แซแแแแแแ 107.0062ms
maxEvenDividing2 แจแแแแแ: 536870910 แฎแแแแ แซแแแแแแ 76.0043 ms
maxEvenConjunction แจแแแแแ: 536870910 แฎแแแแ แซแแแแแแ 109.0062 ms
maxEvenConjunction2 แจแแแแแ: 536870910 แฎแแแแ แซแแแแแแ 80.0046 ms
แแ แแแ แแแแแแ แแแแคแแ แแฎแกแแ, แแฃ แ แแขแแ แแ แแฎแแแแก Go แจแแแแแแแแแ แแแแก แแแขแแแแแแชแแแก แแ แงแแแแแแแแก แแแแฌแแแแก แแแแ แ แแแ แแแแก, แแฃแแแแช แแแ แแแแ แงแแแแ แแงแแก. แแ แแฅแแแ แแแแแแแ แฃแแ แแแแ แแฃแแแแแแแแ แแ แแจแแแ แ แจแแชแแแแแก แแแ แแฎแแแแ? แแ แแญแแ แแแแแ แ แแแแ แกแแแชแแแแฃแ แ แแแกแขแ แฃแฅแชแแแแแก แแแฌแแแแแ แจแแแแแแแแแก? แแแฎแแ แฃแแ แแแฅแแแแ แแแแแแ แฃแแ แแแแแแขแแ แแแแกแแแแก.
PS: แแแแฎ, แฃแแ แแแแ แแแกแแ แแแแแ, แฉแแแแขแแ แ แแกแแแแกแ แขแแกแขแแแ Java 5-แแ แแ Java 7/8-แแ - แงแแแแแคแแ แ แแแกแแแแแแ, แจแแกแ แฃแแแแแก แแ แ แแแแแแ.
แฌแงแแ แ: www.habr.com