回答編集履歴

2

加筆

2020/04/25 22:04

投稿

majiponi
majiponi

スコア1722

test CHANGED
@@ -8,10 +8,10 @@
8
8
 
9
9
  そして、最初に集合S = {0}を考えます。
10
10
 
11
- 一番~~小さい~~**大きい**数字が7で、それが2つあるとき、Sに対して、Sの各要素に7を1回足した集合Tと、7を2回足した集合Uを考えます。そして、Sの要素にTとUの要素を追加します。この時点でSは{0,7,14}となります。あとは入力された各異なる数に対して同様に考えます。
11
+ 一番~~小さい~~**大きい**数字が7で、それが2つあるとき、Sに対して、Sの各要素に7を1回足した集合Tと、7を2回足した集合Uを考えます。そして、Sの要素にTとUの要素を追加します。**このとき、TにSの要素とUの要素を追加して、Sと置き換えます。**この時点でSは{0,7,14}となります。あとは入力された各異なる数に対して同様に考えます。
12
12
 
13
13
 
14
14
 
15
15
 
16
16
 
17
- 4/26追記:数学の理論としては先の通りなのですが、集合の実装として、2分木を用いている場合、小さい順に追加していくと、木の生成が不均一となり、深さが2^nに比例する、という致命的な欠陥に気がつきましたので、該当箇所を修正しました。
17
+ 4/26追記:数学の理論としては先の通りなのですが、集合の実装として、2分木を用いている場合、小さい順に追加していくと、木の生成が不均一となる、という致命的な欠陥に気がつきましたので、該当箇所を修正しました。

1

アルゴリズムの修正

2020/04/25 22:04

投稿

majiponi
majiponi

スコア1722

test CHANGED
@@ -4,8 +4,14 @@
4
4
 
5
5
  しかし、計算量を減らす工夫はできます。
6
6
 
7
- まず、入力された数字を小さい順に並べ替えます。
7
+ まず、入力された数字を~~小さい順~~**大きい順**に並べ替えます。
8
8
 
9
9
  そして、最初に集合S = {0}を考えます。
10
10
 
11
- 一番小さい数字が7で、それが2つあるとき、Sに対して、Sの各要素に7を1回足した集合Tと、7を2回足した集合Uを考えます。そして、Sの要素にTとUの要素を追加します。この時点でSは{0,7,14}となります。あとは入力された各異なる数に対して同様に考えます。
11
+ 一番~~小さい~~**大きい**数字が7で、それが2つあるとき、Sに対して、Sの各要素に7を1回足した集合Tと、7を2回足した集合Uを考えます。そして、Sの要素にTとUの要素を追加します。この時点でSは{0,7,14}となります。あとは入力された各異なる数に対して同様に考えます。
12
+
13
+
14
+
15
+
16
+
17
+ 4/26追記:数学の理論としては先の通りなのですが、集合の実装として、2分木を用いている場合、小さい順に追加していくと、木の生成が不均一となり、深さが2^nに比例する、という致命的な欠陥に気がつきましたので、該当箇所を修正しました。