Skip to content
Twitter
edu-IT Practical Labo
【名古屋】
edu-IT Practical Laboedu-IT Practical Labo
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact
 
  • Home
  • Blog
  • Services
    • Programming Typing
    • Basic WEB-TECH Lesson
    • IT-SKILL Training
  • Contact

Pythonで学び直すアルゴリズムの基礎①~フローチャートと代表的なソートを理解しよう

You are here:
  1. Home
  2. edu-IT
  3. Pytho…
6月252022
edu-ITIT BasicPython

近年、初等・中等教育課程でプログラミングの授業が行われるようになったこともあり、「どのように問題を解いていくか?」という処理手順(=アルゴリズム)を考える視点が注目されています。世の中のニーズに合わせて、Pythonなどのプログラミングを通してモノづくりに興味を持つ生徒・学生も増えることでしょう。

 
今回はアルゴリズムについての取っ掛かりとして、ちょっとした頭の体操をしていければと考えています。具体的には、基礎となるフローチャートの書き方と代表的な整列(sort)アルゴリズムについて考えていきます。基礎知識を学ぶことで、開発に対する素養を身に着けていきましょう。

 
それでは、アルゴリズムの基本的な知識を確認していきたいと思います。

演習問題のダウンロードはこちらから

 

Contents

  • 1 アルゴリズムとは?
  • 2 フローチャートの問題演習
  • 3 バブルソート(基本交換法)
  • 4 選択ソート(単純選択法)

アルゴリズムとは?

 

アルゴリズムとは、「問題を解くための処理手順を定式化したもの」

アルゴリズムの記述法としては、フローチャート(流れ図)が有名です。以下の記号を用いて、処理内容を理解しやすいように簡潔に記述します。

 

 
アルゴリズムは一般的に上から下、左から右に処理が流れていき、構造としては、「順次構造」「選択構造」「繰り返し構造」があります。

 

・順次構造:各計算や操作が直線的につながっている構造



 

・選択構造:条件により処理内容が分かれる構造



 

・繰り返し構造:終了条件を満たすまで、一連の処理を繰り返すという構造



 

フローチャートの問題演習

 

問題

以下のアルゴリズム(問題を解くための処理手順)をフローチャートで表してください。

1)「金曜日は夕食の準備をしない。」
2)「同じ文字列を5回表示する。」

 
1に関しての解答例

 

条件(金曜日であるか)によって処理を分岐させます。「選択構造の記号」を用いて、フローチャートを記載していきます。



 
2に関しての解答例

 
5回文字列を表示するという処理を繰り返す構造を、フローチャートで記載していきます。



 

⇒ ここで、添付資料「フローチャート作成」シートにある演習問題を解いてみましょう

参考URL:
http://open.shonan.bunkyo.ac.jp/~ohtan/jugyo/old/old2007aki/C-flowchart-2007.pdf

 

演習                   

 下図のような迷路がある。次の4つのルールに従って、ゴールに達するまでのアルゴリズムをフローチャートで表しなさい。

・使用できる処理は、前に進む(1マス進む)、右に90°向く、左に90°向く、ドアを開けるの4つである。

・ゴールにはドアが付いている。また閉まっている場合は、ドアを開けてから入る必要がある。ドアの前に行くまで、ドアが開いているか閉まっているかはわからない。

・ドアが開いている状態で、「前に進む」と到着となる。

3つの基本制御構造をすべて使用するものとする。

 

文研出版『教科書ガイド 実教出版版 情報Ⅰ』より抜粋

 

次は、代表的な整列アルゴリズムについて、Pythonで考えていきましょう。

 

バブルソート(基本交換法)

バブルソートは、データの端から順番に隣り合ったデータ同士を比較し、順番が逆ならば入れ替える操作を繰り返すことによって整列をします。

 


 

問題

 以下のリストについてバブルソートを用いて、昇順に並び替えてください。

 target_list = [6,3,4,8,7,4,1,9,2]

 
下にあるソースコードを実行することで、問題のリストを昇順に並び替えることができます。

# バブルソート
target_list = [6,3,4,8,7,4,1,9,2]

# i:0=> target_listの長さを超えない範囲でループ(インデックス)
for i in range(len(target_list)):
    # j:1回のソートで配列の何番目まで行くか
    # 1回目は右端、ソートする範囲を狭める
    for j in range(0, len(target_list) -i -1):
        if target_list[j] > target_list[j+1]:
            target_list[j],target_list[j+1] = target_list[j+1],target_list[j]
            
print(target_list)

⇒ ここで、添付資料「バブルソート」シートにある演習問題を解いてみましょう

 

選択ソート(単純選択法)

 

 選択ソートは、データの中で最小値(または最大値)を探して端から順に格納することで並び替えを行う整列方法です。次のようなアルゴリズムで未整列の配列A[j] ( j=1,2,3 …, n )を整列します。

 
・A[1] ~A[n] の中から最小の要素を探し、それをA[1] とする。
・A[2] ~A[n] の中から最小の要素を探し、それをA[2] とする。
・同様に、範囲を狭めながら処理を繰り返す。

 


 

問題

 以下のリストについて選択ソートを用いて、昇順に並び替えてください。

 target_list = [6,3,4,8,7,4,1,9,2]

 
下にあるソースコードを実行することで、問題のリストを昇順に並び替えることができます。

#選択ソート
target_list = [6,3,4,8,7,4,1,9,2]

# i: 0 => target_listの長さを超えない範囲でループ(インデックス)
for i in range(len(target_list)):

    #idx_min :i以上の最小値の入っている配列の添え字(インデックス)
    idx_min = i
    # j: i+1 => target_listの長さを超えない範囲でループ
    for j in range(i+1, len(target_list)):
        if target_list[idx_min] > target_list[j]:
            idx_min = j
    
    #target_listのiとidx_minの箇所を入れ替え
    target_list[i], target_list[idx_min] = target_list[idx_min], target_list[i]
    
print(target_list)

 

⇒ ここで、添付資料「選択ソート」シートにある演習問題を解いてみましょう

====================================
業務上、問題解決の手順としてアルゴリズムを意識する場面がある方にとっては、身近な話題でも、はじめてプログラミングを学ぶ方にとっては、今回のような知識を積み上げられる機会があると取っ掛かりやすく感じるのではないでしょうか。自身のPCに環境がある方は、簡単に動かすことができますので、この機会にアルゴリズムにも触れてみようかなと思っていただければ幸いです。

以上となります。

参考文献:

・文研出版編集部『教科書ガイド 実教出版版 情報Ⅰ』

Category: edu-IT, IT Basic, PythonBy semi3del2022年6月25日Leave a comment
Share this post
Share with Google+Share with FacebookShare with Twitter

Author: semi3del

Post navigation

PreviousPrevious post:PySimpleGUIでGUIツール作成~Plotlyで月間支出グラフを出力してみようNextNext post:PySimpleGUIでGUIツール作成~取り込んだcsvファイルのデータをSQLiteデータベースに登録してみよう

Related Posts

CodeSandboxでReactのTodoリストを作成してみよう
2025年3月31日
Pythonライブラリ「Scrapy」でスクレイピング~Webサイトからデータを取得してみよう
2025年1月27日
CodeSandboxでReactのフォーム部品を操作してみよう
2024年11月19日
はじめてのLambda~関数のサンプルを作ってみよう
2024年9月18日
GitHub Actions入門~Cloud9でGitHub ActionsのHelloWorldを実行してみよう
2023年11月28日
Web APIをPythonで使ってみる~Fast APIの基礎
2023年9月25日

コメントを残す コメントをキャンセル

Your email address will not be published. Required fields are marked *

Post comment

最近の投稿
  • CodeSandboxでReactのTodoリストを作成してみよう
  • Pythonライブラリ「Scrapy」でスクレイピング~Webサイトからデータを取得してみよう
  • CodeSandboxでReactのフォーム部品を操作してみよう
  • はじめてのLambda~関数のサンプルを作ってみよう
  • Canva入門~テンプレートでプレゼン資料を作成してみよう
アーカイブ
  • 2025年3月
  • 2025年1月
  • 2024年11月
  • 2024年9月
  • 2024年8月
  • 2024年6月
  • 2024年4月
  • 2024年1月
  • 2023年11月
  • 2023年9月
  • 2023年7月
  • 2023年5月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年6月
  • 2022年5月
  • 2022年3月
  • 2022年1月
  • 2021年11月
  • 2021年9月
  • 2021年7月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年1月
  • 2020年11月
  • 2020年9月
  • 2020年6月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2017年7月