2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

最初に「あい」を学ぶことば日本語でプログラミング入門(Mindで定番アルゴリズム:二分探索法)

Last updated at Posted at 2025-12-20

はじめに

本記事シリーズは母国語のプログラミング言語が存在するという文化的価値をアピールするためのもので、プログラミング一般の入門を意図するものではありません。とはいっても題材としては定番アルゴリズム:二分探索法を疑似言語ではなくコンパイル・実行可能なプログラミング言語の日本語で書いてみようというたてつけとなります。

Mind(マインド)

プログラミング言語Mind(マインド)は自然な日本語で記述できるスタック指向の軽量中間コードコンパイラ言語です。ただし単語間の分かち書きが必須であくまで形式言語です。逆ポーランド記法1の範囲で分かち書きされた日本語単語の語順が自然と日本語の語順となるという意味の「自然さ」で書くことができ、独自の軽量中間コードのランタイム実行で非常に高速です。実装言語はCまたはMind。初版の登場は1985年で今年2025年は生誕40周年となります。

Mind(マインド)の入手方法

無償版のMind version 8 (windows版linux版)を下記の公式サイトからダウンロードできます。フリーメールでかまいませんのでメールアドレスをご登録くださいませ。

定番アルゴリズム:二分探索法とは

アルゴリズムは、問題を解決するための手順や計算方法を意味します。探索はデータの中から特定の条件に合致するデータを見つけ出すためのアルゴリズムで、いくつかの定番ロジックが存在します。

ここではその中のひとつ二分探索(法)をまず扱ってみます。二分探索(法)はデータが大小判定可能な一定の順序で並んでいることを前提として、探索する値が判定対象のデータを中央で分割してどちらに存在しているかを判定していくロジックとなります。

線形探索(法)の場合は最初に探索する値が存在していれば一番速いですが、一番後に存在する場合がもっとも遅くなります。それに対して二分探索(法)は探索対象範囲を2つに分割して探索する値が小さい方に存在するか、大きい方に存在するかを間接的に判定して、分割を繰り返すことで最終的な位置を特定します。

存在しないと判定された半分の方は反復探索する必要がなくなりますので、この点線形探索(法)より高速となります。

プログラミングの3大ロジック構造とは

順次、分岐、反復の3つの制御構造(control structures)によって処理の流れを記述することを構造化プログラミングといいます。二分探索(法)もこの構造で構成されます。

1.順次(sequence) 部分プログラムを順々に実行する。
2.分岐(bifurcation) 条件式が導出した状態に従い、次に実行する部分プログラムを選択して分岐する。
3.反復(repetition) 条件式が導出した特定の状態の間、部分プログラムを繰り返し実行する。ループ処理。

お題のソースコード

最初に前提として探索対象データは昇順の値で並んだ状態で初期化するものとします。
並べ替えという定番アルゴリズムの範疇がありますが、ここではそれは主題ではないため、後から並べ替えるソースコードは記述しないとします。
また昇順の値で並んだ状態には重複する値は存在しないことも前提とします。

データ群には15の要素を持つ「配列」という特殊な整数型の変数を用意します。

段ボール箱が15あり、その中に小さなボールが複数づつ入っている状態をイメージしてください。段ボール箱は1つづつ15並んでいるのではなく、1つの長い段ボール箱が5つのセクションで区切られているようなイメージが配列に近いです。ボールの数は左から右に向かって多くなり、同じ数が格納されていることはないとします。

Mindの場合、段ボール箱の配列要素番号は1からはじまり15で終わります。

binarysearch.src
段ボール箱は 15の 変数。
探索対象のボール数は 定数 16。

段ボール箱にボールの数を増やしながら隠すとは  (・ → ・)
    「探索対象のボール数 」を 表示し 探索対象のボール数を 数値表示し 改行し 
    「要素番号 」を 表示し
    段ボール箱の 要素数で 回数指定し
        回数を 二桁で数値表示し 「 」を 表示し
    繰り返す
    改行し
    「ボール数 」を 表示し
    段ボール箱の 要素数で 回数指定し
        回数に 3を 加えて 段ボール箱(回数)に 入れる
        段ボール箱(回数)を 二桁で数値表示し 「 」を 表示し
    繰り返す
    改行し
    改行する。

段ボール箱を二分探索するとは  (・ → ・)
        左側要素番号は 変数
        右側要素番号は 変数
        中央要素番号は 変数
    左側要素番号に 1を 入れ
    右側要素番号に 段ボール箱の 要素数を 入れ
    ここから
        左側要素番号が 右側要素番号より 大きい
        ならば 打ち切り
        つぎに
        左側要素番号と 右側要素番号を 加え 2で 割って 中央要素番号に 入れる
        段ボール箱(中央要素番号)が 探索対象のボール数に 等しい?
        ならば 中央要素番号を 数値表示し 「つ目にあった!」を 一行表示し 打ち切り
        さもなければ 中央要素番号を 数値表示し 「つ目にはない」を 一行表示し
        つぎに
        段ボール箱(中央要素番号)が 探索対象のボール数より 小さい?
        ならば 中央要素番号に 1を 加えて 左側要素番号に 入れる
        さもなければ 中央要素番号を 右側要素番号に 入れる
        つぎに
    繰り返す。

メインとは  (・ → ・)
    段ボール箱にボールの数を増やしながら隠す
    段ボール箱を二分探索する。

お題のソースコードをコンパイル

では、コンパイルしてみます。無事に成功しました。

C:\developments\vscode\mind9\algorithm>mind binarysearch file

日本語プログラミング言語 Mind Version 8.07 for Windows
          Copyright(C) 1985 Scripts Lab. Inc.
コンパイル中 .. 終了
Coping.. c:\pmind\bin\mindex.exe --> binarysearch.exe

実行結果

実行結果です。

\developments\vscode\mind9\algorithm>binarysearch
探索対象のボール数 16
要素番号  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
ボール数  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 

8つ目にはない
12つ目にはない
14つ目にはない
13つ目にあった!

線形探索の場合は13回反復して探索完了のところ、4回の反復で完了していることがわかります。

少しソースコード上で探索するボール数を変更して実行してみます。
最後の15個目に格納されている18を探索します。

C:\developments\vscode\mind9\algorithm>binarysearch
探索対象のボール数 18
要素番号  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
ボール数  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 

8つ目にはない
12つ目にはない
14つ目にはない
15つ目にあった!

こちらも4回目で探索完了です。
次に先頭に格納されている4を探索します。

C:\developments\vscode\mind9\algorithm>binarysearch
探索対象のボール数 4
要素番号  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 
ボール数  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 

8つ目にはない
4つ目にはない
2つ目にはない
1つ目にあった!

この場合は線形探索は1回で探索しますが、二分探索の場合は4回目となります。

おわりに

いかがでしたでしょうか?わたしはわが国に母語によるプログラミング言語が存在することを誇りに思っております。言語は文化。こんにちの日本語のポップスやアニメソングなどが海外でそのまま歌われるような近況を鑑みますと、純然たる技術基盤として超強力な米欧発プログラミング言語勢と存在意義を争うこともなく、日本語の文化として海外でも日本語プログラミング言語の愛される日が来るのやもしれません。

  1. 演算子を被演算子の中間に記述する中置記法 1 + 2、前に記述する前置記法(ポーランド記法)+ 1 2、後に記述する後置記法(逆ポーランド記法)1 2 +がある。日本語は1と 2を 足す。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?