2023/9/16/Dart/計算量を減らす

 

たまたま見つけました。

https://twitter.com/KSJP9/status/1702544230986686777

時間を測定してみた。

void main() {
  final n = 10000000; 
  
  var start1 = DateTime.now();
  var result = sumN1(n);
  var end1 = DateTime.now();
  print('sumN1 duration: ${end1.difference(start1)} : result$result');

  var start2 = DateTime.now();
  result = sumN2(n);
  var end2 = DateTime.now();
  print('sumN2 duration: ${end2.difference(start2)} : result$result');
  
  var start3 = DateTime.now();
  result = sumN3(n);
  var end3 = DateTime.now();
  print('sumN3 duration: ${end3.difference(start3)} : result$result');
}


int sumN1(int n) {
  int sum = 0;
  for(int i = 1;i<=n;i++){
    sum += i;
  }
  return sum;  
}

int sumN2(int n) {
  return (n*(n+1)/2) as int;
}

int sumN3(int n) {
  final numbers = List.generate(n, (index) => index + 1);
  return numbers.reduce((acc, val) => acc + val);
}

結果

sumN1 duration: 0:00:00.016000 : result50000005000000
sumN2 duration: 0:00:00.000000 : result50000005000000
sumN3 duration: 0:00:00.218000 : result50000005000000

やはり予想通りの結果。

こういうの、あるんですよね🧐

最初非同期処理にすべきかと思ってしまいましたが、計算が全部同期処理なのでawaitは要らないんですね、あはは😅


あとこういうツイートがありました。確かに見ちゃいますね笑

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です