Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9703

言語別Stack処理速度比較

$
0
0

1. はじめに

Go言語にはStackが実装されていませんが、

Stackの処理自体は、どの言語でも、
配列や線形リストを使って自作で実装することができます。

Go言語向けに自作で作ったついでに、
Stackが実装されている他言語との処理速度(処理時間)を比較してみました。

実験で使用した言語は、

  • C#(.NET Core3.0)
  • go1.14.4
  • java 13.0.2
  • Python 3.8.3

の4言語です。

各言語のソースは、githubでも公開しています。
https://github.com/NobuyukiInoue/StackSpeedTest

2. 言語別のメソッド比較

Stackといっても、言語によって、各種操作がメソッドで提供されていたり、プロパティでチェックしなければならないなど、細かな処理の実装内容が異なります。

今回の実験で行った処理を比較すると、以下のようになります。

処理内容C#(.NET Core3.x)Java 8Python3.8.3
Stackへの書き込みPushメソッドpushメソッドappend関数
Stackからの取り出しPopメソッドpopメソッドpop関数
値の検索Containsメソッド
(戻り値は値の存在の有無(bool型))
searchメソッド
(戻り値はindex番号)
index関数
Stackが空かどうか調べるCountプロパティを利用emptyメソッドlen関数を利用

3. 検証環境と実験結果(2020/07/11追記)

項目
OSMS-Windows 10
CPUIntel Core-i7 8559u
メモリ16GB(LPDDR3/2133MHz)

メモリ容量を追記しました。(2020/07/11)

処理の内容は、

  • 0~1億までの数値のpush()
  • 最も深い位置にある値0の検索
  • 1億~0までのPop()

です。
各言語での処理時間は以下の通りです。

C# NET Core 3.0.100

Stackクラスを使用
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.stack-1?view=netcore-3.1

timesExecution time
1st977 [ms]
2nd1003 [ms]
3rd1004 [ms]

go1.14.4 windows/amd64(配列版)

timesExecution time
1st2089 [ms]
2nd1853 [ms]
3rd1737 [ms]

go1.14.4 windows/amd64(線形リスト版)

timesExecution time
1st5617 [ms]
2nd5400 [ms]
3rd5569 [ms]

java 13.0.2 2020-01-14

クラスStackを使用
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Stack.html

timesExecution time
1st6743 [ms]
2nd6741 [ms]
3rd6733 [ms]

Python 3.8.3

timesExecution time
1st16957 [ms]
2nd16561 [ms]
3rd17558 [ms]

関連(2020/07/11追記)

LeetCodeのProblemの中にも、Stackを自分で実装する問題があります。
いろんな言語での回答例が投稿されているので、処理時間を比較するのも面白いと思います。


Viewing all articles
Browse latest Browse all 9703

Trending Articles