Pythonのデータ構造とアルゴリズム

線形テーブル##

Pythonの listは可変線形リストです。

len()はO(1)操作です

要素のアクセスと割り当て、テール結合とテール削除(テールスライス削除を含む)はすべてO(1)操作です。

一般的な場所要素の追加、スライスの置換、スライスの削除、およびテーブルのスプライシング(拡張)はすべてO(n)操作です。

pop操作は、デフォルトでテーブルの終了要素を削除してO(1)に戻し、非テール位置をO(n)時間の複雑さとして指定します。

lst.clear()テーブルlst O(1)操作のすべての要素をクリアします。達成する2つの方法:
a。要素カウント値(テーブル長)が0に設定されます。実装は簡単で運用効率は高いですが、占有ストレージを真に解放することはできません。テーブルが非常に長い場合、操作の実行後にテーブルに要素はありませんが、元の大きなメモリブロックは引き続き占有されます。

b。空のテーブル用に別のストレージ領域が割り当てられ、元のストレージ領域は直接破棄されます。テーブルが再び大きくなると、ストレージ領域は頻繁に交換されます。

lst.reverse()テーブルlst自体を変更すると、要素の順序が逆になりますO(n)

def reverse(self):
 elems = self.elements
 i, j =0,len(elems)-1while i < j:
  elems[i], elems[j]= elems[j], elems[i]
  i, j = i+1, j-1

sortsort、最良のソートアルゴリズムの平均および最悪の場合の時間の複雑さはO(nlogn)です


## リンクテーブル
### 状態
1. テーブルの最初の要素が見つかります。
2. 任意の要素から始めて、次の要素を見つけることができます。

### 単一のリスト
- 定義
``` python
classLNode:
 def __init__(self, elem, next_= None):
  self.elem = elem
  self.next = next_

スタック##

スタックは、スタックとも呼ばれ、操作が制限された線形テーブルです。制限は、テーブルの一方の端でのみ挿入および削除操作が許可されることです。

挿入および削除操作を許可するセクションは、スタックの最上位(top)と呼ばれます。,もう一方の端はスタックの最下部(bottom)と呼ばれます

スタックの下部は固定されており、スタックの上部はフローティングです。

スタック内の要素の数がゼロの場合、それは呼び出されます空のスタック。挿入は一般的に呼ばれますスタックにプッシュ(PUSH)、削除が呼び出されますアンスタック(POP)

ラストインファーストアウト(LIFO、ラストインファーストアウト),ラストイン、ファーストアウトテーブル。

スタッキングとアンスタッキングの時間の複雑さは両方ともO(1)です

classStack(Object):
 def __init __(self、limit = 10): &quot;&quot; &quot;空のスタックを作成します
    """
  self.stack = []#要素を保存する
  self.limit = limit#スタック容量制限
    
 def push(self、data): &quot;&quot; &quot;は、要素データをスタックに追加します。これは、pushまたはpushとも呼ばれます。
    """
  # スタックがオーバーフローするかどうかを判断します
  iflen(self.stack)>= self.limit:
   インデックスエラーを発生させます( &#39;スタックの最大容量を超えています!&#39;)
  self.stack.append(data)

 def pop(self): &quot;&quot; &quot;は、スタックにプッシュされた最後の要素を削除して返します。これは、多くの場合、ポップと呼ばれます。
    """
  if self.stack:return self.stack.pop()else:
   rasie IndexError('pop from an empty stack')

 def top(self): &quot;&quot; &quot;スタックにプッシュされた最後の(トップ)要素を削除せずに取得します。
    """
  if self.stack:return self.stack[-1]

 def is_empty(self): &quot;&quot; &quot;スタックが空かどうかを判断し、空の場合はTrueを返し、そうでない場合はFalseを返します。
    """
  return not bool(self.stack)

 def size(self): &quot;&quot; &quot;スタック内の要素の数を取得します
    """
  returnlen(self.stack)

アプリケーション:ブラケットマッチング###

"""
スタックを使用して、ブラケットストリングのバランスが取れているかどうかを確認します

有効なブラケット文字列は、次の条件を満たす必要があります。
オープニングブラケットは、同じタイプのクロージングブラケットで閉じる必要があります。
開始括弧は正しい順序で閉じる必要があります。
空の文字列は有効な文字列と見なすことができることに注意してください。
例:((())):True((()):False(())):False
"""
import stack
st = stack.Stack()

input_str ="(()"for s in input_str:if st.top()== s:
		st.pop()else:
		st.push(s)

result = True if st.is_empty()else False
print(result)

Recommended Posts

Pythonのデータ構造とアルゴリズム
pythonデータ構造
Pythonの一般的なデータ構造の照合
FMアルゴリズム分析とPython実装
Pythonの古典的なアルゴリズム
NaiveBayesアルゴリズムとそのPython実装
02.Pythonデータタイプ
Python and Go
Pythonデータモデル
Pythonデータ分析
Pythonデータ形式-CSV
Pythonデータ分析-データ更新
[python] ubuntuの下のpython2とpython3
Pythonデータ分析-関数の適用
Pythonデータ分析-データ選択
Pythonの基本的なデータタイプ
Pythonの分解とパッケージ化
Pythonの基本的なデータタイプ
Python3の構成とentry.md
Pythonデータ分析-データ確立
Pythonの自動操作とメンテナンス2
Pythonの紹介と環境のインストール
Pythonはクローラーとアンチクローラーを知っています
centos7はpython3とipythonをインストールします
Pythonデータサイエンス:ニューラルネットワーク
ubuntu18.04python3.8をコンパイルしてインストールします
Python3クローラーデータクリーニング分析
Pythonは単純なXMLデータを解析します
Centos6.10はpythonとyumを再インストールします
Pythonデータサイエンス:ロジスティック回帰
Pythonオープン読み取りおよび書き込み
Pythonの自動操作とメンテナンス1
Pythonマルチプロセスおよびマルチスレッドの基本
Pythonは平均シフトクラスタリングアルゴリズムを実装しています
CentOS6.9はpythonをコンパイルしてインストールします
Pythonデータサイエンス:正規化方法
CentOS6はpython3をコンパイルしてインストールします
Pythonデータサイエンス:関連分析
Pythonのジェネレーターとイテレーター
Pythonデータサイエンス:線形回帰
PythonFakerデータ偽造モジュール
Pythonデータサイエンス:Chi-Square Test
Pythonデータサイエンス:線形回帰診断
Pythonファイルの読み取りおよび書き込み操作
Pythonとjsのインタラクティブな呼び出しメソッド
魔法の方法とPythonの使用
Pythonは正と負の数を判断します
Pythonクローラー|コグニティブクローラーのリクエストとレスポンス
NetweaverとWindows、Ubuntuデータ共有
詳細な並べ替えアルゴリズム(Pythonで実装)
pythonの一般的なエラーと解決策
Pythonは文字列と数値のスプライシングを実装します
Python関数の定義とパラメーターの説明
CentOSはPython3とpip3をすばやくインストールします
pythonクローラーのMongodbとpythonの相互作用
Python3をインストールし、CentOS8でansible
PDFおよびCDFの例を処理するPython
pythonはデータマイニングに適していますか
株で遊んでPythonを学んだ
centos7でpython3環境を構成し、
Pythonはjsonファイルを読み書きします