小编Luí*_*ues的帖子

在全文搜索中使用索引进行多字查询(例如,网络搜索)

我知道全文搜索的一个基本方面是使用倒排索引.因此,使用反向索引,单字查询变得微不足道.假设索引的结构如下:

some-word - > [doc385,doc211,doc39977,...](按等级排序,降序排序)

要回答该单词的查询,解决方案就是在索引中找到正确的条目(需要O(log n)时间)并从索引中指定的列表中显示一些给定数量的文档(例如前10个).

但是那些返回与两个单词相匹配的文档的查询呢?最直接的实现如下:

  1. 将A设置为具有单词1的文档集(通过搜索索引).
  2. 将B设置为具有单词2(同上)的文档集.
  3. 计算A和B的交点.

现在,第三步可能需要O(n log n)时间来执行.对于非常大的A和B,可能使查询缓慢回答.但像谷歌这样的搜索引擎总会在几毫秒内回复他们的答案.所以这不是完整的答案.

一个明显的优化是,由于像谷歌这样的搜索引擎无论如何都没有返回所有匹配的文档,我们不必计算整个交集.我们可以从最小的集合(例如B)开始,并找到足够的条目,这些条目也属于另一个集合(例如A).

但是,我们还不能有以下最糟糕的情况吗?如果我们设置A是与普通单词匹配的文档集,并且集合B是与另一个常用单词匹配的文档集,则可能仍然存在A∩B非常小的情况(即,组合很少).这意味着搜索引擎必须线性地遍历B的所有元素x成员,检查它们是否也是A的元素,以找到符合这两个条件的少数元素.

线性不快.并且您可以使用两个以上的单词进行搜索,因此仅使用并行性肯定不是整个解决方案.那么,这些案例如何优化?大型全文搜索引擎是否使用某种复合索引?布隆过滤器?有任何想法吗?

algorithm indexing search-engine full-text-indexing inverted-index

23
推荐指数
2
解决办法
4752
查看次数

基本的iPhone粘贴板用法

我试图在iPhone粘贴板中放入一些纯文本.以下代码似乎不起作用:

UIPasteboard *pboard = [UIPasteboard generalPasteboard];
NSString *value = @"test";
[pboard setValue: value forPasteboardType: @"public.plain-text"];
Run Code Online (Sandbox Code Playgroud)

我猜这个问题是在PasteBoard类型参数中.传递@"public.plain-text"什么也没有发生.传递kUTTypePlainText编译器抱怨指针类型不兼容,但不会崩溃,也没有任何反应.使用kUTTypePlainText似乎也需要链接MobileCoreServices,这在文档中没有提到.

cocoa-touch copy-paste uipasteboard ios

6
推荐指数
2
解决办法
1万
查看次数

查询的数据结构/算法:按A过滤,按B排序,返回N个结果

试想一下,你有一大组#m具有属性的对象AB.您可以使用哪种数据结构作为索引(或哪种算法)来提高以下查询的性能?

find all objects where A between X and Y, order by B, return first N results;
Run Code Online (Sandbox Code Playgroud)

也就是说,按范围过滤A并按排序B,但只返回前几个结果(例如,最多1000个).插入非常罕见,因此可以接受繁重的预处理.我开心以下选项:

  1. 与由乙排序记录(或索引):扫描中的记录/索引B顺序,返回第一个N,其中A相匹配XY.在最糟糕的情况下(很少的对象匹配范围XY,或匹配位于记录/索引的末尾),这变得O(m)很大,对于大型数据集来说,这m不够好.

  2. 使用按A排序的记录(或索引):执行二进制搜索,直到找到与范围XY匹配的第一个对象.扫描并创建k与范围匹配的所有对象的引用数组.按B排序数组,返回第一个数组N.那是O(log m + k + k log k).如果k很小那么确实如此O(log m),但如果k很大则排序成本甚至比所有m对象的线性扫描成本更差.

  3. 自适应2/1:对范围XY的第一个匹配进行二分搜索(使用A上的索引); 对该范围的最后一个匹配进行二进制搜索.如果范围很小,继续算法2; 否则回到算法1.这里的问题是我们回到算法1的情况.虽然我们检查了"很多"对象通过过滤器,这是算法1的好例子,但这个"很多"最多是一个常量(渐渐地,O(n)扫描将总是胜过O(k log k)排序).所以我们仍然有O(n)一些算法用于某些查询.

是否有算法/数据结构允许在次线性时间内回答此查询?

如果没有,那么达到必要性能的好处是什么呢?例如,如果我不保证返回对象的最佳排名 …

algorithm indexing search data-structures

6
推荐指数
1
解决办法
1719
查看次数

try-lock mutex call vs CAS calls

由于大多数系统中的互斥锁是使用CAS操作实现的,因此我想知道这两种结构的性能比较.

可以公平地说,如果使用CAS实现互斥锁,那么对于CAS操作,该互斥锁上的try-lock调用将是相同/相似的性能吗?

CAS,高度依赖于系统,我在想是否可以用它的更为人熟知/标准化的派生,mutex try-lock来代替它.

c multithreading posix mutex

5
推荐指数
1
解决办法
1005
查看次数

Chisel:将单独的输入和输出端口映射到 inout 引脚

我从 Chisel 3 源代码生成 Verilog,并使用 UCF 文件将 Verilog 的顶部模块端口映射到 FPGA 引脚。

我的设计中有一组输入输出引脚(SDRAM 数据引脚),在 Chisel 端必须将其表示为单独的输入和输出端口。问题是,我不能(AFAIK)然后将 Verilog 输入端口和输出端口映射到同一个 FPGA 引脚(如果我直接编写 Verilog,这些将是单个输入输出信号,因此这不会成为问题)并且我不知道如何强制 Chisel 3 从两个输入/输出 Chisel 端口生成单个 Verilog 输入输出端口。

Chisel (3) 中通常如何解决这个问题?

chisel

5
推荐指数
1
解决办法
1274
查看次数

Django在管理界面中订购了ManyToManyField

我有一个遗留数据库,其中包含文档和作者的表格.第三个表定义了文档和作者之间有序的多对多关系,使用文档和作者的外键以及指定给定文档的作者顺序的整数.

使用Django 1.1.1(或SVN),有没有办法在管理页面中编辑文档作者及其顺序?

django django-admin

3
推荐指数
1
解决办法
703
查看次数

凿3分配到位范围

这似乎在凿子2中有效,但现在不起作用:

class TestX extends Module
{
    val io = IO(new Bundle {
        val a = Output(UInt(width=2))
    })

    io.a(1, 0) := UInt(0)
}
Run Code Online (Sandbox Code Playgroud)

错误:[模块TestX]表达式T_4用作FEMALE,但只能用作MALE。

此更改的解决方法是什么?

chisel

3
推荐指数
1
解决办法
372
查看次数