質問編集履歴

1

配列を1次元化した測定結果を追加

2017/08/28 01:56

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -24,6 +24,8 @@
24
24
 
25
25
 
26
26
 
27
+ # オンラインジャッジシステムでの処理時間: 約3.5秒
28
+
27
29
  def find_square0(data):
28
30
 
29
31
  max_size = 0
@@ -104,6 +106,8 @@
104
106
 
105
107
  ```python
106
108
 
109
+ # オンラインジャッジシステムでの処理時間: 約2.8秒
110
+
107
111
  def find_square2(data):
108
112
 
109
113
  max_size = 0
@@ -158,6 +162,100 @@
158
162
 
159
163
 
160
164
 
165
+ **2017-08-28追記**
166
+
167
+ okateimさんにコメントいただいた、配列(リスト)の1次元化を試してみました。
168
+
169
+ 配列を一つだけ確保する方式だと、配列のサイズが大きくなった時の速度ペナルティが厳しいようです。
170
+
171
+ ```python
172
+
173
+ # サイズ固定、オンラインジャッジシステムでの処理時間: 約4.9秒
174
+
175
+ def find_square4(data):
176
+
177
+ max_size = 0
178
+
179
+ dp = [0 for _ in range(1024*1024)]
180
+
181
+ # '.'のマスを1に
182
+
183
+ for y, row in enumerate(data):
184
+
185
+ for x, c in enumerate(row):
186
+
187
+ if c == '.':
188
+
189
+ dp[y*1024+x] = 1
190
+
191
+
192
+
193
+ # 対象のマスから左上に向かって、何マスの正方形が確保できるかチェックする
194
+
195
+ for y in range(1, len(data)):
196
+
197
+ for x in range(1, len(data)):
198
+
199
+ if dp[y*1024+x] == 1:
200
+
201
+ dp[y*1024+x] = min(dp[(y-1)*1024+x-1], dp[(y-1)*1024+x], dp[y*1024+x-1]) + 1
202
+
203
+ if dp[y*1024+x] > max_size:
204
+
205
+ max_size = dp[y*1024+x]
206
+
207
+ return max_size
208
+
209
+ ```
210
+
211
+
212
+
213
+ ```python
214
+
215
+ # サイズ可変、オンラインジャッジシステムでの処理時間: 約5.2秒
216
+
217
+ def find_square4_2(data):
218
+
219
+ max_size = 0
220
+
221
+ n = len(data)
222
+
223
+ dp = [0 for _ in range(n**2)]
224
+
225
+ # '.'のマスを1に
226
+
227
+ for y, row in enumerate(data):
228
+
229
+ for x, c in enumerate(row):
230
+
231
+ if c == '.':
232
+
233
+ dp[y*n+x] = 1
234
+
235
+
236
+
237
+ # 対象のマスから左上に向かって、何マスの正方形が確保できるかチェックする
238
+
239
+ for y in range(1, len(data)):
240
+
241
+ for x in range(1, len(data)):
242
+
243
+ if dp[y*n+x] == 1:
244
+
245
+ dp[y*n+x] = min(dp[(y-1)*n+x-1], dp[(y-1)*n+x], dp[y*n+x-1]) + 1
246
+
247
+ if dp[y*n+x] > max_size:
248
+
249
+ max_size = dp[y*n+x]
250
+
251
+ return max_size
252
+
253
+ ```
254
+
255
+
256
+
257
+
258
+
161
259
 
162
260
 
163
261
  ###補足情報(言語/FW/ツール等のバージョンなど)