假设我有一个大的M 32位整数数组,其中每个值设置不超过N位.现在我想返回匹配查询Target AND Value == Target的子集,即目标位出现在数组值中的值.
蛮力很容易,只需迭代数组并提取target&value == target.如果M变得非常大,这变得太慢了.任何人都知道如何将数组转换为更适合搜索的数据结构?
一种方法是为每个位存储数组或值(因此对于32位数组,您需要其中的32个),然后仅搜索与目标值中的每个位匹配的值.除非N接近32或目标接近N位设置,否则这会有所帮助.由于我所寻找的基本上是部分匹配,散列或排序似乎没有帮助.
确切的正确结果是必需的.这将无需访问并行硬件(如GPU或使用SIMD).
我将使用C++,但只是一些指向算法或想法的指针是好的.最可能的情况是M = 100000和N = 8并且经常被调用.
重申一点:我需要部分匹配(如item = 011000匹配目标= 001000)不完全匹配.尽管M项是提前知道的,但目标的可能值可以是任何值.
我终于决定坚持使用蛮力.对于80,000件物品,不值得做其他任何事情.我想如果数据集的大小更像是800,000,000,那么它可能是值得的.
我对另一个问题感到沮丧.所以我写了这个例子.
int main()
{
printf("%d", 1 && 2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
Run Code Online (Sandbox Code Playgroud)
在C#中.这是假的.为什么这是假的?此外,我不明白为什么我需要在这个例子中创建bool运算符,但不是在我的另一个问题,但无论如何.为什么以下是假的?对我来说完全是无稽之谈.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyInt a=1, b=2;
bool res=a && b;
Console.WriteLine("result is {0}", res);
}
class MyInt
{
public int val;
public static bool operator true(MyInt t) { return t.val != 0; }
public static bool operator false(MyInt t) { return t.val == 0; …Run Code Online (Sandbox Code Playgroud) 我很确定这是我新手PHP知识中的一个简单的基本缺陷,但是当发生以下情况时我感到很惊讶:

$result是TRUE......那为什么它被认为等于字符串"email"?我猜这是因为,从技术上讲,它是一个bool而且它不是假的?因此,当它与字符串(例如"email")进行比较时,它返回true.
我应该更改我的方法作为string包含"true"(而不是return true;成功)的结果返回,还是我应该采取另一种方式?
谢谢.
如果我有这样的产品总和z*a + z*b + z*c + ... + z*y,就可以z在括号之前移动因子,这是相同的:z(a + b + c + ... y).
我想知道如果使用按位XOR而不是乘法,可能(如果是)可以做同样的技巧.
z^a + z^b + ... z^y -> z^(a + b + ... + y)
a, b, c ...在添加之前,或许应该进行预处理,例如逻辑否定或其他内容?z可能会发生变化,因此如果需要,预处理不应该依赖于特定的z价值.
c++ boolean-logic multiplication logical-operators boolean-operations
他们有理由这样做吗?我的意思是,在minterms的总和中,你用输出1寻找条件; 我不明白为什么他们称之为"minterms".为什么不是maxterms因为1大于0?
这背后有什么理由我不知道吗?或者我应该接受它而不问为什么?
logic boolean-logic boolean boolean-expression boolean-operations
是否存在可以对路径执行布尔运算的Javascript库(贝塞尔曲线)?
我知道Paper.js和Raphael.js,但现在都无法执行这些操作.
可能重复:
为什么没有|| =或&& =运算符?
通过纯粹的意外,我今天发现了
a &= GetBool();
Run Code Online (Sandbox Code Playgroud)
是不一样的
a = a && GetBool();
Run Code Online (Sandbox Code Playgroud)
多年来我一定误解了这一点.在第一个例子中,GetBool()即使"a"为假,也执行"".在第二个,它不是.
在C#中有什么东西可以实现"&& ="吗?
我正在尝试找出上述例程之间的区别以及if语句是否像
say $y.Bool;
say $y.so;
say ? $y;
say so $y;
Run Code Online (Sandbox Code Playgroud)
会产生不同的结果。
到目前为止,对我而言,唯一明显的区别是?优先级高于so。.Bool而.so似乎是完全同义。这是正确的,(实际上)是完整的故事吗?
c# ×3
boolean ×2
algorithm ×1
arrays ×1
bezier ×1
c++ ×1
conditional ×1
html5-canvas ×1
javascript ×1
logic ×1
optimization ×1
perl6 ×1
php ×1
svg ×1
swift ×1