Golang, Python, Php运算效率对比

问题:

找出所有的a,b.c组合, 使得 a + b + c = 1000, a*a + b*b = c*c. 其中a,b,c均为3个自然数.

分别以go1.17.7, Python 3.9.0, PHP 7.4.3解答该问题。
每个解答中 tt1()为三遍循环, tt2() 为优化后的解法

可以看到go执行耗时

tt1() 用时 731496100 ns = 0.7314961 s
tt2() 用时 548000 ns = 0.000548 s

可以看到python执行耗时

tt1() 用时: 74647421900 ns = 74.6474219 秒
tt2() 用时: 291977200 ns = 0.2919772 秒

可以看到php执行耗时

tt1() 执行时间: 37557302300 ns = 37.5573023 秒
tt2() 执行时间: 28231300 ns = 0.0282313 秒

对比可以发现go在大的运算方面性能特别高
php的执行性能也比python的高
以上执行时间, 每次执行可能略有差异, 但不妨碍性能测试指标和结果

以下是go的解法, 其中tt1()为三遍循环, tt2() 为优化后的解法

package main

import (
	"fmt"
	"time"
)

// a + b + c = 1000,  a*a + b*b = c*c
// tt1()  用时 731496100 ns = 0.7314961 s
// tt2() 用时 548000 ns = 0.000548 s

//func tt1() {
//	for a := 0; a < 1001; a++ {
//		for b := 0; b < 1001; b++ {
//			for c := 0; c < 1001; c++ {
//				if a+b+c == 1000 && a*a+b*b == c*c {
//					fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
//				}
//			}
//		}
//	}
//}

func tt2() {
	for a := 0; a < 1001; a++ {
		for b := 0; b < 1001-a; b++ {
			c := 1000 - a - b
			if a*a+b*b == c*c {
				fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)
			}
		}
	}
}

func main() {
	start := time.Now().UnixNano()
	tt2()
	end := time.Now().UnixNano()
	fmt.Println("用时: ", end-start)
}

以下是python的解法, 其中tt1()为三遍循环, tt2() 为优化后的解法

import time

# python3.9

# tt1() 用时:  74647421900 ns = 74.6474219 秒
# tt2() 用时:  291977200 ns = 0.2919772 秒

# def tt1():
#     for a in range(1001):
#         for b in range(1001):
#             for c in range(1001):
#                 if a + b + c == 1000 and a ** 2 + b ** 2 == c ** 2:
#                     print("a=%d,b=%d,c=%d" % (a, b, c))


def tt2():
    for a in range(1001):
        for b in range(1001 - a):
            c = 1000 - a - b
            if a ** 2 + b ** 2 == c ** 2:
                print("a=%d,b=%d,c=%d" % (a, b, c))


if __name__ == '__main__':
    start = time.time_ns()
    tt2()
    end = time.time_ns()
    print('用时: ', end - start)

以下是php的解法, 其中tt1()为三遍循环, tt2() 为优化后的解法

<?php
// php7.3
// tt1() 执行时间: 37557302300 ns = 37.5573023 秒
// tt2() 执行时间: 28231300 ns = 0.0282313 秒

//function tt1()
//{
//    for ($i = 0; $i < 1001; $i++) {
//        for ($j = 0; $j < 1001; $j++) {
//            for ($k = 0; $k < 1001; $k++) {
//                if ($i + $j + $k == 1000 && $i * $i + $j * $j == $k * $k) {
//                    echo 'i=' . $i . ',j=' . $j . ', k=' . $k . PHP_EOL;
//                }
//            }
//        }
//    }
//}

function tt2()
{
    for ($i = 0; $i < 1001; $i++) {
        for ($j = 0; $j < 1001 - $i; $j++) {
            $k = 1000 - $i - $j;
            if ($i * $i + $j * $j == $k * $k) {
                echo 'i=' . $i . ',j=' . $j . ', k=' . $k . PHP_EOL;
            }

        }
    }
}

$start = hrtime(true);
tt2();
$end = hrtime(true);
echo '执行时间: ' . ($end - $start);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值