忍耐力がある場合は読んでください (アルゴリズムは依然として重要です)
ユーザーの初期重み: Enable = 0; ユーザーが最初の権限を持っている場合、ユーザーの重み: Enable = Enable + 1; 2 番目の権限 [Power Insert] を選択すると、ユーザーの権限は次のようになります: Enable = Enable + 2 ユーザーが 3 番目の権限を持つ場合、ユーザーの権限は次のようになります。次に、ユーザーのパワー値: Enable = Enable + 8; なぜ +1、+2、+3、+4 ではなく、+1、+2、+4、+8 の順になるのでしょうか?
+1、+2、+3、+4 の場合:
ユーザーが最初の右側の Select を持っている場合、ユーザーの重みは次のようになります: Enable = Enable + 1
ユーザーが 2 番目の右側の Insert を持っている場合、ユーザーの重み: 有効 = 有効 + 2
ユーザーが 3 番目の権限「更新」を持っている場合、ユーザーの重みは次のようになります。
ユーザーが 4 番目の権限「削除」を持っている場合、ユーザーの重みは次のようになります。 = Enable + 4;
ユーザーのパワー値: Enable = 3 の場合、ユーザーが
最初のパワー Select と 2 番目のパワー Insert の両方を持っているか、それとも 3 番目のパワー Update のみを持っているかを判断できません。
前者の重みアルゴリズムは回避できます。この状況。
しかし、前の重みアルゴリズムを使用する場合、ユーザーの重みからユーザーがどの権利を持っているかを素早く知るにはどうすればよいでしょうか?ユーザー権利の値が Enable = 5 の場合、ユーザーには最初の権限「Select」と 3 番目の「Update」権限が与えられます。
ユーザーには 2 番目の権限「Insert」がないことに注意してください。
以下にユーザー権限をリストします:
Power Ownership User's Weight Enable
SelectItem: (1, 3, 5, 7, 9, 11, 13, 15)
InsertItem: (2, 3, 6, 7, 10 , 11) 、14、15 )
UpdateItem: ( 4、5、6、7、12、13、14、15 )
DeleteItem: (8, 9, 10, 11, 12, 13, 14, 15)
Enable の重みが大きいユーザーには「より多くの」権限がないことがわかります。
ユーザーの重み Enable = 3 の場合、ユーザーは。これには、最初の権限 (選択) と 2 番目の権限 (挿入) の合計 2 つの権限があります。
ユーザー権限の値は有効 = 4 です。ユーザーは 3 番目の権限 (更新) を持ち、これは 1 つの権限だけです。
「ユーザーパワーリスト」をよく見てください:
SelectItem: (1, 3, 5, 7, 9, 11, 13, 15): 1 = 0 + 2 の 0 乗; 3 = 2 の 1 乗 + 2 の 0 乗; 5 = 2 の 2 乗 + 2 の 0 乗;
InsertItem: (2、3、6、7、10、11、14、15): 2 = 0 + 2 の 1 乗; = 2 の 0 乗 + 2 の 1 乗; 6 = 2 の 2 乗 + 2 の 1 乗
UpdateItem: (4, 5, 6, 7, 12, 13, 14, 15): 4 = 0 + 2 の 2 乗; 5 = 2 の 0 + 2 の乗; 6 = 2 の 2 乗 + 2 の 2 乗; 、11、12、13、14、15): 8 = 0 + 2 の 3 乗; 9 = 2 の 0 乗 + 2 の 3 乗 10 = 2 の 1 乗 + 2 の 3 乗
ルールは次のように要約されます:
最初の累乗を持つユーザーの重み、選択: Enable = ? + 2 の 0 乗 (ここで、? は 2 の N 乗の合計にも分割する必要があります)
2 番目の累乗を持つユーザーの体重、挿入: Enable = ? + 2 の 1 乗; (ここで、? は 2 の N 乗の合計に分割する必要があります)
ユーザーの体重を更新する 3 番目の累乗を持ちます。 Enable = ? + 2 の 2 乗; ( このうち、? も 2 の N 乗の和で割る必要があります)
ユーザーの重みを削除します: Enable = ? + 2 の 3 乗;ここで ? も 2 の N 乗に分割する必要があります)
この時点ですでに非常に明確です:
ユーザーの重み Enable が 2 の N 乗の合計に分割される限り、
N=0 の場合、 1 乗の Select を所有、
そのうち N=1 なら 2 乗 Insert、
そのうち N=2 なら 3 乗 Update、
そのうち N=3 なら 4 乗 Delete ,
では、ユーザーの重み Enable を 2 の N 乗に分割して加算する場合はどうでしょうか?
はは! Enable をバイナリに変換し、基数を右から左に取得するだけです。基数がビットの場合、それに対応する権利があります:
(11)10=(1011)2、つまり最初の値を持ちます。 2 乗と 4 乗は、「ユーザー パワー リスト」と一致します。つまり、3 乗と 4 乗があり、「ユーザー パワー リスト」と一致します。
(15)10=(1111)2、つまり 3 乗です。1、2、3、4 乗は、「ユーザー パワー リスト」と一致します。
適切なレベルが非常に複雑な場合、アルゴリズムはユーザーのパワーをすぐに知ることができます:
例:
合計 8 レベル、ユーザーの重み Enable=67 ;(67)10=(1000011)2、つまり、1 番目、6 番目、および 7 番目のパワーがあります。
ユーザーべき乗値 Enable=67; (159)10=(10011111)2、つまり、1、4、5、6 乗、7 または 8 乗を持ちます。
以上、時間を無駄にせず、インスピレーションを与えていただければ幸いです。