TLE が起きる理由と見つけ方
予算を使い果たす隠れたループを見つけます
「TLE が起きる理由と見つけ方」はCoddyKit上の無料Coding Interview Prepレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCoding Interview Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Coding Interview Prepコースには全4レッスンが含まれています。
TLE 判定を知る
TLE は Time Limit Exceeded の略で、コードは正しいものの遅すぎることを意味します。コンテストで初心者が最もよくぶつかる壁です。⏰
よくある原因
TLE のほとんどは、n に対して計算量が高すぎることが原因です。n = 10^6 で O(n^2) の方針を使えば、毎回必ず時間予算を超えてしまいます。
隠れた内側のループ
最も気付きにくい TLE の原因は、見落としていたループです。ループ内のメソッド呼び出し自体がループしていると、O(n) が O(n^2) になることがあります。
for x in arr:
if x in seen_list:
...リストでの所属判定
リストで x in を確認する処理は、1回あたり O(n) です。ループ内で行うと二次時間になります。所属判定には set を使って O(1) にしてください。
seen = set()
if x in seen:
...ループ内で文字列を構築する
ループ内で plus を使って連結すると、毎回文字列全体がコピーされます。この隠れたコストは O(n^2) になるため、断片を集めて最後に1回だけ join してください。
parts = []
parts.append(s)
result = "".join(parts)入力の遅さも影響する
大量の入力を通常の input() で読み込むと、それだけで TLE になることがあります。大きなテストでは、sys.stdin を使ってデータ全体を素早く読み込んでください。
import sys
data = sys.stdin.read().split()再計算とキャッシュ
同じ値を何度も再計算すると時間を無駄にします。累積和のような結果をキャッシュすれば、繰り返していた O(n) の処理を O(1) にできます。
提出前に見積もる
判定される前に TLE を見抜きましょう。計算量を n に適用し、10^8 と比較してください。超えるなら、提出前に設計を見直します。
ボトルネックを見つける
TLE になったら、最も深い入れ子のループを見つけ、実際に何回実行されるのかを考えてください。ほとんどの場合、そこから処理時間が漏れています。
計算量を下げる
TLE の解決には、細かな調整ではなく、通常はよりよいアルゴリズムが必要です。入れ子の走査を、ソート、ハッシュマップ、または尺取り法に置き換えてください。
定数倍の調整は最後にする
制限時間を少し超える程度なら、高速な I/O などの小さな定数倍の改善で救える場合があります。ただし、まず Big-O 自体が適切かを確認してください。
確認問題
この隠れた処理速度低下の原因を診断してみましょう。
復習
TLE は正しいものの遅すぎることを意味します。隠れたループを探し、リストを set に置き換え、文字列は最後に1回だけ結合し、Big-O を下げましょう。まず見積もってから提出してください。🛠️
よくある質問
「TLE が起きる理由と見つけ方」レッスンは無料ですか?
はい。「TLE が起きる理由と見つけ方」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Coding Interview Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Coding Interview Prepコースには全4レッスンが含まれています。
「TLE が起きる理由と見つけ方」で何を学びますか?
予算を使い果たす隠れたループを見つけます ブラウザで直接実行するハンズオンコードでCoding Interview Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Coding Interview Prepを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCoding Interview Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「TLE が起きる理由と見つけ方」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCoding Interview Prepレッスンでコードを書いて実行できますか?
はい。すべてのCoding Interview Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Big-O で演算回数を数える
- 10^8 の経験則
- 制約を読み、計算量を選ぶ
- TLE が起きる理由と見つけ方