小编Bjö*_*ist的帖子

您如何有效地实施文档相似性搜索系统?

您如何为由一组标签描述的项目实施“类似项目”系统?

在我的数据库中,我有三个表,文章、文章标签和标签。每篇文章通过多对多关系与多个标签相关联。对于每篇文章,我想找到五篇最相似的文章来实现“如果你喜欢这篇文章,你也会喜欢这些”系统。

我熟悉余弦相似度 并且使用该算法效果很好。但这是减慢的方法。对于每篇文章,我需要遍历所有文章,计算文章对的余弦相似度,然后选择相似度最高的五篇文章。

有20万篇文章和3万个标签,计算一篇文章的相似文章需要半分钟。所以我需要另一种算法,它产生的结果大致与余弦相似度一样好,但可以实时运行,并且不需要我每次都遍历整个文档语料库。

也许有人可以为此提出现成的解决方案?我看过的大多数搜索引擎都没有启用文档相似性搜索。

search trigonometry recommendation-engine similarity

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

关于C++中垃圾收集的标记扫描(懒惰方法)?

我知道参考计数器技术,但直到今天才阅读名为"编程语言概念"的书,从未听说过标记扫描技术.
根据这本书:

垃圾收集的原始标记扫描过程如下操作:运行时系统根据请求分配存储单元,并根据需要断开指针与单元的连接,而不考虑存储回收(允许垃圾累积),直到它已分配所有可用单元.此时,开始标记扫描过程以收集堆中剩余的所有垃圾.为了便于该过程,每个堆单元具有由收集算法使用的额外指示符位或字段.

根据我的有限理解,C++库中的智能指针使用引用计数技术.我想知道C++中有没有使用这种智能指针实现的库?由于这本书纯粹是理论上的,我无法想象实现是如何完成的.举例说明这个想法将是非常有价值的.如果我错了,请纠正我.

谢谢,

c++ garbage-collection mark-and-sweep

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

这个BatchUpdateException是什么意思?

我从stmt.executeBatch()语句中获取此BatchUpdateException:

BatchUpdateException: A resultset was created for update
Run Code Online (Sandbox Code Playgroud)

互联网上没有关于此异常消息的任何信息.这是什么意思?除了存储过程失败之外,回溯不包含任何有用的内容.

java exception sqlexception batch-updates

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

找到项目对之间的全局最小距离的算法

项目广告将与项目0-3配对,使得所有项目对之间的总距离最小化.例如,此矩阵可以描述第一组中每个项目与其对应组中的项目之间的距离:

[[2, 2, 4, 9],
 [4, 7, 1, 1],
 [3, 3, 8, 3],
 [6, 1, 7, 8]]
Run Code Online (Sandbox Code Playgroud)

这应该意味着距离'a' - >'0'是2,从'a' - >'1'是2,从'a' - >'2'是4,'a' - >'3 '是9.从'b' - >'0'它是4,依此类推.

是否有一种算法可以将每个字母与一个数字匹配,从而使总距离最小化?例如:

[('a', 1), ('b', 3), ('c', 0), ('d', 2)]
Run Code Online (Sandbox Code Playgroud)

将是一个总距离的合法解决方案:2 + 1 + 3 + 7 = 13.由于现实世界中有超过四个项目的群组,因此无法对所有可能的组合进行强制和测试.

algorithm distance mathematical-optimization minimum

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

mprotect 有多快

我的问题是有多快mprotect。保护 1 MB 连续内存与 1 GB 连续内存相比有何区别?我当然可以测量时间,但我想知道幕后情况。

c linux mmap mmu

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

Linux模拟到Windows GetAsyncKeyState()

是否有一些Linux模拟的Windows函数GetAsyncKeyState()?或者可能存在一些返回的异步函数 - 键盘缓冲区是否为空?

谢谢.

c linux fedora keyboard-input

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

垃圾收集器如何识别根

标记清除垃圾收集器的第一阶段是标记(查找)堆上的所有活动对象。要做到这一点,必须有一个起点或根,所有标记都是从那里开始的。GC 如何识别这样的根?

java garbage-collection jvm gc-roots

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

在 Haskell 中以通用方式导航 JSON 对象

我的目标是在 Haskell 中编写一个程序,该程序采用 json 文件的名称,并将其余参数解释为导航该 json 文件的路径并打印导航到的值。问题是因为 JSON 可以包含多个值类型,我不知道如何让 Haskell 的类型系统理解我想要的。这是带有“导航”功能的 Haskell 代码,我无法正确实现:

import qualified Data.Aeson as A
import qualified Data.ByteString.Char8 as BS
import qualified Data.ByteString.Lazy.Char8 as BSL
import Data.List
import Data.Maybe
import System.Environment

parse :: String -> A.Value
parse = fromJust . A.decode . BSL.pack

isInteger xs = case reads xs :: [(Integer, String)] of
    [(_, "")] -> True
    _ -> False

navigate :: A.Value -> String -> String
navigate value [] = value
navigate value [x:xs]
    | isInteger …
Run Code Online (Sandbox Code Playgroud)

python json haskell casting aeson

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

对浮点数求和的最佳 OpenCL 2 内核是什么?

C++ 17 引入了许多新算法来支持并行执行,特别是std::reduce是std::accumulate的并行版本,它允许浮点加法等操作non-deterministic的行为。non-commutative我想使用 OpenCL 2 实现一个归约算法。

Intel这里有一个示例,它使用 OpenCL 2work group内核函数来实现std::exclusive_scan OpenCL 2 内核。以下是基于英特尔exclusive_scan示例的内核求和浮点数:

kernel void sum_float (global float* sum, global float* values)
{
  float sum_val = 0.0f;

  for (size_t i = 0u; i < get_num_groups(0); ++i)
  {
    size_t index = get_local_id(0) + i * get_enqueued_local_size(0);
    float value = work_group_reduce_add(values[index]);
    sum_val += work_group_broadcast(value, 0u);
  }

  sum[0] = sum_val;
}
Run Code Online (Sandbox Code Playgroud)

上面的内核可以工作(或者看起来可以!)。然而,exclusive_scan要求work_group_broadcast函数将最后一个值 1 传递work …

c++ gpgpu opencl c++17 sycl

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

找到最长的相邻重复非重叠子串

(这个问题与音乐无关,但我将音乐用作用例的示例。)

在音乐中,构建乐句的常用方法是将中间部分重复一次或多次的一系列音符。因此,该短语由介绍、循环部分和结尾组成。这是一个例子:

[ E E E F G A F F G A F F G A F C D ]
Run Code Online (Sandbox Code Playgroud)

我们可以“看到”前奏是[EEE],重复部分是[FGA F],结尾是[CD]。所以拆分列表的方法是

[ [ E E E ] 3 [ F G A F ] [ C D ] ]
Run Code Online (Sandbox Code Playgroud)

其中第一项是前奏,第二项是重复部分的重复次数,第三部分是尾声。

我需要一个算法来执行这样的拆分。

但是有一个警告是可能有多种方法来拆分列表。例如,上面的列表可以拆分为:

[ [ E E E F G A ] 2 [ F F G A ] [ F C D ] ]
Run Code Online (Sandbox Code Playgroud)

但这是一个更糟糕的分裂,因为前奏和后奏更长。所以算法的标准是找到最大化循环部分长度和最小化前奏和后奏组合长度的分割。这意味着正确的拆分为

[ A C C C C C C C C C A ] …
Run Code Online (Sandbox Code Playgroud)

python language-agnostic algorithm substring string-algorithm

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