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
-
Pythonプログラムで配列の合計を見つける
この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −配列の合計を計算するために必要な配列が与えられます。 合計を取得するために各インデックスで配列と要素全体をトラバースするブルートフォースアプローチについては、以下で説明します。合計を取得するための各インデックスについては、以下で説明します。 例 # sum function def sum_(arr,n): # using built-in function return(sum(arr)) # main arr = [11,22,33,44,55,66
-
配列の合計を見つけるPythonプログラム
この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 入力として配列が与えられた場合、与えられた配列の合計を計算する必要があります。 ここでは、ブルートフォースアプローチに従うことができます。つまり、リストをトラバースし、各要素を空の合計変数に追加します。最後に、合計の値を表示します。 以下で説明するように、組み込みの合計関数を使用して別のアプローチを実行することもできます。 例 # main arr = [1,2,3,4,5] ans = sum(arr,n) print ('Sum of the array is '