わかりやすく データ構造 とは
物を片づけるとき、何に入れますか。長い列に並べることもあれば、仕切りのある引き出しに入れることも、枝のように分けてつるしておくこともあります。同じ物でも、どこに入れるかで取り出しやすさが変わります。情報も同じです。情報を入れるのにも形があり、このレッスンではその形を入れ物と呼びます。
同じ情報、違う形
友だち五人の名前があるとしましょう。この名前をどう入れられるでしょうか。一列にずらりと並べることも、ますに区切った表に入れることも、上から下へ枝のように分けてつるしておくこともできます。
入れた中身は同じでも、入れた形はまったく違います。この形を、このレッスンでは入れ物と呼び、コンピューター科学ではデータ構造といいます。
同じ名前を、列、表、枝の順に入れてみましょう。中身はそのままで、形が変わります。
形が変わっても、入っている名前はそのままでした。それでも、形ごとに向いていることが少しずつ違ったはずです。
列は順番がひと目でわかり、表はますをぴたりと指して探しやすく、枝はだれがだれの上にいるかがわかります。では、どの形を選べばよいのでしょうか。
やりたいことに合う入れ物
入れ物は何でもよいわけではありません。まず、やりたいことを思い浮かべます。最初から最後まで順番に見たいなら、列に入れるのがよいでしょう。名前を言えばすぐに見つけたいなら、表のほうが向いています。
だれがだれの下にいるかを調べたいなら、枝がよく合います。会社の組織図やコンピューターのフォルダーのようにです。同じ情報でも、目的によって合う入れ物が変わるのです。
やりたいことを押してみましょう。そのことにいちばん合う入れ物が光って、理由を教えてくれます。
やりたいことを変えて押すたびに、光る入れ物が変わりました。いつでも正解という入れ物があるのではなく、何をしたいかが答えを決めるのです。
順番が大事なら列、すばやく探すのが大事なら表です。ところが、もう一つあります。一つの入れ物が、どんな仕事も同じようにうまくこなせるわけではないということです。
速い仕事も、遅い仕事もある
入れ物を一つ選んだとしましょう。その入れ物でする動作のうち、あるものはとても速く、あるものはかなり遅くなります。
列を思い浮かべてみましょう。先頭から順に見ていくのは速くできます。でも、列のまん中に新しい名前を割りこませるには、その後ろにある名前をすべて一つずつずらさなければならないので遅くなります。入れ物ごとに、得意な仕事と苦手な仕事があるのです。
入れ物を一つ選んでから、動作を押してみましょう。同じ入れ物でも、速い動作と遅い動作に分かれます。
同じ入れ物の中でも、緑で示した速い仕事と、赤で示した遅い仕事に分かれました。だから入れ物を選ぶときは、自分がいちばんよくする仕事は何かをまず見ます。
よくする仕事が速い入れ物が、よい選び方です。名前が十個だけなら差は小さくても、百万個になると、同じ仕事がまばたきのあいだに終わることもあれば、長くかかることもあります。同じデータでも、どう入れるかで速いか遅いかが決まります。
代表的な入れ物をちょっと味見
これからよく出会う入れ物を、名前だけ少し味見してみましょう。列のように順に入れて番号で取り出す入れ物は配列です。名札を付けて組で入れる入れ物は辞書といいます。
片方の端だけで出し入れする入れ物はスタック、列に並んで先に来たものが先に出ていく入れ物はキューです。上から下へ分かれていく枝の形の入れ物はツリーと呼びます。いまは名前と感じだけ覚えておけば十分です。
代表的な入れ物を押して、めくってみましょう。入れ物ごとに、一行の紹介と向いている仕事が出ます。
名前が少しなじみにくくてもかまいません。入れ物にはいろいろな種類があること、それぞれに向いている仕事があること、それだけつかめば十分です。
一つひとつは、このあとのレッスンでくわしく取り上げます。その前に、ここまで学んだことを一言にまとめましょう。
まとめ
一言でまとめるとこうです。情報を入れるのにも形、つまり入れ物があります。同じデータでも、列、表、枝のように入れる形が変わることがあります。
入れ物はやりたいことに合わせて選び、一つの入れ物はある仕事は速く、ある仕事は遅くこなします。だから入れ物をうまく選べば、プログラムは速くなります。同じデータでもどう入れるかが速さを分ける、これがかなめです。
要点を順に押して振り返りましょう。(情報には形がある → 目的に合う入れ物 → 速い仕事・遅い仕事 → 入れ物の味見)
これで、情報にも形があることがわかりました。入れ物を選ぶ目が、少し身についたわけです。
次のレッスンでは、いちばん基本となる入れ物、配列をじっくりのぞきます。ますごとに番号を付けておき、番号を言うだけですぐに取り出せる、その速さの秘密も見ていきます。