×

tomoロゴ tomo

【高校情報】3分でわかる!ハフマン圧縮とは何かわかりやすく解説

 

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。今日はなんだか難しそうな「ハフマン圧縮」について勉強するわよ。

 

ハフマン圧縮とは??

ハフマン圧縮って聞いたことある?

これは、

よく出るデータを短く、あまり出ないデータを長く表現することで、全体のデータ量を減らす圧縮方法

よ。

普通はすべてのデータを同じ長さで表すけど、それだと無駄が多いのよね。

そこでハフマン圧縮では、出現回数(頻度)に応じてビット数を変えるの。

つまり、

にするのね。

 

ハフマン圧縮の具体例

例えば、次の文字列を見てみましょう。

aaaabbc

この文字列の出現回数は、

  1. a:4回
  2. b:2回
  3. c:1回

ここで重要なのは、aが一番多く、cが一番少ないという点よ。

 

ハフマン圧縮では、「ハフマン木」という構造を使って符号を決めるの。

 

ハフマン木の構築手順

  1. 各文字に出現回数を割り当てる
  2. 出現回数の少ないもの同士を結合する
  3. これを繰り返して1つの木にする

 

ここがハフマン圧縮のいちばん大事なところよ。

まず、今回の文字列 aaaabbc の出現回数を整理すると、こうなるわ。

a(4)
b(2)
c(1)

この中で、いちばん出現回数が少ないのは c(1)、次に少ないのは b(2) よね。

ハフマン木では、出現回数の少ないもの同士から先に結合するのがルールなの。

 

だから、最初にこの2つをまとめるわ。

c(1) + b(2) → (3)

これは、c と b をひとつのグループにしたという意味よ。

そして、そのグループの出現回数は、1 + 2 だから 3 になるの。

 

イリエダ
イリエダ
「文字が消えた」わけじゃなくて、「cとbをまとめた箱を作った」と考えると分かりやすいわよ。

 

すると、今度はこうなるわね。

a(4)
(3)

残ったのは、a(4) と、さっき作ったグループ (3) の2つ。

これをさらに結合すると、こうなるの。

(3) + a(4) → (7)

こうして、全部の文字を含んだ1つのまとまりができたわ。

この (7) は、文字列全体の文字数と同じで、木のいちばん上の部分になるのよ。

 

木の形にするとこうなる

        (7)
       /   \
     a(4)  (3)
           /  \
         c(1) b(2)

この図を見ると、a は上のほうにいて、b と c は下のほうにあるわよね。

ハフマン木では、上にある文字ほど短い符号下にある文字ほど長い符号になるの。

つまり、たくさん出てくる a には短い符号を、あまり出てこない b や c には少し長い符号を割り当てられる、というわけね。

 

えっ、なぜ少ないものから結合するかって??

それは、出現回数の少ない文字を木の下のほうに追いやるためよ。

木の下に行くほど、割り当てられる符号は長くなるの。

でも、あまり出てこない文字なら、少し長くなっても全体への影響は小さいわよね。

逆に、よく出てくる文字に長い符号をつけてしまうと、全体のデータ量が大きくなってしまうの。

 

イリエダ
イリエダ
だからハフマン木では、「出現回数が少ないものほど下に行く」ように作るのよ。

 

こうして木を作ることで、各文字にどんな長さの符号を割り当てればよいかが自然に決まるの。

 

符号の割り当て

ハフマン木ができたら、次はそれぞれの文字に 0 と 1 の符号 を割り当てていくわ。

やり方はシンプルで、木を上からたどり、左に進むときは 0、右に進むときは 1 と決めるの。

 

今回のハフマン木はこうだったわね。

        (7)
       /   \
     a(4)  (3)
           /  \
         b(2) c(1)

この木を、上の頂点から各文字までたどっていくのよ。

 

a は、いちばん上の頂点から見て 左に1回進めばたどり着くわ。

左に進むときは 0 と決めていたから、

a = 0

になるの。

 

b に行くには、まず上から に進み、そのあと に進むわ。

右は 1、左は 0 だから、順番に並べると

b = 10

となるのよ。

 

c に行くには、まず上から に進み、そのあともう一度 に進むわ。

だから、

c = 11

になるの。

 

こうして、それぞれの文字に対応する符号が決まるのよ。

a = 0
b = 10
c = 11

 

イリエダ
イリエダ
つまり、「頂点からその文字までの道順」が、そのまま符号になるのよ。

 

ここで注目してほしいのが、a は出現回数がいちばん多かったということよ。

そのため、木の上のほうに配置されて、結果として 短い符号 が割り当てられているの。

逆に、出現回数の少ない b や c は木の下のほうにあるので、少し長い符号になるわ。

これが、ハフマン圧縮で全体のデータ量を減らせる理由なのよ。

 

ここでとても大事なのが、どの符号も他の符号の先頭になっていないことなの。

これを プレフィックス条件 と呼ぶわ。

たとえば今回の符号では、

a = 0
b = 10
c = 11

01011 の先頭にはなっていないし、1011 の先頭にはなっていないわよね。

だから、ビット列を左から順番に読んでいけば、どこで1文字が終わるのかを迷わず判断できるのよ。

 

たとえば、こんな割り当てをしてしまったとするわね。

a = 0
b = 1
c = 11

このとき、ビット列 011 を読んだらどうなるかしら?

これは、

0 | 11

と読めば a, c になるし、

0 | 1 | 1

と読めば a, b, b にも見えてしまうの。

つまり、正しく元に戻せなくなるのよ。

 

イリエダ
イリエダ
圧縮したデータは、あとでちゃんと元に戻せないと意味がないものね。

 

だからハフマン圧縮では、短い符号を使いながらも、区切りがあいまいにならないようにすることがとても大切なの。

このプレフィックス条件があるおかげで、ハフマン符号は安全に復元できるのよ。

 

実際に圧縮してみる

それでは、実際にハフマン符号を使ってデータを圧縮してみましょう。

元の文字列はこれ ↓

aaaabbc

 

先ほど決めた符号はこう。

a = 0
b = 10
c = 11

 

このルールに従って、1文字ずつ置き換えていくのよ。

 

文字列「aaaabbc」を左から順に見ていきましょう。

a → 0
a → 0
a → 0
a → 0
b → 10
b → 10
c → 11

 

これをそのままつなげると、

0000101011

 

こうして、元の文字列を ビット列(0と1の並び) に変換できるの。

 

イリエダ
イリエダ
文字を「コード」に置き換えて、それをつなげていくだけなのよ。シンプルでしょ?

 

ここで大事なのは、よく出る文字ほど短い符号を使っているという点よ。

今回の場合、たくさん出てきた a は 1ビット(0)で表現できているわよね。

もし全部の文字を同じ長さ(たとえば2ビット)で表していたら、もっと長くなってしまうの。

つまり、出現頻度に応じて長さを変えることで、全体のデータ量を減らしているのよ。

 

もちろん、ちゃんと元に戻せるわ。

ビット列を左から順に読んでいけば、プレフィックス条件のおかげで、どこで1文字が終わるのかがちゃんと分かるの。

たとえば👇

0 → a
0 → a
0 → a
0 → a
10 → b
10 → b
11 → c

このようにして、元の「aaaabbc」に正しく復元できるのよ。

 

イリエダ
イリエダ
圧縮してもちゃんと元に戻せる、これが「可逆圧縮」のポイントね。

 

こうしてハフマン圧縮では、無駄を減らしながら安全にデータを扱うことができるの。

 

ハフマン圧縮のメリットと注意点

メリット

 

注意点

 

イリエダ
イリエダ
ハフマン圧縮は「よく出るものを優遇する」仕組みなの。これが分かればバッチリね!

 

なぜ「ハフマン圧縮」というの?

ところで、「ハフマン圧縮」って名前、ちょっと気にならないかしら?

実はこれ、ある人物の名前がそのまま使われているのよ。

 

イリエダ
イリエダ
ハフマンさんという研究者が考えた方法なの。

 

この圧縮方法を考えたのは、デビッド・A・ハフマンという人物よ。

彼は当時、大学院で情報理論を学んでいる学生だったの。

 

きっかけは大学の課題

ハフマン圧縮は、なんと授業の課題から生まれたの。

その課題は、

「できるだけ効率よくデータを表現する方法を考えなさい」

というものだったのよ。

 

最初は別の方法を考えていたんだけど、途中でより効率の良い方法に気づいたの。

それが、今まで学んできたハフマン圧縮なのよ。

 

なぜすごいの?

この方法がすごいのは、

出現回数に応じて最も効率の良い符号を自動で作れるところなの。

しかもこの方法はとても優れていて、

など、今でもいろいろなところで使われているのよ。

 

まとめ

ハフマン圧縮は、

という、ちょっと驚きの背景を持っているの。

 

イリエダ
イリエダ
名前の由来まで知ると、ぐっと印象に残るでしょ?

 

それじゃあね!

 

【高校情報】LZ圧縮とは何かわかりやすく具体例で解説

 

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。今日は「LZ圧縮についてわかりやすく」解説しちゃうわね。

 

LZ圧縮(エルゼットあっしゅく)とは??

LZ圧縮とは、

過去に出てきたデータを再利用して、データ量を減らす圧縮方法

よ。

同じデータが出てきたときに、そのままもう一度書くんじゃなくて、

「さっき出てきた場所を参照する」のがポイント。

 

 

圧縮の仕組み

LZ圧縮では、データを読みながら、過去に同じ並びがないか探していくの。

そして見つかったら、こんな形で表すのよ👇

$$
(何文字前,何文字分)
$$

これは、「何文字前に戻って、そこから何文字コピーするか」という意味よ。

 

具体例で解説

例えば、次のデータを見てみましょう。

ababcabc

あら、後に

abc

が2回続けて出てるわね。これは圧縮しないと損損。

 

ここで登場するのが「参照」よ。

後ろの「abc」は、前の「abc」と同じなので👇

$$
(3,3)
$$

と表せるの。

つまり、「3文字前から3文字コピー」という意味ね。

 

最終的にはこんなイメージになるわ👇

ababc(3,3)

 

イリエダ
イリエダ
同じ文字列をもう一度書く代わりに、「どこをコピーするか」を書いているのよ。

 

LZ圧縮の応用と利点

この仕組みによって、データサイズをぐっと小さくできるの。

どこで使われる?

 

LZ圧縮を使うときの注意点

便利な技術だけど、注意点もあるわ。

 

なぜ「LZ圧縮」は「LZ」なの??

ところで、「LZ圧縮」ってちょっと不思議な名前。

マンジンガーZ感、あるわよね。

えっ、

LさんとZさんが作ったの?

って思った??

鋭いわね。

実はその通りなの。

 

イリエダ
イリエダ
LZは、人の名前から来ているのよ。

 

LZは、次の2人の研究者の頭文字なの。

 

 

この2人が考えた圧縮方法だから、LZ圧縮と呼ばれているのよ。

 

この2人は、イスラエルの計算機科学者で、1970年代にこの圧縮方法を考えたの。

つまり、LZ圧縮はイスラエル生まれの技術ということね。

 

イリエダ
イリエダ
名前の由来まで知っておくと、ぐっと理解が深まるわよ。

 

なぜLZ圧縮は生まれたの??

ところで、どうしてLZ圧縮なんて仕組みが考えられたのか、気にならないかしら?

実はこれ、当時のコンピュータ事情が大きく関係しているの。

 

1970年代は「データが重すぎる」時代

LZ圧縮が生まれた1970年代は、今と比べてコンピュータの性能がとても低かったの。

つまり、データをそのまま扱うのは非効率すぎたのよ。

 

 

イリエダ
イリエダ
だから、「どうにかしてデータを小さくしたい!」というニーズが強かったの。

 

それまでの圧縮の問題点

実は、LZ圧縮が登場する前にも圧縮方法はあったのよ。

でも、それらはあらかじめ決められたルールに基づいて圧縮する必要があったの。

つまり、データの種類ごとに工夫が必要で、汎用的に使いにくいという課題があったのよ。

 

LZ圧縮のすごいところ

そこで登場したのがLZ圧縮。

この方法はなんと、

データの中から自動で繰り返しを見つけるの。

つまり、事前にルールを決めなくても、

「さっき出てきた部分を使い回す」だけで圧縮できるという仕組みなのよ。

 

なぜ革命的だったの?

この考え方はとても優れていて、

現在のZIPやPNGなどの圧縮技術にもつながっているのよ。

 

イリエダ
イリエダ
「人がルールを作る」から「データがルールを作る」へ進化したのがポイントね。

 

それじゃあね!また次の楽しい勉強で会いましょうね。

【高校情報】ランレングス圧縮とは何かわかりやすく解説・実例付き

 

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。今日はランレングス圧縮について、分かりやすく解説していくわね。

 

ランレングス圧縮とは??

「ランレングス圧縮」とは、

同じデータが連続している部分をまとめて表現する圧縮方法

よ。

 

 

まずはランレングス圧縮の基本的な手順を理解しましょう。

  1. データの中で連続する同じ文字や数字を見つける。
  2. その連続する文字や数字を1つにまとめ、何回続いているかを記録する。

簡単でしょ?

例えば、おなじみの画像形式の一つ、JPEGや、古いけどまだ使われているFAXなどに使われているのよ。

 

ランレングス圧縮のわかりやすい例

言葉だけじゃ分かりにくいから、具体例を見ましょう!

 

例えば、こんな文字列を考えてみて。

AAABBBCCDAA

これをランレングス圧縮するとどうなるかしら?

  1. 「A」が3回続いているから、記録すればA3になるわね。
  2. 「B」も3回続いてるから、B3
  3. 次は「C」が2回続くので、C2
  4. 「D」は1個なので、D1
  5. 最後に「A」が2回で、A2

すると、圧縮された結果は、

A3B3C2D1A2

になるのよ。

 

イリエダ
イリエダ
分かってきたわね!とってもいいわ!次はもう少し深堀りしていきましょう。

 

ランレングス圧縮のメリットとデメリット

ランレングス圧縮には当然、いい面とそうでない面があるのよ。

 

メリット

 

デメリット

 

ね、ちょっと理解が深まったかしら。

 

なぜ「ランレングス」という名前なの?

ところでこの「ランレングス圧縮」って、ちょっと変わった名前よね。

「ラン・レングスさん」という人にちなんで名付けられたのかしら……?

 

 

それとも新しいファッションアイテムの名前かしら。

ノンノン、じつは違うのよ。

 

イリエダ
イリエダ
これは人の名前じゃなくて、英語の意味そのままなの。

 

run(ラン)は「連続」、length(レングス)は「長さ」という意味よ。

つまり、ランレングス圧縮とは、

「連続しているデータの長さ」を記録する圧縮方法ということなの。

たとえば、こんなデータがあったとするわね。

AAAAA

普通ならAを5回書くけれど、ランレングス圧縮ではこうなるの。

A5

つまり、「Aが5回続いている」という長さ(length)だけを記録しているのよ。

 

イリエダ
イリエダ
連続している部分(run)を見つけて、その長さ(length)を数える、という仕組みね。

 

こう考えると、「ランレングス」という名前も、とっても分かりやすいでしょ?

 

それじゃあね!

【高校情報】3分でわかる!ファイルの圧縮率を計算する方法

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。今日はファイルの圧縮率の計算方法について、一緒に勉強していきましょう。

 

ファイルの圧縮率の計算方法

ファイルの圧縮率は、

元のファイルサイズに対して、圧縮後のファイルサイズがどれくらい残っているか

を表すものなの。

 

まずは基本の公式を紹介するわ。

$$
\text{圧縮率} = \frac{\text{圧縮後のファイルサイズ}}{\text{元のファイルサイズ}} \times 100
$$

 

早速使ってみましょう。

元のファイルサイズが100MBで、圧縮後が40MBの場合の圧縮率はいくつになるかしら。

$$
\frac{40}{100} \times 100 = 40\%
$$

つまり、圧縮率は40%になるわ。

 

 

イリエダ
イリエダ
「元の40%の大きさになった」という意味よ。

 

ここが超重要!

 

たとえば、

ってことね。

 

最後に知っておきたいポイント

実は、「圧縮率」という言葉は使い方が2種類あるの。

でも、試験ではこの「残った割合」の式が使われることが多いので、しっかり覚えておきましょう。

問題文をよく読んで、「残り」なのか「減少」なのかを見分けるのよ。

 

イリエダ
イリエダ
これで、教科書どおりの圧縮率はバッチリね!次はひっかけ問題にも挑戦してみましょう!

 

それじゃあね!

3分でわかる!可逆圧縮と非可逆圧縮の違い・具体例・覚え方

 

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。

 

今日は可逆圧縮非可逆圧縮について学んでいくわね。

皆も圧縮って言葉を聞いたことがあるかもしれないけど、その違いをちゃんと理解しているかしら?

それを3分でわかるように説明するわね。

 

可逆圧縮と非可逆圧縮の違い

圧縮には大きく分けて可逆圧縮非可逆圧縮の2つがあるわ。

 

可逆圧縮(かぎゃくあっしゅく)とは??

まず可逆圧縮について。

これは、

元のデータを完全に復元できる圧縮方法

よ。

例えば、ZIPファイルを思い浮かべてみて。

これは、データを再度展開しても元のデータが完全に復元できる典型例ね。

なので、重要なデータやソースコードでは可逆圧縮が好まれることが多いわ。

 

非可逆圧縮(ひかぎゃくあっしゅく)とは??

次に非可逆圧縮について説明するわ。

これは、

元のデータを完全には戻せない圧縮方法

よ。

圧縮する過程でデータの一部が失われてしまうの。それによってファイルサイズがぐっと小さくなるのよ。

音楽ファイルのMP3や動画ファイルのMP4なんかがこれにあたるわ。少しの情報を削ることで、元のデータにほぼ似た情報を再生することが可能なの。

だから、大容量のメディアコンテンツには非可逆圧縮が使われることが多いの。

 

可逆圧縮と非可逆圧縮の具体例と覚え方

具体的な例を見てみましょう。

 

可逆圧縮の例・覚え方

どれも展開すると元のファイルに完全に戻せるわ。

この例の覚え方は、

ZIP・RAR・PNGは「チンしたら元に戻る」

でどう??

 

ジップ(ZIP)ラップ(RAR・PNG)で包んで、レンジでチンすると元に戻るイメージを思い浮かべましょう。

 

 

 

 

非可逆圧縮の例

データが少し失われるけど、使いやすいサイズになってるの。

この例の覚え方は、

日本地図は圧縮したら元に戻らない

でどう??

 

ってな感じで対応しているわ。

 

 

イリエダ
イリエダ
大事なのは状況に合わせて使い分けること。しっかり覚えておいてね!次は「データの圧縮アルゴリズム」を見てみようかしら。

 

それじゃあ、またね!

【高校情報】圧縮・伸張・解凍・展開・復元の違いとは?5つの用語を完全整理

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。
今日は圧縮・伸張・解凍・展開・復元の違いについて、スッキリ整理していくわよ。

 

ファイルの圧縮・伸張・解凍・展開・復元の違い

似た言葉が多くて混乱しやすいけど、ちゃんと整理すればシンプルよ。

 

圧縮(あっしゅく)

データの情報を保ったまま、サイズを小さくすることよ。

イリエダ
イリエダ
ぎゅっと詰めて、小さくしてるの。

 

伸張(しんちょう)

圧縮されたデータを元の状態に戻すこと

イリエダ
イリエダ
これが正式な言い方ね。

 

解凍(かいとう)

圧縮ファイルを開くこと

伸張とほぼ同じ意味で使われるけど、日常的な言い方よ。

イリエダ
イリエダ
冷凍したものを溶かすイメージね。

 

展開(てんかい)

圧縮ファイルの中身を取り出して使える状態にすること

イリエダ
イリエダ
箱の中身を広げて使う感じよ。

 

復元(ふくげん)

元の状態に戻すこと全般を指す言葉よ。

圧縮データに限らず、バックアップから戻すときなどにも使われるの。

 

イリエダ
イリエダ
「元に戻す」の広い意味ね。

 

まとめ

用語 意味 イメージ
圧縮 データを小さくする ぎゅっと詰める
伸張 元に戻す(正式用語) 元に戻す
解凍 圧縮ファイルを開く 溶かす
展開 中身を取り出して使う 広げる
復元 元に戻す(広い意味) バックアップから戻す

ポイントは、圧縮 ↔ 伸張が正式な対語ってことかしら。

 

イリエダ
イリエダ
解凍や展開は、日常用語として覚えておけばOKよ。

 

それじゃあね!

【高校情報】2進数の小数を10進数に変換する方法|計算の仕組みを完全解説

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。
今日は2進数の小数を10進数に戻す方法を解説するわ。

 

前回は「2進数の小数を10進数に戻す方法」を勉強してきたわね。

すると、

「2進数の小数ってどうやって10進数に戻すの?」

って思っちゃうわよね。

そんな疑問、今日は一気に解決するわよ。

 

2進数の小数を10進数に変換する方法

2進数の小数は、次のように計算するの。

$$
各桁 × 2^{-1}, 2^{-2}, 2^{-3}…
$$

つまり、小数点の右側は

という意味を持っているのよ。

 

 

 

例題①(基本)

まずは次の例題を一緒に解いてみましょう。

 

 

これは

$$
0.101_2 = 1×2^{-1} + 0×2^{-2} + 1×2^{-3}
$$

それぞれ計算すると

$$
= 0.5 + 0 + 0.125
$$

$$
= 0.625
$$

 

だから答えは

$$
0.625
$$

になるわ。

 

イリエダ
イリエダ
位置ごとに意味が決まっているのがポイントよ。

例題②(桁が多い場合)

お次はこの問題。

 

 

$$
0.1101_2 = 1×2^{-1} + 1×2^{-2} + 0×2^{-3} + 1×2^{-4}
$$

$$
= 0.5 + 0.25 + 0 + 0.0625
$$

$$
= 0.8125
$$

例題②(整数部分がある場合)

さっきより違って、整数部分があるパターンね。

 

 

こういう問題は、整数部分と小数部分にわけて考えるわ。

$$
10_2 = 2
$$

$$
0.101_2 = 0.625
$$

$$
合計 = 2 + 0.625 = 2.625
$$

よくあるミス

特に小数はマイナスの指数になるのが重要よ。

まとめ

 

イリエダ
イリエダ
これで「10→2」と「2→10」両方できるようになったわね。
ここまで来れば、演算誤差も完全に理解できるわよ。

 

ぜひセットで覚えておいてね。

それじゃあ!

【高校情報】2進数の小数の計算方法|10進数→2進数の変換を完全解説

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。
今日は2進数の小数の計算方法について、スッキリ整理していくわよ。

 

「0.3が2進数で表せないってどういうこと?」
「小数ってどうやって2進数にするの?」

そんな疑問、持っている人多いのよね。

 

でも安心して。

2進数の小数の計算方法の手順はたった1つなの。

 

 

2進数の小数の計算方法

2進数の小数は、次の手順で求めるわ。

これだけでOKよ。

 

次の問題を一緒に解いていきましょう。

 

 

では順番にやっていくわね。

 

「0.」を書く

まずは「0.」を確定させましょう。

今回扱う数は1未満なので、2進数でも整数部分は0ね。

そのため、最初は

0.

からスタートよ。

 

小数を2倍する

次は小数「0.625」を2倍。

$$0.625 \times 2 = 1.25 \quad → 1$$

整数部分は1ね。

だから、「0.」の次に続くのは「1」で

0.1

になる。

 

残りの小数で繰り返す

同じことを残りの小数で繰り返すわ。

1を引いた残りの小数は「0.25」。これをまた2倍しましょう。

$$
0.25 \times 2 = 0.5 \quad → 0
$$

今度は0。ってことで、

0.10

になる。

 

お次も同じね。1を前回は取り出さなかったから、残りは「0.5」。これを2倍すると、

$$
0.5 \times 2 = 1.0 \quad → 1
$$

うん、「1」が出てきた。

 

オッケー、1を取り出すと、

$$
0.101
$$

になるわ。1.0から1を取ったから、もう残りは0。

ってことで計算終了。

よって、0.625を2進数で表すと、

$$
0.101
$$

になるわ。

 

イリエダ
イリエダ
きれいに終わると気持ちいいわね。

 

しかし、無限に続くパターンもある!

おっと、ここからが本番よ。

なんと、無限に続くパターンもあるの。

 

 

同じように計算してみると…

$$
0.3 \times 2 = 0.6 → 0
$$

$$
0.6 \times 2 = 1.2 → 1
$$

$$
0.2 \times 2 = 0.4 → 0
$$

$$
0.4 \times 2 = 0.8 → 0
$$

$$
0.8 \times 2 = 1.6 → 1
$$

$$
0.6 \times 2 = 1.2 → 1
$$

……

同じパターンが繰り返されて、

$$
0.0100110011…
$$

無限に続く小数になるわ。

 

なぜ無限になるの?

これはシンプルで、

2進数では割り切れない数だからよ。

10進数でも

1 ÷ 3 = 0.333333...

みたいに無限になることがあるわよね。

それと同じ現象よ。

 

よくあるミス

特に順番通りに並べることは大事よ。

 

なぜ「2倍」するの??

そうそう、そう思っちゃうわよね。

 

2進数の小数は、

1/2(=0.5), 1/4(=0.25), 1/8(=0.125)…

という「2の分数」の組み合わせでできてるわ。

つまり最初に知りたいのは、

 「この数は 0.5(=2⁻¹)以上か?」

ということ。

 

2進数の小数の一番左の桁は、

2⁻¹(=0.5)の位

だから、

と判断できるわね。

 

ここで「2倍」が登場よ。

数を2倍すると、

0.5(=2⁻¹)が 1(=2⁰)に繰り上がる!

つまり、

0.5以上かどうかが、整数部分として現れるの。

例:0.625 × 2 = 1.25 → 「1」が出る(0.5以上)

この「1」が、2進数の最初の桁(2⁻¹の位)になるってわけね。

 

そのあと何をしている??

整数部分を取り除いて、残りで同じことを繰り返してるわね。

つまり毎回、

「この数は次の位(1/4, 1/8…)以上か?」

を判定しているの。

 

ってことで、2倍しているのは、単なる気まぐれではないわ。

「その数がどの2の位を持っているか」をチェックするため

なのよ。

 

まとめ

 

イリエダ
イリエダ
ここが分かると、次の「演算誤差」の話も一気に理解できるわよ。

 

ぜひ繰り返し練習して、しっかり身につけてね。

 

それじゃあ!

【高校情報】演算誤差とは?2進数小数のしくみをわかりやすく解説

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。今日はコンピュータの演算誤差についてお話しするわ。

 

コンピュータの演算誤差(えんざんごさ)とは??

コンピュータで計算をすると、正しいはずの計算なのに誤差が出ることがあるの。

例えばこんな現象を見たことはないかしら?

0.1 + 0.2 = 0.30000000000000004

えっ?

0.3じゃないの?

と思うわよね。

 

 

実はこれ、コンピュータのバグではないの。

コンピュータが数を2進数で扱っていることが原因なのよ。

 

このように本来の値とズレが生じることを、

演算誤差(えんざんごさ)

というわ。

 

今回は

をわかりやすく説明するわね。

 

コンピュータは2進数で数を扱う

私たちが普段使っている数は10進数よね。

例えば

0.875

これは

$$0.875 = 0.5 + 0.25 + 0.125$$

つまり

$$0.875 = \frac{1}{2} + \frac{1}{4} + \frac{1}{8}$$

これを2の累乗で書くと

$$0.875 = 2^{-1} + 2^{-2} + 2^{-3}$$

だから

$$0.875 = 0.111_{(2)}$$

つまり2進数で正確に表せる数ね。

 

小数は2進数で表せないことがある

ところが、すべての小数が2進数で表せるわけではないの。

例えば

0.3

これを2進数にすると

$$0.3_{(10)} = 0.0100110011…$$

のように永遠に続く小数になってしまうわ。

 

これは10進数でいう

1 ÷ 3 = 0.333333...

と同じ現象よ。

つまり2進数では割り切れない数なの。

 

コンピュータは桁数が有限

でもコンピュータの中では桁数は無限にはできない

だからある桁で打ち切る必要があるのよ。

例えば小数点以下8桁までとすると

$$0.01001100_{(2)}$$

のようにするの。

これを

丸め処理

というわ。

 

2進数を10進数に戻してみる

この値を10進数に戻すと

$$0.01001100_{(2)}$$

$$= 0\times2^{-1} + 1\times2^{-2} + 0\times2^{-3} + 0\times2^{-4}$$

$$+1\times2^{-5} + 1\times2^{-6} + 0\times2^{-7} + 0\times2^{-8}$$

計算すると

$$0.296875$$

になる。

 

元の値との誤差

元の値は

0.3

だったわよね。

でもコンピュータの中では

0.296875

として扱われているの。

つまり誤差が生まれているということね。

 

演算を重ねると誤差は広がる

さらに問題なのは、計算を繰り返すと誤差が少しずつ広がることなの。

これを誤差の伝播というわ。

だからコンピュータの計算では

といった問題が起こるのよ。

 

まとめ

 

イリエダ
イリエダ
コンピュータは正確に計算しているのに、数の表し方の違いで誤差が生まれるなんて不思議よね。

 

でもこの仕組みを知っておくと、

などの理解がぐっと深まるの。ぜひ覚えておいてね。

 

それじゃあ!

【高校情報】クロック周期・クロック周波数の計算問題まとめ6選

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。

 

今日は「クロック」に関する計算問題を、すっきり整理していきましょう。

クロックの問題は難しそうに見えるけれど、実は全部で6パターンしかないの。

 

 

  1. クロック周期 からクロック周波数
  2. クロック周波数 からクロック周期
  3. CPU実行時間を求める
  4. 必要クロック数を求める
  5. 1秒間に処理できる命令数を求める
  6. 一定時間で処理できる命令数を求める

この6パターンを理解してしまえば、 高校情報Ⅰのクロック計算問題はほとんど解けるようになるわ。

一つずつ落ち着いて見ていきましょうね。

 

①:クロック周期 からクロック周波数を求める計算問題

クロック周期が与えられているとき、クロック周波数は次の式で求められるわ。

$$
f = \frac{1}{T}
$$

 

つまり、周期の逆数が周波数になるの。

 

解き方

$$
f = \frac{1}{0.002}
$$

$$
f = 500
$$

答え:500 Hz

②:クロック周波数 からクロック周期を計算する問題

今度は逆に、クロック周波数から周期を求める計算問題ね。

$$
T = \frac{1}{f}
$$

 

まず GHz を Hz に直すわ。

$$
2GHz = 2 \times 10^9 Hz
$$

周期は

$$
T = \frac{1}{2 \times 10^9}
$$

答え:0.5ナノ秒

③:CPU実行時間を求める計算問題

処理にかかる時間は、次の公式で求められるわ。

$$
実行時間 = \frac{クロック数}{クロック周波数}
$$

$$
実行時間 = \frac{6000}{3 \times 10^9}
$$

$$
= 2 \times 10^{-6}
$$

答え:0.000002秒

④:必要クロック数を求める計算問題

実行時間とクロック周波数が分かれば、必要なクロック数も求められるわね。

$$
クロック数 = 実行時間 \times クロック周波数
$$

 

$$
クロック数 = 2 \times 10^9
$$

答え:20億クロック

 

⑤:1秒間に処理できる命令数を求める計算問題

CPUの性能を考えるときによく出る問題ね。

$$
命令数/秒 = \frac{クロック周波数}{1命令に必要なクロック数}
$$

$$
命令数 = \frac{2 \times 10^9}{0.5}
$$

$$
= 4 \times 10^9
$$

答え:40億命令/秒

⑥:一定時間で処理できる命令数を求める計算問題

最後は少しだけ発展した問題です。

$$
命令数 =
\frac{クロック周波数 \times 時間}{1命令のクロック数}
$$

$$
命令数 =
\frac{3 \times 10^9 \times 10}{3}
$$

$$
= 10 \times 10^9
$$

答え:100億命令

 

イリエダ
イリエダ

クロックの計算問題は、たくさん種類があるように見えるけれど、実はこの6パターンに整理できるの。そして覚える公式はほんの少し。

 

クロック周期とクロック周波数の関係。

それからCPUの処理時間の式。

この2つを理解しておけば、クロック問題はほとんど怖くないわよ。

 

それじゃあね!

【高校情報】クロック数・クロック信号・クロック周波数の違いをわかりやすく解説!

 

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。

 

今日はクロック数、クロック信号、それからクロック周波数について勉強してみましょうか。

これらの言葉、似ているけれど実はそれぞれ違う意味を持っているの。

 

クロック信号・クロック数・クロック周波数の違い

イリエダ
イリエダ
コンピュータはたくさんの装置でできているの。だから、それぞれの装置がバラバラに動いてしまうと困るのよね。

 

だから、CPUやメモリなどの装置がうまく連携して動くためには、

動作のタイミングをそろえる必要あるわね。

そこで使われるのが

クロック信号

なのよ。

クロックという名前は「時計(clock)」から来ているのよ。コンピュータは、時計の秒針のように一定のリズムで動いているからね。

 

クロック信号とは??

クロック信号とは、

コンピュータの動作のタイミングを決める合図の信号

のこと。

イメージとしては、

のようなものね。

CPUは

「カチ」
「カチ」
「カチ」

という一定のリズムに合わせて処理を進めていくの。

 

クロック数とは??

クロック数とは、

ある処理を行うために必要なクロック信号の回数

のこと。

たとえば

というように、処理によって必要なクロック数は変わるわ。

つまり、

その処理が何回合わせたタイミングのリズムが必要なのか

を表しているのね。

 

クロック周波数とは??

クロック周波数とは、

1秒間にクロック信号が何回発生するか

を表したものね。

単位はHz(ヘルツ)

 

例えば

1GHzのCPU

の場合、1秒間に10億回クロック信号が出ていることになるわ。

つまり、

クロック周波数が高いほど、コンピュータの処理は速くなるってこと。

それだけ、1秒間あたりの処理する回数が多いってことだからね。

 

クロック数・クロック信号・クロック周波数の違いの覚え方

えっ、まだ違いがピンと来てない??

 

イリエダ
イリエダ
メトロノームで考えると、とても分かりやすいわよ。

 

 

 

 

クロック信号をメトロノームの

「カチ」

という1回の音だと考えてみましょう。

 

すると、それぞれの意味はこうなるの。

 

つまり、

・クロック信号はリズムの1拍
・クロック数は曲を演奏するのに必要な拍数
・クロック周波数はリズムの速さ

という関係になるのよ。

まとめ

オッケー、最後にクロック数・クロック信号・クロック周波数の違いを表にまとめておきましょう。

 

用語 ポイント 覚え方
クロック信号 CPUの動作タイミングを作るリズム メトロノームの1回の「カチ」
クロック数 処理に必要なクロック信号の回数 曲に必要な「カチ」の数
クロック周波数 1秒間に発生するクロック信号の回数 1秒間の「カチ」の回数

 

リズム(クロック信号)があって、そのリズムが1秒間に何回鳴るかがクロック周波数。そして、そのリズムを何回使って処理するかがクロック数。

 

イリエダ
イリエダ
こう考えると、すっきり整理できるわね。

 

それじゃあ!

【高校情報】標本化周期・標本化周波数の違いをわかりやすく解説

 

イリエダ
イリエダ
こんにちは、イルカの妖精イリエダよ。
今日は「標本化」と「標本化周期」と「標本化周波数」の違いを、落ち着いてゆっくり整理していきましょう。

 

音楽や声などのアナログ信号をコンピュータで扱うためには、その信号をデジタル化する必要があるわ。

そのときに行われる大切な操作が、標本化ね。

今回の

はどちらも「標本化」に関するキーワードなの。

 

えっ、標本化忘れちまった???

そんなときはよかったら「標本化・量子化・符号化の違い」を復習してみて。

 

標本化周期(ひょうほんかしゅうき)とは??

まずは標本化周期からね。

これは、

標本化する時間の間隔

のことを指すわ。

 

つまり、

どれくらいの時間ごとにデータを取り出すか

を表しているのね。

単位は[s](秒)

たとえば

といったように、標本化する間隔を示しているわ。

もちろん、この標本化周期が短いほどより細かく音を記録できて、元のアナログ波形に近い音を再現できるのよ。

 

標本化周波数(ひょうほんかしゅうはすう)とは??

一方で、標本化周波数は

1秒間に何回標本化するか

を表したものよ。

単位はHz(ヘルツ)

たとえば

という意味になるわ。

 

ちなみに、CDの音楽は

44,100Hz(44.1kHz)

で標本化されているのよ。

かなり細かく音を記録していることがわかるでしょう?

 

標本化周期と標本化周波数の違い

ズバリ言っちゃうわ。

標本化周期と標本化周波数は、

逆数の関係にあるわ!

これが違いね。

 

つまり

$$
標本化周波数 = \frac{1}{標本化周期}
$$

という関係になるの。

 

たとえば、標本化周期が

$$
0.001 \text{秒}
$$

だったら、標本化周波数は

$$
\frac{1}{0.001} = 1000
$$

になるわ。

 

標本化周期と標本化周波数の違いの覚え方

 

イリエダ
イリエダ
まだ少しイメージしづらいかしら? じゃあ、A君が旗揚げをしている様子を想像してみて。

 

 

 

A君が赤い旗を

「よいしょ、よいしょ」

と一定のリズムで上げているとしましょう。

このとき、

旗を上げる間隔標本化周期

 

たとえば、

この旗を上げる時間の間隔が周期になるの。

 

一方で、標本化周波数1秒間に旗を何回上げているかを表すわ。

たとえば

という感じね。

 

つまり

こう考えると、違いがスッと理解できるでしょう?

 

まとめ

最後にポイントを整理しておきましょう。

そしてこの2つは

逆数の関係

になってるわね。

 

イリエダ
イリエダ
標本化周期と標本化周波数の違い、きれいに整理できたかしら? デジタル信号の世界は、まだまだ奥が深いのよ。次も一緒に学んでいきましょうね。

 

それじゃあ、またね。