<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>アルゴリズム | ITドカタ</title>
	<atom:link href="https://blog.it-see.net/it-dokata/category/algorithm/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.it-see.net/it-dokata</link>
	<description>ICT関連の役立つかもしれない情報を発信するブログ。</description>
	<lastBuildDate>Fri, 17 Apr 2020 10:23:10 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.10</generator>

<image>
	<url>https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/05/cropped-job_it_dokata2-32x32.png</url>
	<title>アルゴリズム | ITドカタ</title>
	<link>https://blog.it-see.net/it-dokata</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>アルゴリズム &#8211; 二分探索法(binary search:バイナリサーチ)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/binary-search/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:23:09 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1537</guid>

					<description><![CDATA[目次 二分探索法(バイナリサーチ)について二分探索法のイメージサンプルコードTclPython 二分探索法(バイナリサーチ)について 二分探索法は、探索の対象となるデータが、あらかじめ昇順または降順に整列されている場合に [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img fetchpriority="high" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">二分探索法(バイナリサーチ)について</a></li><li><a href="#toc2" tabindex="0">二分探索法のイメージ</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">二分探索法(バイナリサーチ)について</span></h2>



<p>二分探索法は、探索の対象となるデータが、あらかじめ昇順または降順に整列されている場合に使うことができるアルゴリズムです。</p>



<p>このアルゴリズムは、次のような手順で目的の値の位置を調べていきます。</p>



<ol class="wp-block-list"><li>探索する値とデータ列の真ん中にある要素の値を比較します。</li><li>その大小関係により、探索する値が、中央より前半または後半にあるか絞り込みます。</li><li>探索する値と絞り込んだデータ列の真ん中にある要素の値を比較します。</li></ol>



<p>このように探索する範囲を半分ずつ狭めていくことで、目的の値がある位置を特定していきます。</p>



<p>データ列の後方部分でも高速に探索できるので、データ数が多い探索にはリニアサーチよりも有利です。</p>



<p>しかし、データ数が少ない場合や、目的の値が先頭付近にある場合は、リニアサーチのほうが速く探索できます</p>



<p>また、整列されていないデータの探索にはバイナリサーチは使えません。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">二分探索法のイメージ</span></h2>



<p>以下の図は二分探索法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[二分探索法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" width="870" height="585" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法.png" alt="二分探索法(binary search:バイナリサーチ)のイメージ" class="wp-image-1539" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法.png 870w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-300x202.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-768x516.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/二分探索法-160x107.png 160w" sizes="(max-width: 870px) 100vw, 870px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p>二分探索法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：binary-search.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 二分探索法(binary search:バイナリサーチ)

#  arr   : 数値リスト
# left   : 左端要素のindex
# right  : 右端要素のindex
# center : 中央要素のindex
# target : 探索値

array set arr {0 11 1 13 2 24 3 26 4 35
                5 37 6 46 7 49 8 54 9 68}
parray arr

puts -nonewline "探索値を入力する。: "
flush stdout

set target [gets stdin]

set left 0
set right [expr [array size arr] - 1]

while {$left &lt;= $right} {
    set center [expr ($left + $right)/2]  ;# 要素の真ん中の位置
    if {$arr($center) == $target} {
        puts "探索値: $target は0から数えて $center 番目にあります。"
        exit
    } elseif {$arr($center) &lt; $target} {
        set left [expr $center + 1]
    } else {
        set right [expr $center - 1]
    }
}
puts "探索値: $target は見つかりませんでした。"

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./binary-search.tcl
arr(0) = 11
arr(1) = 13
arr(2) = 24
arr(3) = 26
arr(4) = 35
arr(5) = 37
arr(6) = 46
arr(7) = 49
arr(8) = 54
arr(9) = 68
探索値を入力する。: 54
探索値: 54 は0から数えて 8 番目にあります。

$ ./binary-search.tcl
arr(0) = 11
arr(1) = 13
arr(2) = 24
arr(3) = 26
arr(4) = 35
arr(5) = 37
arr(6) = 46
arr(7) = 49
arr(8) = 54
arr(9) = 68
探索値を入力する。: 55
探索値: 55 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：binary-search.py]</p>



<pre class="python">#!/usr/bin/env python3

import sys

# 二分探索法(binary search:バイナリサーチ)

#  arr   : 数値リスト
#   n    : 要素数
# left   : 左端要素のindex
# right  : 右端要素のindex
# center : 中央要素のindex
# target : 探索値

arr = [11, 13, 24, 26, 35, 37, 46, 49, 54, 68]
print(arr)

target = input('探索値を入力する。: ')
target = int(target)    # 文字列から数値に変換

n = len(arr)
left = 0
right = n-1

while left &lt;= right:
    center = (left + right) // 2    # 要素の真ん中の位置
    if arr[center] == target:
        print(f'探索値:{target} は0から数えて {center} 番目にあります。')
        sys.exit()
    elif  arr[center] &lt; target:
        left = center + 1
    else:
        right = center - 1

print(f'探索値:{target} は見つかりませんでした。')

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./binary-search.py
[11, 13, 24, 26, 35, 37, 46, 49, 54, 68]
探索値を入力する。: 54
探索値:54 は0から数えて 8 番目にあります。

$ ./binary-search.py
[11, 13, 24, 26, 35, 37, 46, 49, 54, 68]
探索値を入力する。: 55
探索値:55 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 線形探索法(linear search:リニアサーチ)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/linear-search/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:18:34 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1528</guid>

					<description><![CDATA[目次 線形探索法(リニアサーチ)について線形探索法のイメージサンプルコードTclPython 線形探索法(リニアサーチ)について 線形探索法は、データ列の先頭から順番に調べて目的の要素を探すアルゴリズムです。 探索のイメ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">線形探索法(リニアサーチ)について</a></li><li><a href="#toc2" tabindex="0">線形探索法のイメージ</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">線形探索法(リニアサーチ)について</span></h2>



<p>線形探索法は、データ列の先頭から順番に調べて目的の要素を探すアルゴリズムです。</p>



<p>探索のイメージが一直線(linear)に探していく様子からリニアサーチと呼ばれています。</p>



<p>単純でわかりやすいアルゴリズムですが、探索の効率はよくありません。データ数が多くなればなるほど、後方部分の探索に時間がかかります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">線形探索法のイメージ</span></h2>



<p>以下の図は線形探索法を使って探索値を探し出す様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[線形探索法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="861" height="583" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法.png" alt="線形探索法(リニアサーチ)のイメージ" class="wp-image-1532" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法.png 861w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-300x203.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-768x520.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/線形探索法-160x107.png 160w" sizes="(max-width: 861px) 100vw, 861px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p>線形探索法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：linear-search.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 線形探索法(linear search:リニアサーチ)

#  arr   : 数値リスト
#   n    : 要素数
#   i    : 探索する要素の位置
# target : 探索値

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

parray arr

puts -nonewline "探索値を入力する。: "
flush stdout

set target [gets stdin]

set i 0

while {$i &lt; $n} {
    if {$arr($i) == $target} {
        puts "探索値: $target は0から数えて $i 番目にあります。"
        exit
    }
    incr i
}

puts "探索値: $target は見つかりませんでした。"
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./linear-search.tcl
arr(0) = 40
arr(1) = 10
arr(2) = 30
arr(3) = 50
arr(4) = 20
探索値を入力する。: 50
探索値: 50 は0から数えて 3 番目にあります。

$ ./linear-search.tcl
arr(0) = 40
arr(1) = 10
arr(2) = 30
arr(3) = 50
arr(4) = 20
探索値を入力する。: 80
探索値: 80 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：linear-search.py]</p>



<pre class="python">#!/usr/bin/env python3

import sys

# 線形探索法(linear search:リニアサーチ)

#  arr   : 数値リスト
#   n    : 要素数
#   i    : 探索する要素の位置
# target : 探索値

arr = [40, 10, 30, 50, 20]
n = len(arr)

print(arr)

# 探索する値を入力
target = input('探索値を入力する。: ')
target = int(target)    # 文字列から数値に変換

# 探索する(リニアサーチ)
i = 0

while i &lt; n:
    if arr[i] == target:
        print(f'探索値: {target} は0から数えて {i} 番目にあります。')
        sys.exit()

    i += 1

print(f'探索値: {target} は見つかりませんでした。')
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./linear-search.py
[40, 10, 30, 50, 20]
探索値を入力する。: 50
探索値: 50 は0から数えて 3 番目にあります。

$ ./linear-search.py
[40, 10, 30, 50, 20]
探索値を入力する。: 80
探索値: 80 は見つかりませんでした。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 単純挿入法(insertion sort:挿入ソート)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/insertion-sort/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:14:12 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1522</guid>

					<description><![CDATA[目次 単純挿入法(挿入ソート)について単純挿入法のイメージサンプルコードTclPython 単純挿入法(挿入ソート)について 単純挿入法は、未整列のデータの中から要素を順番に取り出して、整列済みのデータ列の適切な位置に挿 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">単純挿入法(挿入ソート)について</a></li><li><a href="#toc2" tabindex="0">単純挿入法のイメージ</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">単純挿入法(挿入ソート)について</span></h2>



<p>単純挿入法は、未整列のデータの中から要素を順番に取り出して、整列済みのデータ列の適切な位置に挿入していくことで整列を行うアルゴリズムです。</p>



<p>挿入ソートの平均的な実行速度はバブルソートと大差はありませんが、ソートを行う前のデータが昇順や降順にある程度並んでいる場合には、高速な処理が期待できます。</p>



<p>挿入ソートは整列済みのデータに、新しい要素を追加して再び整列を行う場合などに使用します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">単純挿入法のイメージ</span></h2>



<p>以下の図は単純挿入法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[単純挿入法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="865" height="587" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法.png" alt="単純挿入法(insertion sort:挿入ソート)のイメージ。" class="wp-image-1525" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法.png 865w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法-300x204.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法-768x521.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純挿入法-120x80.png 120w" sizes="(max-width: 865px) 100vw, 865px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p> 単純挿入法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：insertion-sort.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 単純挿入法(insertion sort:挿入ソート)

#  arr  : 数値リスト
#   n   : 要素数
#   i   : 未整列データの先頭の位置
#  tmp  : 挿入する要素の値
# blank : 空き要素の位置

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

set i 1    ;# 0番目は暫定で整列済みとするので1で初期化する。

while {$i &lt; $n} {
    set tmp $arr($i)
    set blank $i

    # 右にシフトさせる。
    while {$blank &gt; 0 &amp;&amp; $arr([expr $blank -1]) &gt; $tmp} {
        set arr($blank) $arr([expr $blank -1])
        incr blank -1
    }
    # シフト後の空スペースに要素を挿入する。
    set arr($blank) $tmp

    incr i
}
parray arr
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./insertion-sort.tcl
arr(0) = 10
arr(1) = 20
arr(2) = 30
arr(3) = 40
arr(4) = 50
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[補足説明]</p>



<p>右にシフトせさるところは、</p>



<ul class="wp-block-list"><li>blank(空き要素の位置)がゼロより大きい かつ</li><li>arr[blank-1] &gt; tmp の関係が続く間</li></ul>



<p>arr[blank-1]の要素を右にシフトします。</p>



<p>イメージ図でいうところの整列済み(水色)の要素値をarr[blank-1] &gt; tmpの関係が続く間、右に１つずつ移動させます。</p>



<p>イメージ図の４回目の部分を見て頂くとイメージしやすいと思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：insertion-sort.py]</p>



<pre class="python">#!/usr/bin/env python3

# 単純挿入法(insertion sort:挿入ソート)

#  arr  : 数値リスト
#   n   : 要素数
#   i   : 未整列データの先頭の位置
#  tmp  : 挿入する要素の値
# blank : 空き要素の位置

arr = [40, 10, 30, 50, 20]
n = len(arr)

print(arr)

i = 1           # 0番目は暫定で整列済みとするので1で初期化する。

while i &lt; n:
    tmp = arr[i]
    blank = i

    # 右にシフトする。
    while blank &gt; 0 and arr[blank-1] &gt; tmp:
        arr[blank] = arr[blank-1]
        blank = blank-1

    # シフト後の空スペースに要素を挿入する。
    arr[blank] = tmp

    i += 1

print(arr)

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./insertion-sort.py
[40, 10, 30, 50, 20]
[10, 20, 30, 40, 50]
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[補足説明]</p>



<p>右にシフトせさるところは、</p>



<ul class="wp-block-list"><li>blank(空き要素の位置)がゼロより大きい かつ</li><li>arr[blank-1] &gt; tmp の関係が続く間</li></ul>



<p>arr[blank-1]の要素を右にシフトします。</p>



<p>イメージ図でいうところの整列済み(水色)の要素値をarr[blank-1] &gt; tmpの関係が続く間、右に１つずつ移動させます。</p>



<p>イメージ図の４回目の部分を見て頂くとイメージしやすいと思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 単純選択法(selection sort:選択ソート)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/selection-sort/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 10:07:23 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1509</guid>

					<description><![CDATA[目次 単純選択法(選択ソート)について単純選択法のイメージサンプルコードTclPython 単純選択法(選択ソート)について 単純選択法は、以下のような手順で並べ替えていくアルゴリズムです。 データ列の中から一番小さい値 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">単純選択法(選択ソート)について</a></li><li><a href="#toc2" tabindex="0">単純選択法のイメージ</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">単純選択法(選択ソート)について</span></h2>



<p>単純選択法は、以下のような手順で並べ替えていくアルゴリズムです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>データ列の中から一番小さい値を選択し、それを0番目の要素と交換する。<br> 次に、残りのデータ列の中から一番小さい値を選択し、それを1番目の要素と交換する。 <br> これをデータの最後まで繰り返し行う事により、先頭から順に並べ替えていきます。 </p>



<p>一番小さい値を選択しながら整列していくので、単純選択法は選択ソート(selection sort)と呼ばれています。</p>



<p>選択ソートはバブルソートと比較回数は同じですが、各ループでの交換回数が最大１回となっているので選択ソートの方が高速です。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">単純選択法のイメージ</span></h2>



<p>以下の図は単純選択法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[単純選択法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="865" height="585" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法.png" alt="" class="wp-image-1510" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法.png 865w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-300x203.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-768x519.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/04/単純選択法-160x107.png 160w" sizes="(max-width: 865px) 100vw, 865px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p>単純選択法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：selection-sort.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 単純選択法(selection sort:選択ソート)

#      arr : 数値リスト
#        n : 要素数
#      i,j : 要素のindex
#      tmp : 交換用
# indexMin : 最小値の位置

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

set i 0    ;# 外側のループカウンタ。

while {$i &lt; $n - 1} {

    set indexMin $i        ;# i番目を暫定で最小値とする。
    set j [expr $i + 1]    ;# 内側のループカウンタ。

    # 最小値の位置を探す。
    # このループでindexMinには未整列中の最小値の位置がセットされる。
    while {$j &lt; $n} {
        if {$arr($j) &lt; $arr($indexMin)} {
            set indexMin $j
        }
        incr j
    }

    # 最小値とi番目の値を交換する。
    set tmp $arr($i)
    set arr($i) $arr($indexMin)
    set arr($indexMin) $tmp

    incr i
}
parray arr
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./selection-sort.tcl
arr(0) = 10
arr(1) = 20
arr(2) = 30
arr(3) = 40
arr(4) = 50
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：selection-sort.py]</p>



<pre class="python">#!/usr/bin/env python3

# 単純選択法(selection sort:選択ソート)

#      arr : 数値リスト
#        n : 要素数
#      i,j : 要素のindex
#      tmp : 交換用
# indexMin : 最小値の位置

arr = [40, 10, 30, 50, 20]
print(arr)

n = len(arr)    # 要素数
i = 0           # 外側のループカウンタ。

while i &lt; n-1:
    indexMin = i    # i番目を暫定で最小値とする。
    j = i+1         # 内側のループカウンタ。

    # 最小値の位置を探す。
    # このループでindexMinには未整列中の最小値の位置がセットされる。
    while j &lt; n:
        if arr[j] &lt; arr[indexMin]:
            indexMin = j

        j += 1

    # 最小値とi番目の値を交換する。
    tmp = arr[i]
    arr[i] = arr[indexMin]
    arr[indexMin] = tmp

    i += 1

print(arr)
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./selection-sort.py
[40, 10, 30, 50, 20]
[10, 20, 30, 40, 50]
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 単純交換法(bubble sort:バブルソート)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/bubble-sort/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 09:57:54 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1502</guid>

					<description><![CDATA[目次 単純交換法(バブルソート)について単純交換法のイメージサンプルコードTclPython 単純交換法(バブルソート)について 単純交換法は、隣り合ったデータの大小を比較して交換するという作業を繰り返して行い、最終的に [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">単純交換法(バブルソート)について</a></li><li><a href="#toc2" tabindex="0">単純交換法のイメージ</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">単純交換法(バブルソート)について</span></h2>



<p>単純交換法は、隣り合ったデータの大小を比較して交換するという作業を繰り返して行い、最終的にデータを昇順または降順に並べ替えるアルゴリズムです。</p>



<p>このアルゴリズムは、並べ替える様子が、水中から水面へ浮かび上がっていく泡のように見えることから、バブルソート(bubble sort)と呼ばれています。</p>



<p>バブルソートの説明を先頭の要素から順番に比較する方法で説明しているサイトや本がありますが、泡のイメージを出す為に水の底(末尾)から水面(先頭)に向かって順番に比較する方法で説明します。</p>



<p>小さい数字を上へ持ち上げていくイメージです。</p>



<p>どちらの方法も考え方は同じですが、末尾の要素から先頭の要素に向かって順番に比較していく方法を説明しているものが多いように思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">単純交換法のイメージ</span></h2>



<p>以下の図は単純交換法を使ってデータを小さい順(昇順)に並べ替える様子のイメージです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[単純交換法のイメージ]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="869" height="584" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法.png" alt="単純交換法(bubble sort:バブルソート)のイメージ" class="wp-image-1505" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法.png 869w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-300x202.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-768x516.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2020/03/単純交換法-160x107.png 160w" sizes="(max-width: 869px) 100vw, 869px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p>単純交換法のアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：bubble-sort.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 単純交換法(bubble sort:バブルソート)

# arr : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# tmp : 交換用
# last: 確定した最小値を入れる位置

array set arr {0 40 1 10 2 30 3 50 4 20}
set n [array size arr]

set last 0

while {$last &lt; $n - 1} {
    set i [expr $n - 1]
    while {$i &gt; $last} {

         # 隣り合ったデータの大小を比較して交換する。
        if {$arr([expr $i -1]) &gt; $arr($i)} {
            set tmp $arr([expr $i -1])
            set arr([expr $i -1]) $arr($i)
            set arr($i) $tmp
        }
        incr i -1
    }
    incr last
}
parray arr
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./bubble-sort.tcl
arr(0) = 10
arr(1) = 20
arr(2) = 30
arr(3) = 40
arr(4) = 50
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：bubble-sort.py]</p>



<pre class="python">#!/usr/bin/env python3

# 単純交換法(bubble sort:バブルソート)

# arr : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# tmp : 交換用
# last: 確定した最小値を入れる位置

arr = [40, 10, 30, 50, 20]
n = len(arr)

print(arr)

last = 0

while last &lt; n-1:
    i = n-1
    while i &gt; last:

        # 隣り合ったデータの大小を比較して交換する。
        if arr[i-1] &gt; arr[i]:
            tmp = arr[i-1]
            arr[i-1] = arr[i]
            arr[i] = tmp

        i -= 1

    last += 1

print(arr)
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./bubble-sort.py
[40, 10, 30, 50, 20]
[10, 20, 30, 40, 50]
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリズム &#8211; 素数判定</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/prime-number/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 09:49:31 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1472</guid>

					<description><![CDATA[目次 素数について素数の判定をするアルゴリズムすべてのパターンを試す判定方法偶数を除外する判定方法サンプルコードTclPython 素数について 素数とは、以下の条件を満たす数値です。 1より大きい数値　かつ 1と自分自 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">素数について</a></li><li><a href="#toc2" tabindex="0">素数の判定をするアルゴリズム</a><ol><li><a href="#toc3" tabindex="0">すべてのパターンを試す判定方法</a></li><li><a href="#toc4" tabindex="0">偶数を除外する判定方法</a></li></ol></li><li><a href="#toc5" tabindex="0">サンプルコード</a><ol><li><a href="#toc6" tabindex="0">Tcl</a></li><li><a href="#toc7" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">素数について</span></h2>



<p>素数とは、以下の条件を満たす数値です。</p>



<ul class="wp-block-list"><li>1より大きい数値　かつ</li><li>1と自分自身以外の数値では割れない数値。</li></ul>



<p>例<br>「5」は1と5以外の数値で割れないので素数です。<br>「6」は1,2,3,6で割れるので素数ではない。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>参考：<a rel="noopener" aria-label="素数の一覧 (新しいタブで開く)" href="https://ja.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0%E3%81%AE%E4%B8%80%E8%A6%A7" target="_blank">素数の一覧</a></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">素数の判定をするアルゴリズム</span></h2>



<p>素数を判定するアルゴリズムはいくつかありますが、単純なアルゴリズムを２つ紹介します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc3">すべてのパターンを試す判定方法</span></h3>



<p>このアルゴリズムは入力した数値を2から入力した数値未満の数で順番に試し割りを行い、割り切れるかどうか確認する方法です。</p>



<p>割り切れた場合、「1と自分自身以外の数値では割れない数値」に合致しないので、素数ではないと判定できます。判定できた時点で反復処理を終了させます。</p>



<p>入力した数値未満の数で割り切れない場合は素数と判定します。</p>



<p>単純なアルゴリズムですが、割り切れるまで順番に試すので低速です。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">偶数を除外する判定方法</span></h3>



<p><a href="https://blog.it-see.net/it-dokata/algorithm/odd-even/" target="_blank" aria-label="奇数と偶数を判定するアルゴリズム (新しいタブで開く)">奇数と偶数を判定するアルゴリズム</a>で説明したように、偶数は2で割り切れることが分かっています。</p>



<p>よって2の倍数(2,4,6,8…)で割る処理を除外します。</p>



<p>2の倍数を除外するにはカウントアップ用の変数を3で初期化しておき+2ずつカウントアップするようにします。</p>



<p>偶数を除外することによりループ回数が半分になるので、その分速くなります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc5">サンプルコード</span></h2>



<p>素数を判定するアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">Tcl</span></h3>



<p>[サンプル：prime-number.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 素数判定(すべてのパターンを試す)

#  num : 数値。
# flag : 素数判定。0:素数。 1:素数ではない。
#   i  : ループカウンタ。 

puts -nonewline "数値を入力してください : "
flush stdout
set num [gets stdin]

set flag 0    ;# 0で初期化。

if {$num &lt; 2} {
    set flag 1        ;# 0,1は素数でない為、除外する。
}

# 2以上の数値を判定。

set i 2

while {$i &lt; $num} {
    if {$num % $i == 0} {
        set flag 1    ;# 割り切れた。
        break         ;# ループを抜ける。
    }
    incr i
}

# 判定結果を出力する。

if {$flag == 0} {
    puts "$num は素数です。"
} else {
    puts "$num は素数ではありません。"
}
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./prime-number.tcl
数値を入力してください : 11
11 は素数です。

$ ./prime-number.tcl
数値を入力してください : 12
12 は素数ではありません。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[サンプル：prime-number2.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 素数判定(偶数を除外する)

#  num : 数値。
# flag : 素数判定。0:素数。 1:素数ではない。
#   i  : ループカウンタ。 

puts -nonewline "数値を入力してください : "
flush stdout
set num [gets stdin]

set flag 0    ;# 0で初期化。

# 0,1,2及び偶数の判定

if {$num &lt; 2} {
    set flag 1         ;# 0,1は素数でない為、除外する。
} elseif {$num == 2} {
    set flag 0         ;# 2は素数。
} elseif {$num % 2 == 0} {
    set flag 1         ;# 偶数は素数でない為、除外する。
} 

# 3以上の奇数を判定する。

set i 3
while {$i &lt; $num} {
    if {$num % $i == 0} {
        set flag 1    ;# 割り切れた。
        break         ;# ループを抜ける。
    }
    incr i +2
}

# 判定結果を出力する。

if {$flag == 0} {
    puts "$num は素数です。"
} else {
    puts "$num は素数ではありません。"
}
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./prime-number2.tcl
数値を入力してください : 11
11 は素数です。

$ ./prime-number2.tcl
数値を入力してください : 12
12 は素数ではありません。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc7">Python</span></h3>



<p>[サンプル：prime-number.py]</p>



<pre class="python">#!/usr/bin/env python3

# 素数判定(すべてのパターンを試す)

#  num : 数値。
# flag : 素数判定。0:素数。 1:素数ではない。
#   i  : ループカウンタ。 

num = input('数字を入力してください。: ')
num = int(num)    # 文字列から数値に変換

flag = 0    # 0で初期化。

if num &lt; 2:
    flag = 1    # 0,1は素数でない為、除外する

# 2以上の数値を判定。

i = 2

while i &lt; num:
    if num % i == 0:
        flag = 1    # 割り切れた。
        break       # ループを抜ける。

    i += 1

# 判定結果を出力する。

if flag == 0:
    print(num,'は素数です。')
else:
    print(num,'は素数ではありません。')
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./prime-number.py
数字を入力してください。: 11
11 は素数です。

$ ./prime-number.py
数字を入力してください。: 12
12 は素数ではありません。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[サンプル：prime-number2.py]</p>



<pre class="python">#!/usr/bin/env python3

# 素数判定(偶数を除外する)

#  num : 数値。
# flag : 素数判定。0:素数。 1:素数ではない。
#   i  : ループカウンタ。 

num = input('数字を入力してください。: ')
num = int(num)    # 文字列から数値に変換

flag = 0    # 0で初期化。

# 0,1,2及び偶数の判定

if num &lt; 2:
    flag = 1    # 0,1は素数でないため除外する。
elif num == 2:
    flag = 0    # 2は素数。
elif num % 2 == 0:
    flag = 1    # 偶数は素数でないため除外する。

# 3以上の奇数を判定する。

i = 3

while i &lt; num:
    if num % i == 0:
        flag = 1    # 割り切れた。
        break       # ループを抜ける。

    i += 2

# 判定結果を出力する。

if flag == 0:
    print(num,'は素数です。')
else:
    print(num,'は素数ではありません。')

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./prime-number2.py
数字を入力してください。: 11
11 は素数です。

$ ./prime-number2.py
数字を入力してください。: 12
12 は素数ではありません。

</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリスム &#8211; 奇数と偶数の判定をする</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/odd-even/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 09:36:29 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1466</guid>

					<description><![CDATA[目次 奇数と偶数の定義について奇数と偶数の判定方法サンプルコードTclPython 奇数と偶数の定義について ゼロは偶数か？ 奇数と偶数の定義にはゼロを含めるかどうかで２つの考え方があります。 ＜その１＞ 偶数は自然数の [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">奇数と偶数の定義について</a></li><li><a href="#toc2" tabindex="0">奇数と偶数の判定方法</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">奇数と偶数の定義について</span></h2>



<p><strong>ゼロは偶数か？</strong></p>



<p>奇数と偶数の定義にはゼロを含めるかどうかで２つの考え方があります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>＜その１＞</p>



<ul class="wp-block-list"><li>偶数は自然数の中で２で割り切れる数。</li><li>奇数は自然数の中で２で割り切れない数。</li></ul>



<p>自然数とは、ゼロやマイナスの数ではなく１から始まる数（正の整数）の事です。</p>



<p>この定義だと、「ゼロは偶数でも奇数でもない」という事になります。</p>



<p>※自然数にゼロを含めるという考えもあるようです。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>＜その２＞</p>



<ul class="wp-block-list"><li>偶数は２で割り切れる整数。</li><li>奇数は２で割り切れない整数。</li></ul>



<p>この定義だと 「0÷2=0」となり割り切れるので「ゼロは偶数」という事になります。-2,-4も偶数です。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>物理的に考えると「ゼロは何も無い(存在しない)」という事なので、物理的に存在しないものを割ることは出来ないので＜その１＞のほうが正解のように思えます。</p>



<p>しかし、数学的観点で考えると＜その２＞のほうが正解だそうです。</p>



<p>小学校の算数でもゼロは偶数と教えているそうです。</p>



<p>以上の事から、ゼロは偶数という定義をした場合の奇数と偶数を判定するアルゴリズムを紹介します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">奇数と偶数の判定方法</span></h2>



<p>奇数か偶数か判定するには「%」演算子を使います。</p>



<p>「%」演算子は剰余(ジョウヨ)を計算します。剰余とは、割り算で割り切れなかった余りです。</p>



<p><strong><span class="marker-under">2で割って余りが出たら奇数、割り切れたら偶数です。</span></strong></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p>奇数と偶数を判定するアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：odd-even.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 奇数と偶数の判定

puts -nonewline stdout "数字を入力してください："
flush stdout

set num [gets stdin]

if {$num % 2 == 0} {
    puts "入力した数字は偶数です。"
} else {
    puts "入力した数字は奇数です。"
}
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./odd-even.tcl
数字を入力してください：11
入力した数字は奇数です。
$ ./odd-even.tcl
数字を入力してください：12
入力した数字は偶数です。
$ ./odd-even.tcl
数字を入力してください：0
入力した数字は偶数です。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：odd-even.py]</p>



<pre class="python">#!/usr/bin/env python3

# 奇数と偶数の判定

num = input('数字を入力してください。: ')
num = int(num)    # 文字列から数値に変換

if num % 2 == 0:
    print('入力した数字は偶数です。')
else:
    print('入力した数字は奇数です。')

</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./odd-even.py
数字を入力してください。: 11
入力した数字は奇数です。

$ ./odd-even.py
数字を入力してください。: 12
入力した数字は偶数です。

$ ./odd-even.py
数字を入力してください。: 0
入力した数字は偶数です。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリスム &#8211; 最大値を探す。(一番大きい値はどれ？)</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/maximum-value/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 09:29:28 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1455</guid>

					<description><![CDATA[目次 要素の中から最大値を探すアルゴリズムのイメージサンプルコードTclPython 要素の中から最大値を探す 要素1, 要素2, 要素3, ・・・ 要素n まずは、人間がn個の要素の中から最も大きい値を探すには、どのよ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">要素の中から最大値を探す</a></li><li><a href="#toc2" tabindex="0">アルゴリズムのイメージ</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">要素の中から最大値を探す</span></h2>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<pre class="nohighlight"><strong>要素1, 要素2, 要素3, ・・・ 要素n</strong>
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>まずは、人間がn個の要素の中から最も大きい値を探すには、どのような手順で探すか考えてみましょう。</p>



<ol class="wp-block-list"><li>最初に要素1と要素2を比較して大きい値の方を控える。</li><li>次に控えた値と要素3を比較して大きい値の方を控える。</li><li>さらに2で控えた値と要素4を比較して大きい値の方を控える。</li></ol>



<p>これを要素nまで繰り返すと一番大きい値を探し出せます。</p>



<p>このアルゴリズムでは、1つ目の処理と2つ目以降の処理に違いがあります。1つ目の処理では<strong>要素1と要素2を比較</strong>しています。2つ目以降の処理では<strong>控えた値と要素を比較</strong>しています。</p>



<p>2つ目以降の処理は同じ手続きなので、この部分を反復処理させれば要素の個数が増えても対応できそうですね。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>プログラミングのアルゴリズムを考える場合、もう一工夫してアルゴリズムをすっきりさせます。</p>



<ol class="wp-block-list"><li>まず、要素1が最大値と仮定して変数maxに代入します。</li><li>次に、変数maxと要素2を比較して要素2の値のほうが大きい場合、要素2の値を変数maxに代入します。</li></ol>



<p>2の処理を要素nまで繰り返すと変数maxには最も大きい値がセットされます。</p>



<p>最小値を探す手順も、探す値が最大値か最小値かの違いだけで同じ手順になります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">アルゴリズムのイメージ</span></h2>



<p>最大値を探すイメージは以下の図のようになります。</p>



<p style="text-align:center">[最大値を探す]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="869" height="583" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す.png" alt="最大値を探すイメージ" class="wp-image-1458" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す.png 869w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す-300x201.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す-768x515.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す-160x107.png 160w" sizes="(max-width: 869px) 100vw, 869px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>要素値の範囲が2桁の整数値で構成されている等、要素の範囲が決まっている場合、さらにアルゴリズムをすっきりさせる事ができます。</p>



<p>例えば、最大値を0で初期化する、最小値を100で初期化するなど要素の範囲外の値をセットする。</p>



<p style="text-align:center">[最大値を探す2]</p>



<div class="wp-block-image"><figure class="aligncenter"><img loading="lazy" decoding="async" width="867" height="588" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す2.png" alt="最大値を探すイメージ２" class="wp-image-1459" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す2.png 867w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す2-300x203.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す2-768x521.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/最大値を探す2-120x80.png 120w" sizes="(max-width: 867px) 100vw, 867px" /></figure></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>foreachなど便利な制御構造をサポートしているプログラミング言語では最大値を0で初期化するやり方のほうがすっきり記述できると思います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p>最大値を探すアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：max.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# n個の要素の中から最大値を探す。

# arr : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# max : 最大値

array set arr {0 31 1 22 2 53 3 14 4 45}
set n [array size arr]

set max $arr(0)    ;# 要素0の値を暫定で最大値とする
set i 1            ;# 1で初期化

while {$i &lt; $n} {
    if {$arr($i) &gt; $max} {
        set max $arr($i)
    }
    incr i
}

parray arr
puts "一番大きい値は $max です。"
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./max.tcl
arr(0) = 31
arr(1) = 22
arr(2) = 53
arr(3) = 14
arr(4) = 45
一番大きい値は 53 です。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[リスト、foreachを使った例：max2.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# n個の要素の中から最大値を探す。

# lst : 数値リスト
# max : 最大値

set lst {31 22 53 14 45}

set max 0    ;# 数値0を暫定で最大値とする

foreach x $lst {
    if {$x &gt; $max} {
        set max $x
    }
}


puts "数値リスト: $lst"
puts "一番大きい値は $max です。"
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./max2.tcl
数値リスト: 31 22 53 14 45
一番大きい値は 53 です。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：max.py]</p>



<pre class="python">#!/usr/bin/env python3

# n個の要素の中から最大値を探す。

# lst : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# max : 最大値

lst = [31, 22, 53, 14, 45]
n = len(lst)

max = lst[0] # 要素0の値を暫定で最大値とする
i = 1        #  1で初期化

while i &lt; n:
    if lst[i] &gt; max:
        max = lst[i]

    i += 1

print(lst)
print('一番大きい値は {0} です。'.format(max))
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./max.py
[31, 22, 53, 14, 45]
一番大きい値は 53 です。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[forを使った例：max2.py]</p>



<pre class="python">#!/usr/bin/env python3

# n個の要素の中から最大値を探す。

# lst : 数値リスト
# max : 最大値

lst = [31, 22, 53, 14, 45]

max = 0    # 数値0を暫定で最大値とする

for x in lst:
    if x &gt; max:
        max = x

print(lst)
print('一番大きい値は {0} です。'.format(max))
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./max2.py
[31, 22, 53, 14, 45]
一番大きい値は 53 です。
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリスム &#8211; 合計と平均値を計算する</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/sum-and-average/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 09:19:56 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1429</guid>

					<description><![CDATA[目次 数値の合計を計算する合計を計算するイメージ平均値を計算するサンプルコードTclPython 数値の合計を計算する 複数の数値を合計するには、以下のように単純に数値を足し算すれば計算できます。 sum = 値1+値2 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">数値の合計を計算する</a></li><li><a href="#toc2" tabindex="0">合計を計算するイメージ</a></li><li><a href="#toc3" tabindex="0">平均値を計算する</a></li><li><a href="#toc4" tabindex="0">サンプルコード</a><ol><li><a href="#toc5" tabindex="0">Tcl</a></li><li><a href="#toc6" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">数値の合計を計算する</span></h2>



<p>複数の数値を合計するには、以下のように単純に数値を足し算すれば計算できます。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:left;padding-left: 40px;"><strong>sum = 値1+値2+値3+値4+値5</strong></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>これでも構わないのですが、数が100個、1000個のように多くなれば、足し算する処理を書くのに手間がかかり大変です。</p>



<p>そこで、足し算する処理に反復処理を使います。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>例えば、人間が合計を計算する場合、どのような手順で計算するか考えてみましょう。</p>



<ol class="wp-block-list"><li>まず、値1と値2を足し算します。その値を控えます。</li><li>次に、控えた値と値3の足し算をして、その値を控えます。</li><li>さらに2で控えた値と値4を足し算して、その値を控えます。</li></ol>



<p>これを最後の数値まで繰り返すと合計を求める事ができます。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>この手順と同じように反復処理を使って足し算を繰り返し計算するアルゴリズムを考えます。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">合計を計算するイメージ</span></h2>



<p>反復処理を使って合計を計算するイメージは以下の図のようになります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[n個の数値を合計する]</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="945" height="665" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/合計.png" alt="n個の数値を合計するイメージ" class="wp-image-1431" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/合計.png 945w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/合計-300x211.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/合計-768x540.png 768w" sizes="(max-width: 945px) 100vw, 945px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>配列のインデックスは0から始まるのでn個の要素を繰り返し参照するには以下のように指定します。</p>



<ul class="wp-block-list"><li>インデックス用の変数iを0で初期化する。</li><li>繰り返し条件は(i &lt; n)にする。</li></ul>



<p>繰り返し条件の比較を要素数ではなくインデックス番号で指定する場合は、(i &lt;= n-1)のように指定します。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">平均値を計算する</span></h2>



<p>平均値(Average)を計算するには、合計した値を個数で割った値になります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc4">サンプルコード</span></h2>



<p>合計と平均値を計算するアルゴリズムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Tcl</span></h3>



<p>[配列を使った例：avg.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 合計と平均値を計算する

# arr : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# sum : 合計
# avg : 平均値(Average)

array set arr {0 11 1 12 2 13 3 14 4 15}
set n [array size arr]

set sum 0
set   i 0

while {$i &lt; $n} {
    set sum [expr $sum + $arr($i)]
    incr i
}

set avg [expr $sum.0 / $n]
puts "合計：$sum　平均値：$avg"
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./avg.tcl
合計：65　平均値：13.0
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[リスト、foreachを使った例：avg2.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# 合計と平均値を計算する

# lst : 数値リスト
#  n  : 要素数
# sum : 合計
# avg : 平均値(Average)

set lst {11 12 13 14 15}
set n [llength $lst]

set sum 0

foreach x $lst {
    set sum [expr $sum + $x]
}

set avg [expr $sum.0 / $n]
puts "合計：$sum　平均値：$avg"
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./avg2.tcl
合計：65　平均値：13.0
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc6">Python</span></h3>



<p>[whileを使った例：avg.py]</p>



<pre class="python">#!/usr/bin/env python3

# 合計と平均値を計算する

# lst : 数値リスト
#  n  : 要素数
#  i  : 要素のindex
# sum : 合計
# avg : 平均値(Average)

lst = [11, 12, 13, 14, 15]
n = len(lst)

sum = 0
i = 0

while i &lt; n:
    sum = sum + lst[i]
    i += 1

avg = sum/n
print('Total   = ', sum)
print('Average = ', avg)
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./avg.py
Total   =  65
Average =  13.0
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p>[forを使った例：avg2.py]</p>



<pre class="python">#!/usr/bin/env python3

# 合計と平均値を計算する

# lst : 数値リスト
#  n  : 要素数
# sum : 合計
# avg : 平均値(Average)

lst = [11, 12, 13, 14, 15]
n = len(lst)

sum = 0

for num in lst:
    sum = sum + num

avg = sum/n
print('Total   = ', sum)
print('Average = ', avg)
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./avg2.py
Total   =  65
Average =  13.0
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>アルゴリスム &#8211; ２つの変数の値を交換する</title>
		<link>https://blog.it-see.net/it-dokata/algorithm/swap/</link>
		
		<dc:creator><![CDATA[いっしー]]></dc:creator>
		<pubDate>Fri, 17 Apr 2020 09:07:06 +0000</pubDate>
				<category><![CDATA[アルゴリズム]]></category>
		<guid isPermaLink="false">https://blog.it-see.net/it-dokata/?p=1422</guid>

					<description><![CDATA[目次 ２つの変数の値を交換する交換のイメージサンプルコードTclPython ２つの変数の値を交換する プログラミングにおいて変数aと変数bの値を交換するにはどのような手順を行えばいいでしょうか？ 変数の値を交換する手順 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" decoding="async" width="800" height="533" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png" alt="" class="wp-image-1415" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13.png 800w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-300x200.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-768x512.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-160x107.png 160w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/アルゴリズム13-320x213.png 320w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">２つの変数の値を交換する</a></li><li><a href="#toc2" tabindex="0">交換のイメージ</a></li><li><a href="#toc3" tabindex="0">サンプルコード</a><ol><li><a href="#toc4" tabindex="0">Tcl</a></li><li><a href="#toc5" tabindex="0">Python</a></li></ol></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">２つの変数の値を交換する</span></h2>



<p>プログラミングにおいて変数aと変数bの値を交換するにはどのような手順を行えばいいでしょうか？</p>



<p>変数の値を交換する手順は、プログラミングの経験者に取っては、「出来て当たり前」なぐらい超簡単なことですが、プログラミング初心者に取っては、意外と難しかったりします。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="bold">「まずは変数aの値を変数bに入れて、今度は変数bの値を変数aに入れて…」</span>なんてことを考えていませんか？</p>



<p>これだと、どちらの変数にも同じ値が代入されてしまいます。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p><span class="marker-under"><strong>２つの変数の値を交換するには、一時的に退避させる変数tmpを用意して、変数a、変数b、変数tmpを三角交換の形で入れ替えします。</strong></span></p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-label-box-1 label-box lb-brown block-box"><div class="label-box-label block-box-label fab-pencil"><span class="label-box-label-text block-box-label-text">メモ</span></div><div class="label-box-content">
<p><span class="marker-under-blue"><span class="bold">temp VS tmp</span></span></p>



<p>tempまたはtmpはTemporaryの略称です。Temporaryは日本語で「一時的な」という意味になります。</p>



<p>Windowsでは環境変数やフォルダ名にtempが使われています。Unixでは一時的に使用するディレクトリ名に/tmp, /var/tmpが使われています。</p>



<p>そのようなことからディレクトリの命名に、Windowsではtemp、Unixではtmpが使われる傾向があるようです。</p>



<p>プログラムや関数内で一時的に使用する変数名にどちらを使うかは明確なルールはありません。</p>



<p>個人的な感触としてネットで見かけるコードでは、一時的に使う変数名にtempよりもtmpを使用している事が多いように感じます。</p>
</div></div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc2">交換のイメージ</span></h2>



<p>２つの変数の値を交換する手順を図で表すと以下の図のようなイメージになります。</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p style="text-align:center">[変数データの入れ替え]</p>



<figure class="wp-block-image"><img loading="lazy" decoding="async" width="867" height="584" src="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/変数データの入れ替え.png" alt="" class="wp-image-1424" srcset="https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/変数データの入れ替え.png 867w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/変数データの入れ替え-300x202.png 300w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/変数データの入れ替え-768x517.png 768w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/変数データの入れ替え-120x80.png 120w, https://blog.it-see.net/it-dokata/wp-docs/wp-content/uploads/2019/12/変数データの入れ替え-160x107.png 160w" sizes="(max-width: 867px) 100vw, 867px" /></figure>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">サンプルコード</span></h2>



<p>２つの変数の値を交換するアルゴリスムを以下のプログラミング言語で紹介します。</p>



<ul class="wp-block-list"><li>Tcl</li><li>Python</li></ul>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<div class="wp-block-cocoon-blocks-tab-box-1 blank-box bb-tab bb-memo bb-brown block-box">
<p><strong>サンプルコードについて</strong></p>



<p>各プログラミング言語の基本的な制御構造とデータ構造を使って記述しています。</p>



<p>必要であれば、for, foreach、リスト、配列などに書き換えたり、関数化を行って練習してください。</p>
</div>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc4">Tcl</span></h3>



<p>[サンプル：swap.tcl]</p>



<pre class="tcl">#!/bin/sh
# the next line restarts using tclsh \
exec tclsh "$0" "$@"

# ２つの変数の値を交換して結果を出力する。

set a 10
set b 20

# 変数a,bの値を交換する。

set tmp $a
set   a $b
set   b $tmp

# 変数a, bの値を出力する。

puts "a = $a b = $b"
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./swap.tcl
a = 20 b = 10
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc5">Python</span></h3>



<p>[サンプル：swap.py]</p>



<pre class="python">#!/usr/bin/env python3

# ２つの変数の値を交換して結果を出力する。

a = 10
b = 20

# 変数a,bの値を交換する。

tmp = a
a = b
b = tmp

# 変数a, bの値を出力する。

print(f'a = {a} b = {b}')
</pre>



<p>[実行例]</p>



<pre class="nohighlight" style="color: #ffffff; background-color: #000000;">$ ./swap.py
a = 20 b = 10
</pre>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
