Python
 Computer >> コンピューター >  >> プログラミング >> Python

PythonでDeleteGetRandomO(1)を挿入します


平均O(1)時間で以下のすべての操作をサポートするデータ構造があるとします。

  • insert(val)-これは、アイテムvalがまだ存在しない場合、セットに挿入します。

  • remove(val)-これにより、アイテムvalが存在する場合、セットから削除されます。

  • getRandom-これは、現在の要素のセットからランダムな要素を返します。各要素は、返される確率が同じである必要があります。

これを解決するには、次の手順に従います-

  • 初期化には、親マップと要素配列を定義します

  • insert()関数の場合、入力としてvalを取ります

    • valが親マップに存在しない場合、またはparent [val] =0の場合、要素にvalを挿入し、parent [val]:=1を設定して、trueを返します

  • falseを返す

  • remove()メソッドの場合、削除するにはvalが必要です

  • valが親マップに存在しない場合、またはparent [val] =0の場合、falseを返します

  • 親を設定[val]:=0

  • index:=要素配列のvalのインデックス

  • インデックスが要素の長さと同じでない場合– 1

    • temp:=要素の最後の要素

    • 要素の最後の要素を設定します:=val

    • set elements [index]:=temp

  • 要素の最後の要素を削除する

  • getRandom()メソッドは、要素配列に存在するランダムな値を返します

例(Python)

理解を深めるために、次の実装を見てみましょう-

import random
class RandomizedSet(object):
   def __init__(self):
      self.present = {}
      self.elements = []
   def insert(self, val):
      if val not in self.present or self.present[val] == 0:
         self.elements.append(val)
         self.present[val] = 1
         return True
      return False
   def remove(self, val):
      if val not in self.present or self.present[val] == 0:
         return False
      self.present[val] = 0
      index = self.elements.index(val)
      if index!=len(self.elements)-1:
         temp = self.elements[-1]
         self.elements[-1] = val
         self.elements[index]=temp
      self.elements.pop()
      return True
   def getRandom(self):
      return random.choice(self.elements)
ob = RandomizedSet()
print(ob.insert(1))
print(ob.remove(2))
print(ob.insert(2))
print(ob.getRandom())
print(ob.remove(1))
print(ob.insert(2))
print(ob.getRandom())

入力

Initialize the class, then call the insert(), remove(), getRandom() functions. See the implementation.

出力

True
False
True
2
True
False
2

  1. TkinterPythonの折りたたみ可能なペイン

    TkinterはPythonのGUI構築ライブラリです。この記事では、折りたたみ可能なペインを作成する方法を説明します。 GUIキャンバス上に大量のデータを表示する必要があるが、常に表示したくない場合に便利です。折りたたみ可能になっているため、必要に応じて表示できます。 以下のプログラムは、矢印を拡大および縮小した後の結果を表示する折りたたみ可能なペインを作成します。コードコメントは、各ステップで採用するアプローチを示しています。 例 from tkinter import * import tkinter as tk from tkinter import ttk from tkinter

  2. Pythonでの継承

    この記事では、Python3.xでの継承と拡張クラスについて学習します。またはそれ以前。 継承は実際の関係をうまく表し、再利用性を提供し、推移性をサポートします。開発時間が短縮され、メンテナンスが容易になり、拡張も容易になります。 継承は大きく5つのタイプに分類されます- シングル 複数 階層的 マルチレベル ハイブリッド 上の図に示されているように、継承とは、実際に親クラスのオブジェクトを作成せずに、他のクラスの機能にアクセスしようとするプロセスです。 ここでは、単一の階層型継承の実装について学習します。 単一継承 例 # parent class class Studen