Pythonが競技コーディングに最適なのはなぜですか
競技プログラミングは一般に、適切なデータ構造を使用して効率的なアルゴリズムを利用するためのコーディングと呼ばれます。彼らは多くのレベルでプログラマーのスキルをテストします。
アルゴリズムとデータ構造の助けを借りて、さまざまなロジックを適用することによって、あなたに提起された架空のプログラミング問題を解決する必要があります。問題を解決するだけでなく、時間とスペースが非常に複雑な非常に効率的な解決策を考え出す必要があります。
いわゆる競技プログラミングの問題ステートメントの例は次のようになります-
小文字のラテン文字のみで構成される長さnの文字列sが与えられます。
文字列のサブ文字列は、その文字列の連続したサブシーケンスです。したがって、文字列「forces」は文字列「codeforces」のサブ文字列ですが、文字列「coder」はそうではありません。
あなたの仕事は、残りのすべての文字が等しくなるように、この文字列から正確に1つの部分文字列を削除する方法の数を計算することです(0または1の個別の文字の数)。
sには少なくとも2つの異なる文字が含まれていることが保証されています。
文字列全体を削除でき、それが正しいことに注意してください。また、少なくとも1つの文字を削除する必要があることに注意してください。
上記の問題を解決するために、任意のプログラミング言語を使用できます。
ここで疑問が生じます。なぜ競技コーディングにPythonを使用するのですか?
速度
Pythonを選択する理由の1つは、コードの記述に費やす時間を大幅に短縮することです。質問に必要なロジックについて考えることに時間を費やすのではありません。
この種の競争では時間が重要であるため、プログラマーがソリューションをより速く作成できるようになります。つまり、上記の速度とは、Python言語の速度ではなく、プログラマーがソリューションを作成する速度を意味します。
多種多様なライブラリ
Pythonには多種多様な標準ライブラリが付属しており、これらのライブラリは競技プログラミングで非常にうまく利用できます。
以下は、競技コーディングにPythonを選択するその他の一般的な理由のリストです-
i。一般的な組み込み関数:
- Pythonは、count、min、max、sortedなどの一般的な関数の大規模なセットを提供します。これらの組み込み関数は非常に便利で、コーダーが簡単に先に進むことができ、これらの簡単な手順のコードの記述をスキップできます。また、Python関数は、その関数に最適なアルゴリズムを使用します。たとえば、sorted()関数はTimsortアルゴリズムを使用します。これは、O(nlogn)の最悪の場合のパフォーマンスで安定したソートを提供します。これは、O(1)の最良の実行時間または一定の実行時間を提供する最良のソートアルゴリズムの1つです。
コード
#abs() print(abs(-7)) #max() print(max(2, 13, 4, 20)) #memoryview() print(memoryview(bytes(9))) #object() o = object();print(type(o)) #pow() print(pow(2,6)) #reversed a = reversed([3, 13, 2, 1]); print(a) #sorted() print(sorted([9, 2, 4, 13, 7])) #sum() print(sum([2, 9, 12, 19])) # type() print (type([])) print (type({})) #zip() print(set(zip([1,2],[3,4,5])))
ii。リスト内包表記
- Pythonは、最高のリスト内包表記の1つを提供します。これにより、通常1行に5〜20行かかるコードを記述できます。リスト内包表記を使用すると、ネストされたループと条件を持つことができます
コード
# Iterating through a string Using List Comprehension l_string = [ letter for letter in 'Tutorialspoint' ] print( l_string) #List Comprehensions vs Lambda functions l_lambda = list(map(lambda x: x, 'Tutorialspoint')) print(l_lambda)
出力
['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't'] ['T', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's', 'p', 'o', 'i', 'n', 't']
iii。標準ライブラリ(大きな利点)
- Pythonには非常に広範な標準ライブラリが付属しており、さまざまな機能を提供します。これらのライブラリには、手動で実装する必要がないいくつかのデータ構造と、ライブラリの非常に重要な部分であるitertoolsが付属しています。
- たとえば、itertoolsのリスト内包表記と順列関数を使用して、リストの可能なすべての順列を生成し、それを別の単一のリストに格納したいとします。
Python標準ライブラリ
データ型 | 文字列 | ネットワーキング | スレッド |
オペレーティングシステム | 圧縮 | GUI | 引数 |
CGI | 複素数 | FTP | 暗号化 |
テスト | マルチメディア | データベース | CSVファイル |
カレンダー | メール | XML | シリアル化 |
iv。多種多様なデータ構造
- Pythonは、辞書、セット、タプル、リストなど、標準パッケージとして提供される多くのデータ構造のセットをコーディングで使用できるように提供します。
v。使いやすさ
Python構文は人間が読める形式であり、Pythonでコーディングを行うのは非常に簡単で高速です。基本的には擬似コードのように読めます。
>>> print("hello world!") hello world! >>> sum([3, 4, 3,5]) 15 >>> max(3, 4, 5, 13,2) 13 >>> min(3, 4, 5, 13, 2) 2
-
Pythonでサービスセンターの最適な位置を見つけるためのプログラム
いくつかの家が配置されている座標点のリストを含む位置のリストがあるとします。 (xc、yc)にサービスセンターを作成し、任意のポイントから(xc、yc)までのユークリッド距離の合計が最小になるようにする場合。したがって、最小距離の合計を見つける必要があります。 したがって、入力がpositions =[(10,11)、(11,10)、(11,12)、(12,11)]のような場合、出力は4.0になります。 これを解決するには、次の手順に従います- numIter:=50 関数total()を定義します。これにはcx、cy、positionsが必要です 合計:=0.0
-
Pythonでパターンを印刷する方法は?
Pythonのパターンは、ネストされたforループを使用して印刷できます。外側のループは行数を反復処理するために使用され、内側のループは列数を処理するために使用されます。印刷ステートメントは、要件に応じてさまざまなパターンを形成するように変更されます。 パターンには、星型、数字型、アルファベット型があります。パターンは、さまざまな形、三角形、ピラミッドなどにすることができます。 例 これらのパターンはすべて、これらの異なるパターンを形成する変更されたprintステートメントを含むforループを使用して印刷できます。 これらのパターンの印刷の基本的な考え方は同じですが、わずかな違いが