C++とpythonの比較(4)

プログラミング

組み合わせ

第四弾のテーマは「組み合わせ」です。

以下は、n個のものからr個を取り出した時の組み合わせの数、という意味の数式です。
高校の数IIでしたっけ?

\({}_{n}C_{r}\)

数式を綺麗に出したかったので、「LaTex1」を使いました。

3個のものから2個取り出すと、その組み合わせの数は以下の数式で計算できます。

\({}_{3}C_{2} = \frac{3\cdot2\cdot1}{2\cdot1} = 3\)

3個のものが\((A,B,C)\)だったとして、組み合わせは以下の3通り。

\( (A,B), (A,C), (B,C) \)

この程度なら、屁でもないですよね!!

これをテーマにしたのは、ループ地獄を体験していただくためです。
早速C++からどうぞ!!

C++
#include <iostream>

using namespace std;
int main()
{
    string s = "ABC"; // 3個から2個取り出す組み合わせを計算

    int n = s.size();

    string a, b;

    for (int i = 0; i < n; i++)
    {
        a = s.substr(i, 1);

        for (int j = i + 1; j < n; j++)
        {
            b = s.substr(j, 1);
            cout << "(" << a << "," << b << ")" << endl;
        }
    }
    return 0;
}
Python
import itertools

lt = ["A", "B", "C"]

for pair in itertools.combinations(lt, 2):
    print(pair)

実行結果

$ ./a.out 
(A,B)
(A,C)
(B,C)
$ python3 combi.py 
('A', 'B')
('A', 'C')
('B', 'C')

講評

C++は露骨にループします。pythonはライブラリが充実していてあっという間ですね。
3個から2個取り出すなら、インパクトは少ないです。

でも、1000も10000も…個数が増えた場合、同じアルゴリズムだと、横に横に広がります。
とても書けないです。

また、取り出す個数がループブロックになっている意地の悪さ。

C++もちゃんと書けるんでしょうけど、今回の例だとメンテナンス性が著しく低いです。
一方、pythonでは3行目と5行目をメンテするだけです。これが、天国と地獄の違いでしょうか。

このテーマは、リベンジしたいです。オレまだ本気出してねーし(古いな多分、は●にゃとか)

ライブラリ

itertools --- 効率的なループ用のイテレータ生成関数群
このモジュールは イテレータ を構築する部品を実装しています。プログラム言語 APL, Haskell, SML からアイデアを得ていますが、 Python に適した形に修正されています。 このモジュールは、高速でメモリ効率に優れ、単独でも...

注釈等

  1. LaTex
    LaTexはHTMLほどお手軽じゃないけど、学術論文などで利用されている文章フォーマット言語です。(すんごい含みのある紹介の仕方!)数式が美しいとか定評があるようです。詳しい理由はよく知らないです。 ↩︎

 私の大学時代、LaTexでレポートを書くことが必須でした。なんでWordじゃダメなの?それが研究室のみんなの口癖でした。gnuplotとか、postscriptとか、vi(vimじゃないただのvi)とか、懐かしいです。研究室はPCの豪華環境禁止みたいな雰囲気で、Windowsも使わせてもらえなかった。というかWindows PCが1台しか無かった。
 このフォーマットに指導教官が拘り強くて、Excel, Wordで作れば良いのに、そのおかげでレポート作成が通常の5倍の時間かかった気がします。勿論、Linux環境でemacsだったかな。
 今時の大学生は、Windowsダメ先生(もうそんな人いないかも)だとしても、Ubuntu & VSCODEなんだろうなぁ~。わざわざ仮想環境入れてLinux使ってたりして、

あー勝手に羨ましい妄想、若干ディスっている感も否めない。

ともあれ、必要に迫られオジサンになった今これを使おうと。。。

感謝しかないですね笑笑

使い方など以下参考にして下さい。

MathJax-LaTeXの導入方法|数式が表示されないときの対処法【WordPress】
ブログを書いていて、数式をきれいに表示したい時はありませんか?WordPressのフリープラグイン「MathJax-LaTeX」を使えば、簡単にきれいな数式が表現できます。この記事では「MathJax-LaTeX」の導入方法と数式が上手く表...
4.1 数式を記述する
4.1 数式を記述する

コメント

タイトルとURLをコピーしました