回答編集履歴

2

文言の微修正

2019/12/21 13:46

投稿

2KOH
2KOH

スコア999

test CHANGED
@@ -58,17 +58,17 @@
58
58
 
59
59
 
60
60
 
61
- ### ある関数が常に安定ソートを行うかどうかを正しく判定する関数は存在しないことの証明
61
+ ### あるソート関数が常に安定ソートを行うかどうかを正しく判定する関数は存在しないことの証明
62
62
 
63
63
 
64
64
 
65
- 理論上、ある関数が常に安定ソートを行うかどうかを正しく判定する関数は存在しないと思われます。
65
+ 理論上、あるソート関数が常に安定ソートを行うかどうかを正しく判定する関数は存在しないと思われます。
66
66
 
67
67
  停止性問題と同じ要領で以下のように証明できると思います。
68
68
 
69
69
 
70
70
 
71
- もしも、ある関数が常に安定ソートを行うかどうかを正しく判定する関数 `isStable` が存在すると仮定する。
71
+ もしも、あるソート関数が常に安定ソートを行うかどうかを正しく判定する関数 `isStable` が存在すると仮定する。
72
72
 
73
73
 
74
74
 
@@ -136,4 +136,4 @@
136
136
 
137
137
 
138
138
 
139
- いずれにしろ矛盾するため、ある関数が常に安定ソートを行うかどうかを正しく判定する関数 `isStable` は存在しない。
139
+ いずれにしろ矛盾するため、あるソート関数が常に安定ソートを行うかどうかを正しく判定する関数 `isStable` は存在しない。

1

「ある関数が常に安定ソートを行うかどうかを正しく判定する関数は存在しないことの証明」を追記

2019/12/21 13:46

投稿

2KOH
2KOH

スコア999

test CHANGED
@@ -55,3 +55,85 @@
55
55
 
56
56
 
57
57
  なので、安定ソートで実装されているかを検証するためには、どうしてもソースコードを見る必要があると思います。
58
+
59
+
60
+
61
+ ### ある関数が常に安定ソートを行うかどうかを正しく判定する関数は存在しないことの証明
62
+
63
+
64
+
65
+ 理論上、ある関数が常に安定ソートを行うかどうかを正しく判定する関数は存在しないと思われます。
66
+
67
+ 停止性問題と同じ要領で以下のように証明できると思います。
68
+
69
+
70
+
71
+ もしも、ある関数が常に安定ソートを行うかどうかを正しく判定する関数 `isStable` が存在すると仮定する。
72
+
73
+
74
+
75
+ ```javascript
76
+
77
+ function isStable(sortFunction) {
78
+
79
+ if (sortFunction が常に安定ソートを行う) {
80
+
81
+ return true
82
+
83
+ } else {
84
+
85
+ return false
86
+
87
+ }
88
+
89
+ }
90
+
91
+ ```
92
+
93
+
94
+
95
+ ここで、配列をソートする `mySort` 関数を以下のように定義する。
96
+
97
+
98
+
99
+ ```javascript
100
+
101
+ function mySort(array) {
102
+
103
+ if (isStable(mySort)) {
104
+
105
+ array を安定でないソートする
106
+
107
+ } else {
108
+
109
+ array を安定ソートする
110
+
111
+ }
112
+
113
+ }
114
+
115
+ ```
116
+
117
+
118
+
119
+ もしも、`mySort` が常に安定ソートを行うと仮定する。
120
+
121
+ その場合、`isStable(mySort)` は `true` となる。
122
+
123
+ `isStable(mySort)` は `true` のため、`mySort` の定義から `mySort` は安定でないソートを行う。
124
+
125
+ これは、`mySort` が常に安定ソートを行うという仮定に矛盾する。
126
+
127
+
128
+
129
+ もしも、`mySort` が安定でないソートを行うと仮定する。
130
+
131
+ その場合、`isStable(mySort)` は `false` となる。
132
+
133
+ `isStable(mySort)` は `false` のため、`mySort` の定義から `mySort` は常に安定でないソートを行う。
134
+
135
+ これは、`mySort` が安定でないソートを行うという仮定に矛盾する。
136
+
137
+
138
+
139
+ いずれにしろ矛盾するため、ある関数が常に安定ソートを行うかどうかを正しく判定する関数 `isStable` は存在しない。