質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

3084閲覧

大規模演算に対応できるようなプログラミングの作り方(python3)

Gargantua

総合スコア17

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2017/09/30 06:04

編集2017/10/01 02:01

###前提・実現したいこと
ネット上の練習問題(本の整理)を解いているのいるのですが、実行時間が長すぎて不合格となってしまいます。どのようにプログラムを書けば省メモリ・高速になりますか?

###発生している問題・エラーメッセージ
制限時間は16秒なのですがこれをオーバーしてしまいます。
メモリは512MBらしいです。

###該当のソースコード

number_of_books=int(input()) booksarray=list(map(int,input().rstrip().split())) count=0 for i in range(number_of_books): if booksarray[i]==i+1: pass else: temporal=booksarray[i] booksarray[booksarray.index(i+1)]=temporal booksarray[i]=i+1 count+=1 print(count)
num=int(input()) books=' '+input().rstrip()+' ' count=0 offset=1 for i in range(num): idnumber=books[offset] j=1 while True: if books[offset+j]!=' ': idnumber+=books[offset+j] j+=1 else: break offset+=len(str(i+1))+1 if idnumber==str(i+1): pass else: temporal=idnumber books=books.replace(' '+str(i+1)+' ',' '+str(temporal)+' ') books=books.replace(' '+str(temporal)+' ',' '+str(i+1)+' ',1) count+=1 print(count)

###試したこと
リストではメモリを食いすぎると思い、文字列で同じことをやってみましたがやはりタイムオーバーとなってしまいました。

###補足情報(言語/FW/ツール等のバージョンなど)
(自分側に実行環境があるわけではないので、サードパーティ製のモジュール等は使えないです。)
お仰せの通りNumpyは使えました。
しかし、このアルゴリズムではやはりタイムオーバーとなってしまいました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyahan

2017/09/30 12:07

NumPy は使えますよ?
CHERRY

2017/09/30 13:21

paiza は、利用規約の禁止事項に「各種媒体で、paizaで出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆およびカンニング等の不正を助長する内容等を掲載する行為」とありますので、この質問はカンニングになりますよ。
guest

回答3

0

ベストアンサー

興味深かったので、自分でも時間がかかりましたがやってみました。最終的にはPython3と標準ライブラリという組み合わせで、大規模データを全て0.14〜0.16秒でパスすることが出来ました。(sortやsortedはもちろん使用していません)

ただなんか直接的なヒントを書くのはご法度のようなので、一般論をアドバイスします。

  1. 最後の出力と後続の処理に不要な事は一切しない。
  2. なるべくCに近い低級なデータの取り扱い方に絞る。
  3. CPU時間(検索オーダー)の節約のためにメモリはふんだんに使う、節約なんてしない。
  4. Pythonに備わっている高級な検索やフィルタ機能は使用しない、使用したら負け。

頑張ってください。

投稿2017/09/30 18:57

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Gargantua

2017/10/01 02:05

今までスピードやメモリを意識したプログラムを書いたことがなかったので、この方針はとてもこれから役に立ちます。ありがとうございました。なおこの問題は練習問題であり、スキル認定とは関係がない問題なので、実際的にインターネット上で質問することに問題はないと思われます。
guest

0

間違って回答してしまいました
すいません

投稿2020/06/29 06:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ふふっふあははははは

投稿2020/06/29 06:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問