はじめMath! Javaでコンピュータ数学

第31回 集合の数学 集合と要素[中編]

この記事を読むのに必要な時間:およそ 2 分

要素の数

式31.6は,集合Aに含まれる要素の数を定義しています。その集合がどんな集合かによって要素の数え方はまちまちです。図31.2のような場合なら,指先で一つ一つ数え上げればよいでしょう。⁠100より小さな自然数の偶数の集合」ならば数え上げる式を考えることが出来るでしょう。⁠100より小さな素数※3の集合」ならば?集合の要素の数というのは,単純なことなのですが,実はなかなか一筋縄ではいかないことが多いものなのです。

プログラマにとって,要素の数の身近な例は配列の長さでしょう。Java言語でも,配列に含まれる変数やその値のことを「配列の要素」と言います。

配列を使う場合に心得ておくべきことがあります。それは,宣言した配列の長さの数値と,配列の末尾の要素の番号※4が異なることです。先頭の要素の番号が0から始まるためで,末尾の要素の番号は配列の長さの数値より一つ小さいのです。このことが,プログラミング初心者の方にとっては,いいえ,初心者でなくなってからも,一つの大きなバグの原因になります。

配列は一度にたくさんの変数を定義できる便利な機能です。しかし,コンピュータは有限の記憶領域しか確保できません。あまりに大きな配列を定義すると,動作が遅くなったり,最悪の場合はプログラムがメモリエラーを起こして終了してしまいます。

※3)
素数(そすう)とは,1とその数自身以外に正の約数を持たない(つまり1とその数以外のどんな自然数によっても割り切れない)⁠1より大きな自然数をいう(WikiPediaより)⁠
※4)
プログラミング言語一般では,配列の要素番号を「添字(そえじ)⁠と呼びます。本文中ではこのパラグラフ後,配列の要素の番号のことを添字と書きます。文章が短くスッキリするからです。

今回はここまで

プログラマにとって,意識していなくても必ず使っているのが集合の数学です。将来,複雑なデータの集合を間違いなく処理する必要が生じたら,集合の数学の知識は必ず助けになります。次回の演習に取り組んでしっかり身に付けてください。

今回のまとめ

  • 集合の要素,補集合,要素の数について学びました。
  • 配列やArrayListの先頭要素の添字は0,n番目の要素の添字は(n-1)です。

コラム 集合と配列の添字

集合を表現するために,Java言語では配列やArrayListを用います。このとき,任意の要素を特定するために,添字という「要素に固有の番号」を用います。しかし,数学では集合を書き表す際,各要素に番号などつけません。

私たち人間は,書かれている式を目で見れば,左から最初の要素,次の要素,3番目の要素,・・・と要素を特定出来ますから,添字という特別なものを加えなくても済むのです。しかし,コンピュータはそう行きません。コンピュータに何かを記憶させるためには,メモリに値をセットしなければなりません。そのメモリには番号(アドレス)がついており,その番号を指定しないことには,値を読み書き出来ません。言わば,配列の添字というのは,コンピュータにひとまとまりのデータを保管させ,私たちがそれにアクセスするために「仕方なく」付けられたものなのです。例えば,順番など関係のない集合だってあります。本当は添字なんて必要ないのです。ある値がその集合の要素かどうか知りたいとき,私たちは式31.7を見て,すぐに真偽を答えることが出来るからです。

もちろん,必要とあらば,次の式のように添字を用いて集合の要素を表現することだって可能です。

数学には様々な数式表現方法が用意されており,知っていれば便利に使えます。しかし,あまりルールにこだわりすぎて,それらにしばられてしまっては面白くありません。ご自分の目的の済む範囲なら,ぜひとも自由に表現してみてください。あなたが解こうとしている問題を,あなたにとってわかりやすく表現する方法があるのならば,⁠正式にはどんな表現方法なのか」などと気にせずに,どんどん書き表してください。

「正式」の方法に,いつかあなたが出会ったとき,もしかしたらそちらの方が効率よく,美しいと感じるかもしれません。長い年月に耐えてきた記法ですから,それなりによいところがあるのです。しかし,自分で問題を解決したり,表記法を編み出したりする経験の方がプログラマを目指している皆さんにとってはよい経験になると思います。図太く,大胆でありましょう。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。2010年のLotYはRuby。結城浩氏のような仕事をしたいと妄想する30代後半♂。