我正在尝试设置一种算法,该算法可以判断

时间:2015-09-24 19:22:46

标签: algorithm

我在Java中添加了两位比特的相应位,如下所示:

1 0 1 1 0 0
1 0 1 0 1 0
====================
2 0 2 1 1 0

在此之后我将结果添加为:

2+0+2+1+1+0 = 6

现在,我必须在结果(6)中找出匹配位和非匹配位的1ns和2s的数量。我努力设置这样一个算法,它可以告诉我结果由1ns和2s组成的确切数量,但到目前为止我无法创建任何数据。 它允许每个加法结果乘以常数。可以减去各个位以实现上述目标。

更多细节: 我使用Pascal Paillier同态算法来加密这些单独的位。 Pascal Paillier仅支持加密数据,因此我只需添加。我必须将此号码发送给某些应用程序,这些应用程序必须找出1ns和2s的确切数量。

更新 我也可以像上面添加的那样将这些单位相乘。但我不能添加这些位也不是结果。比特可以与自身或任何其他比特相乘。即使我可以用我选择的数字来表示这些位。那就是我可以说1 = 2和0 = 3然后我可以:

添加(Pascal Paillier):

2 3 2 2 3 3
2 3 2 3 2 3
====================
4 6 4 5 5 9

对于乘法(RSA)

2 3 2 2 3 3
2 3 2 3 2 3
====================
4 9 4 6 6 9

唯一的目的是找出相似位(1& 1)的数量,并通过添加来生成总数中的非相似位(0& 1,1& 0) (Pascal Paillier)或乘法(RSA)。 此外,第二比特流可以用与上述不同的数字表示。

以下也可以使用:

  1. 使用位和结果进行乘法,并使用常数
  2. 进行指数运算
  3. 比特和结果之间的加法/减法和仅与常数相乘

3 个答案:

答案 0 :(得分:0)

正如@sbelaikov在他的评论中指出的那样,数学并不允许这样做。

您的最终结果是数字数组的总和,可以是0,1或2.在您的示例中,此数字为6.我们将调用此sum

sum等于1的数量加上两倍的两倍数。

sum = ones +(2 * twos

您有一个已知变量,即sum。您有两个未知变量onestwos。要求解方程组,需要另一个方程式。您的数据不足。

答案 1 :(得分:0)

我希望我能正确理解你的问题:如果你想知道x是多少1ns和2s,那就没有独特的解决方案。 想象一下数字100。现在告诉我那里有多少人和两个人。 100个和0个两个? 0个和50个两个?或者80个和10个两个?

另一个例子:您的号码为xy,而x为除数,y为分组的余数。

让我们将x设为3,将y设为2.现在找到被除数。再次,这是不可能的,因为11/3离开2,但也是:14/3; 17/3; 20/3等等..

您可以做两种可能的事情:

  • 以某种方式抓住数字然后才能得到总和
  • 或者,如果您的情况有用,请计算1ns和2s的所有组合,总计达目标数。 但是:如果您尝试这样做,您可能会面对{{3>} NP-Complete

答案 2 :(得分:0)

最后,我找到了问题的解决方案。这是找出1ns和2s的算法:

步骤:

添加加密流 添加后的消息空间为[0,1,2] 将在结果输出上创建基数为3的多项式,如a1X ^ 1,a2X ^ 2 .. anX ^ n其中a1..an是密文加法的输出,属于[0,1,2]和X = 3 将添加所有多项式项 通过使用基数3的对数,我们将得到3的幂,其关闭为“不”。 Array bits []将用于跟踪1ns和2s



 no =  sum_of_polynomial_terms
log_base = 3
while (no > 0)
{
    x1 = Find_log(no, log_base);
    no = no - log_base^x1;
    bits[x1]++;
}