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

Pythonでビット配列を使用して配列の重複を検索する


n個の異なる数値の配列があるとします。 nは最大で32,000にすることができます。配列に重複するエントリがある可能性があり、nの値がわかりません。 4キロバイトのメモリしかない場合、アレイ内のすべての重複をどのように表示しますか?

したがって、入力が[2、6、2、11、13、11]の場合、2と11が指定された配列に複数回表示されるため、出力は[2,11]になります。

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

1バイト配列型のデータ構造bit_arrを作成します。次のメソッドがあります

  • コンストラクターの定義これにはnが必要です

  • arr:=サイズの配列(n / 2 ^ 5)+ 1、0で埋める

  • 関数get_val()を定義します。これには時間がかかります

  • インデックス:=pos / 2 ^ 5

  • bitNo:=pos AND 31

  • (arr [index] AND(2 ^ bitNo))が0と同じでない場合はtrueを返します

  • 関数set_val()を定義します。これには時間がかかります

  • インデックス:=pos / 2 ^ 5

  • bitNo:=pos AND 31

  • arr [index]:=arr [index] OR(2 ^ bitNo)

  • メインの方法から、次のようにします-

  • arr:=bit_arr(320000)

  • 0からarrのサイズまでの範囲のiの場合、実行します

    • num:=arr [i]

    • arr.get_val(num)がゼロ以外の場合、

      • 表示番号

    • それ以外の場合

    • arrのset_val(num)

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

class bit_arr:
   def __init__(self, n):
      self.arr = [0] * ((n >> 5) + 1)
   def get_val(self, pos):
      self.index = pos >> 5
      self.bitNo = pos & 31
      return (self.arr[self.index] & (1 << self.bitNo)) != 0
   def set_val(self, pos):
      self.index = pos >> 5
      self.bitNo = pos & 31
      self.arr[self.index] |= (1 << self.bitNo)
def is_duplicate(arr):
   arr = bit_arr(320000)
   for i in range(len(arr)):
      num = arr[i]
      if arr.get_val(num):
         print(num, end = " ")
      else:
         arr.set_val(num)
arr = [2, 6, 2, 11, 13, 11]
is_duplicate(arr)

入力

[2, 6, 2, 11, 13, 11]

出力

2 11

  1. Pythonプログラムで配列の合計を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n):    # using built-in function    return(sum(arr)) # main arr = [11,22,33,44,55,66

  2. 配列の合計を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '