回答編集履歴

3

サンプル追加

2017/06/26 04:52

投稿

magichan
magichan

スコア15898

test CHANGED
@@ -42,7 +42,9 @@
42
42
 
43
43
  とりあえず 質問での3重ループの一番内側のループは、``k<i+j`` が成り立つ ``k`` をカウントしているだけですので、この部分をループではなく計算で求めるようにするとループの回数を大幅に少なくすることができます。
44
44
 
45
+
46
+
45
- ```
47
+ ```Python
46
48
 
47
49
  n = 1000
48
50
 
@@ -60,6 +62,12 @@
60
62
 
61
63
 
62
64
 
65
+ 内包表記だとこんなかんじ
63
66
 
67
+ ```Python
64
68
 
69
+ n = 1000
65
70
 
71
+ ret = sum([min(i,n-j+1) for i in range(1,n+1) for j in range(i,n+1) ])
72
+
73
+ ```

2

文言の修正

2017/06/26 04:52

投稿

magichan
magichan

スコア15898

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
 
42
42
 
43
- とりあえず 質問での3重ループの一番内側のループは、``i+j<k`` が成り立つ ``k`` をカウントしているだけですので、この部分ループを廃止して、計算で求めるようにするとループの回数を大幅に少なくすることができます。
43
+ とりあえず 質問での3重ループの一番内側のループは、``k<i+j`` が成り立つ ``k`` をカウントしているだけですので、この部分ループではなく計算で求めるようにするとループの回数を大幅に少なくすることができます。
44
44
 
45
45
  ```
46
46
 

1

改善案の提示

2017/06/26 04:39

投稿

magichan
magichan

スコア15898

test CHANGED
@@ -27,3 +27,39 @@
27
27
 
28
28
 
29
29
  に置き換えることができます。
30
+
31
+
32
+
33
+ ---
34
+
35
+
36
+
37
+ 【追記】
38
+
39
+ 上記でパフォーマンスがでないようですので・・改善案を書いておきます。
40
+
41
+
42
+
43
+ とりあえず 質問での3重ループの一番内側のループは、``i+j<k`` が成り立つ ``k`` をカウントしているだけですので、、この部分のループを廃止して、計算で求めるようにするとループの回数を大幅に少なくすることができます。
44
+
45
+ ```
46
+
47
+ n = 1000
48
+
49
+ count = 0
50
+
51
+ for i in range(1,n+1):
52
+
53
+ for j in range(i,n+1):
54
+
55
+ count += min(i,n-j+1)
56
+
57
+ print(count)
58
+
59
+ ```
60
+
61
+
62
+
63
+
64
+
65
+