コンピュータの整列処理で
正解との距離は単調に減少するか?
⼭⼝琢(フリー), ⼤場みち⼦(公⽴はこだて未来⼤学)
v1.1 2020-11-14
v1 2020-11-07
2020-11-07 山口琢 @第157回CE研 1
背景
• 学習分析(Learning Analytics, LA)
• プログラミング学習・教育
↓
• プログラミング過程を測定・分析・評価する研
究が増えてきた
• 正解との距離/編集距離を利⽤する研究が出てき
た
2020-11-07 山口琢 @第157回CE研 2
先⾏研究
• 「プログラミング過程の学習分析」の構造
• 距離に基づく推定
2020-11-07 山口琢 @第157回CE研 3
プログラミング過程の学習分析
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;学習者
2020-11-07 山口琢 @第157回CE研 4
プログラミング過程の学習分析
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
過程
学習者
測定
アプリの⼯夫&データ化
2020-11-07 山口琢 @第157回CE研 5
プログラミング過程の学習分析
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
• 作戦
• 態度
• 確信・迷い
• 理解度
• 知識
推定
過程
学習者
分析
測定
2020-11-07 山口琢 @第157回CE研 6
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
• 作戦
• 態度
• 確信・迷い
• 理解度
• 知識
推定
過程
学習者
正解との距離を分析
距離を測定
距離
時間
Tinker(下⼿にいじくり回)
してるのでは?
遠ざかってる
距離に基づく推定
2020-11-07 山口琢 @第157回CE研 7
距離に基づく推定 1/2
• 「遠ざかっているとき、不適切なことが
起きている」と推定する。
• 汎⽤的に使える分析⼿法である
→ 「何が適切かを、具体的に⽰さなくてよい」
と考える
2020-11-07 山口琢 @第157回CE研 8
⽂献1
• A non-monotonic trail with frequent up- and down-swings
may suggest the use of trial-and-error approach. Such
differences may be found in the trails of two different
students even when they may have taken the same number
of steps to solve a puzzle.
• ... using edit distances eliminates puzzle-specific details
such as the specific line of code acted upon at each instant
by a student.
Salil Maharjan and Amruth Kumar, Using Edit Distance Trails to Analyze Path Solutions of
Parsons Puzzles, Educational Data Mining 2020 (EDM 2020), 2020-07-10
2020-11-07 山口琢 @第157回CE研 9
⽂献2
2020-11-07 山口琢 @第157回CE研 10
森永 笑⼦, 松本 慎平, 林 雄介, 平嶋 宗, カード操作⽅式に よるプログラ
ミング学習⽀援システムにおける学習者の活 動に基づく学習課題の特
徴分析, 電気学会 C 部⾨ 情報シス テム研究会 (CIS), 2019-11-10
⽂献2
図1では正解の並びを得たにも関わらず回答を送信していない状態がみられる.
これは正解に気付けていない状態であると考えられる.その理由として,
Tinkering(13)を⾏っていた可能性が考えられる.具体的には,先⼊観や思い込み
で学習者が正解だと考えたパターンがすでにあり,その配置に変更する過程で
正解が得られていた場合が考えられる.あるいは要件(問題)に対する解について,
要件(問題)とそれに対応する解をプログラムの形(パターン)で憶えており,仮
説的な考えを試しながら「建設的な試⾏錯誤」でアルゴリズムを設計せずパ
ターンで回答しようとしていた過程が時系列変化に現れていた可能性が考えら
れる.いずれにせよ,このような振る舞いが可視化された点はプログラミング
を不得意とする学習者の特徴をより深く知るうえで意義がある
森永 笑⼦, 松本 慎平, 林 雄介, 平嶋 宗, カード操作⽅式に よるプログラミング
学習⽀援システムにおける学習者の活 動に基づく学習課題の特徴分析, 電気学
会 C 部⾨ 情報シス テム研究会 (CIS), 2019-11-10
2020-11-07 山口琢 @第157回CE研 11
⽂献3
○正否とその時間的推移各ブロックの正否と模範プログラムと
の編集距離を収集する.各ブロックには空欄が設けられているこ
とがあり,その正否はプログラムの前後の流れを把握していな
ければ埋められないだろう.模範プログラムとの編集距離と近け
れば,⼀般に論理的にブロックを組み⽴てられていると考えら
れる.
伊東⼤輝, 島川博光, コードパズルによるプログラミング的 思考
⼒を考慮した理解度の推定, 情報科学技術フォーラム (FIT2020)
講演論⽂集, 2020
2020-11-07 山口琢 @第157回CE研 12
距離に基づく推定 2/2
「遠ざかっているとき、不適切なことが起
きている」と推定する。
↕
「適切なことが起きているとき、遠ざから
ない」という前提がある…はず(対偶)
ただし、必ずしも、そう明記されない
2020-11-07 山口琢 @第157回CE研 13
⽬的
⼈が知的な処理を⾏うとき、「適切なプロ
セスでは、プロセスの進展に伴って正解と
の編集距離が単調に減少する」という前提
↑
この前提の妥当性を検証
2020-11-07 山口琢 @第157回CE研 14
本稿の単調減少
• x < y → f(x) ≧ f(y) f(x) ≦ f(y) (予稿は誤り)
• 広義の単調減少、または単調⾮増加
あるステップで距離が変わらない場合も
含む。
2020-11-07 山口琢 @第157回CE研 15
アプローチ
「適切なプロセスでは、プロセスの進展に伴っ
て正解との編集距離が単調に減少する」
↑ 反証
「ある適切なプロセスでは、プロセスの進展に
伴って正解との編集距離が増加することがあ
る」と⽰す
2020-11-07 山口琢 @第157回CE研 16
課題
• 適切なプロセスでは、プロセスの進展に伴って正
解との編集距離が単調に減少する
• 何が適切か、具体的に⽰さずに済む
↑ 反証
• ある適切なプロセスでは、プロセスの進展に伴っ
て正解との編集距離が増加することがある
– 「適切」をこちらが定義するのか?
2020-11-07 山口琢 @第157回CE研 17
課題とアプローチ
• 適切なプロセスでは、プロセスの進展に伴って正
解との編集距離が単調に減少する
• 何が適切か、具体的に⽰さなくて済む
↑ 反証
• ある適切なプロセスでは、プロセスの進展に伴っ
て正解との編集距離が増加することがある
• 広く「適切」と評価されている(とみなせる)プロ
セスを対象
2020-11-07 山口琢 @第157回CE研 18
整列アルゴリズム
広く「適切」と評価されている(とみなせる)プロセスを
対象
↑
整列アルゴリズムは、学習の場で不適切とされるような
プロセスではないハズ。
参考⽂献
奥村晴彦, [改訂新版]C⾔語による標準アルゴリズム事
典,技術評論社, 2018-05-28
2020-08-29 山口琢 19
• 作戦
• 態度
• 確信・迷い
• 理解度
• 知識
推定
過程
学習者
正解との編集距離を分析
測定
(データ化)
距離
時間
Tinker(下⼿にいじくり回)
してるのでは?
遠ざかってる
もっと単純な過程
2020-11-07 山口琢 @第157回CE研 20
8
6 5
2
3
1
4
7
9
10
数の整列
• 作戦
• 態度
• 確信・迷い
• 理解度
• 知識
推定
過程
正解との編集距離を分析
測定
(データ化)
距離
時間
Tinker(下⼿にいじくり回)
してるのでは?
遠ざかってる
適切と分かっている過程
2020-11-07 山口琢 @第157回CE研 21
8
6 5
2
3
1
4
7
9
10
数の整列
→整列
アルゴリズム
コンピュータ
実験
• 作問と正解
• 整列アルゴリズム
• 測定のタイミング
• 距離
• 検証⽅法
2020-11-07 山口琢 @第157回CE研 22
作問と正解
• 1から10の10個の数を昇順に並べ替える
• 10P10 = 3,628,800個の問題
• 正解は(1,2,3,4,5,6,7,8,9,10)
2020-11-07 山口琢 @第157回CE研 23
整列アルゴリズム
次の6個
• バブルソート
• クイックソート
• ヒープソート
• マージソート
• 選択ソート
• 挿⼊ソート
2020-11-07 山口琢 @第157回CE研 24
測定のタイミング
• バブルソート、ヒープソート、クイックソー
ト、選択ソート
→ 交換(⼊れ替え、swap) 直後
• マージソート
→ マージ直後
マージソートは1操作での変化が⼤きい
• 挿⼊ソート
→ 挿⼊直後
2020-11-07 山口琢 @第157回CE研 25
距離
次の4個
• ベクトル型の距離
– ハミング距離(Hamming distance)
• 編集距離
– レーベンシュタイン距離(Levenshtein distance)
– ケイリー距離(Cayley distance)
– ウラム距離(Ulam distance)
2020-11-07 山口琢 @第157回CE研 26
距離の変化の評価⽅法
1. 整列アルゴリズムを実装するPythonプログラムに
2. 前述のタイミングで数列を出⼒するコード挿⼊
3. これらのプログラムに問題を整列させる
4. 記録された整列中の数列と正解との距離を測る
5. 途中で距離が増加する「アルゴリズム×距離×
問題」を数える
2020-11-07 山口琢 @第157回CE研 27
単調減少の前提が正しい場合
途中で距離が増加した問題の数は0個になる
2020-11-07 山口琢 @第157回CE研 28
Levenshtein Hamming Cayley Ulam
バブルソート 0 0 0 0
ヒープソート 0 0 0 0
挿⼊ソート 0 0 0 0
マージソート 0 0 0 0
クイックソート 0 0 0 0
選択ソート 0 0 0 0
単調減少の前提が正しくない場合
途中で距離が増加した問題が、1つ以上ある。
この「1」を⾒つけるために、実験する整列アルゴリズム
と距離を増やす。
2020-11-07 山口琢 @第157回CE研 29
Levenshtein Hamming Cayley Ulam
バブルソート 0 0 0 0
ヒープソート 0 0 1 0
挿⼊ソート 0 0 0 0
マージソート 0 0 0 0
クイックソート 0 0 0 0
選択ソート 0 0 0 0
結果
2020-11-07 山口琢 @第157回CE研 30
クイックソートの距離の変化
2020-11-07 山口琢 @第157回CE研 31
1つ上の⾏の
1, 2, 3, 4, 5, 7, 8,10, 6, 9
に対して9と10を⼊れ替えたら
1, 2, 3, 4, 5, 7, 8, 9, 6,10
になった
( 6, 8)の置換で距離が広がった
が、実⾏したコードは他と同じ
ヒープソートの距離の変化
2020-11-07 山口琢 @第157回CE研 32
距離が0、す
なわち正解に
達してるのに、
処理と⽌めな
い例
結果
• 全ての整列アルゴリズムで、全ての距離について、正解との距離が遠ざか
る場合がある(予稿は誤り)
• 正解との距離が遠ざかる場合がある
– ヒープソートは、全ての問題で、すべての距離について、処理のどこかで正解との距
離が増加する。
– 選択ソートは、全ての問題で、すべての距離について、処理の途中で正解との距離が
単調減少(単調⾮増加)した。
2020-11-07 山口琢 @第157回CE研 33
1
Levenshtein Hamming Caley Ulam
2,743,264 75.6% 3,512,825 96.8% 3,624,619 99.9% 0 0.0%
3,628,800 100.0% 3,628,800 100.0% 3,628,800 100.0% 3,628,800 100.0%
1,339,176 36.9% 1,964,215 54.1% 3,443,878 94.9% 0 0.0%
1,852,755 51.1% 2,432,789 67.0% 3,426,453 94.4% 0 0.0%
1,034,478 28.5% 0 0.0% 1,089,872 30.0% 872,908 24.1%
0 0.0% 0 0.0% 0 0.0% 0 0.0%
[9] SymPy
UI &
[7]
(Longest Common Subsequence) [7]
Python R PerMallows
[9]
4.5
4.2 4.3
4.1
5
( 9,10)
9 10
( 9,10)
( 6, 8)
( 9,10) (for
while if ) (6, 8)
考察 1/3
• 本稿の範囲で、ヒープソートが不適切なアル
ゴリズムだという理由はない。正解との距離
が単調減少しないからといって、ヒープソー
トが不適切だとは⾔えない。
• 本稿の範囲で、選択ソートが他のアルゴリズ
ムと異なって優秀だという理由はない。正解
との距離が必ず単調減少するからといって、
選択ソートが適切だとは⾔えない。
2020-11-07 山口琢 @第157回CE研 34
考察 2/3
距離が遠ざかるとき、コンピュータは試⾏
錯誤してるのか?あるいはアルゴリズムは
何か特別な処理をしてるのか?
正解に近づく場合と遠ざかる場合とで、実
⾏されるコードは同じである。
2020-11-07 山口琢 @第157回CE研 35
考察 3/3
逆に「単調減少」を良いアルゴリズムの必要条件としたら?
• 例: 置換後の正解との距離を調べて、遠ざかる場合は置換しな
い
↑
上⼿くいかない。
• あらかじめ正解が分かるなら、そもそも整列不要
• 正解を知らずに正解との距離が分かるアルゴリズムは、今回
のアルゴリズムとは異なる新種。
2020-11-07 山口琢 @第157回CE研 36
結論
コンピュータによる整列において
「適切なプロセスでは
正解との距離が単調に減少する」
とは⾔えない。
2020-11-07 山口琢 @第157回CE研 37
「適切なプロセスでは正解との距離が単調
に減少する」を前提とするためには、+αの
条件が必要、例えば:
• 選択ソート以外のアルゴリズムを採⽤す
ることが不適切と⾔える条件
• 距離としてUlam距離を採⽤することが妥
当と⾔える条件
2020-11-07 山口琢 @第157回CE研 38
残された課題 1/3
なぜ、この表の結果になるのか?、特に100%や0%のセル
• なぜ、ヒープソートでは、全ての問題について正解との距離
が増えることがあるのか?
• なぜ、選択ソートでは、全ての問題について正解との距離が
増えないのか?
2020-08-29 山口琢 39
1
Levenshtein Hamming Caley Ulam
2,743,264 75.6% 3,512,825 96.8% 3,624,619 99.9% 0 0.0%
3,628,800 100.0% 3,628,800 100.0% 3,628,800 100.0% 3,628,800 100.0%
1,339,176 36.9% 1,964,215 54.1% 3,443,878 94.9% 0 0.0%
1,852,755 51.1% 2,432,789 67.0% 3,426,453 94.4% 0 0.0%
1,034,478 28.5% 0 0.0% 1,089,872 30.0% 872,908 24.1%
0 0.0% 0 0.0% 0 0.0% 0 0.0%
[9] SymPy
UI &
[7]
(Longest Common Subsequence) [7]
Python R PerMallows
[9]
4.5
4.2 4.3
4.1
5
( 9,10)
9 10
( 9,10)
( 6, 8)
( 9,10) (for
while if ) (6, 8)
• 作戦
• 態度
• 確信・迷い
• 理解度
• 知識
推定
過程
正解との編集距離を分析
測定
(データ化)
距離
時間
遠ざかってる
残された課題 2/3
他のパズル
2020-11-07 山口琢 @第157回CE研 40
2 10 3 4
5 12 8 14
1 15 9 7
13 11 6
15パズル
ハノイの塔両⽅
残された課題 3/3
検証の続き
#1 コンピュータによる数の整列で検証
↑ 本稿の範囲。これで終わってると思うが…
#2 コンピュータによる、並べ替えプログラミング
のシミュレーション
#3 ⼈による並べ替えプログラミングのデータ分析
2020-11-07 山口琢 @第157回CE研 41
数の整列 並べ替えプログラミング
コンピュータ #1 #2
⼈ #3
残された課題 3/3
検証の続き
#1 コンピュータによる数の整列で検証
#2 コンピュータによる、並べ替えプログラミングのシミュレーション
#3 ⼈による並べ替えプログラミングのデータ分析
2020-11-07 山口琢 @第157回CE研 42
数の整列 並べ替えプログラミング
コンピュータ #1 #2
⼈ #3
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
8
6 5
2
3
1
4
7
9
10
SSS2020に続く
• 2020年12⽉19(⼟), 20(⽇) オンライン
• https://ce.eplang.jp/index.php?SSS2020
2020-11-07 山口琢 @第157回CE研 43
数の整列 並べ替えプログラミング
コンピュータ #1 #2
⼈ #3
double sum = 0.0;
for (int i = 0; i < data.length; i++) {
sum += data[i];
}
return sum / data.length;
以上
2020-08-29 山口琢 44

コンピュータの整列処理で正解との距離は単調に減少するか?