位串最近邻搜索

2023-12-11

我有数十万个长度为 32 位的稀疏位串。

我想对它们进行最近邻搜索,并且查找性能至关重要。我一直在阅读各种算法,但它们似乎针对文本字符串而不是二进制字符串。我认为局部敏感散列或频谱散列似乎都是不错的选择,或者我可以考虑压缩。这些中的任何一个都可以很好地解决我的位串问题吗?任何指示或指导将不胜感激。


这里有一个快速又简单的方法, 然后是以更多内存为代价获得更好性能的变体。

在:数组 Uint X[],例如1M 32 位字
想要:一个函数near( Uint q )--> j 小hammingdist( q, X[j] )
方法:二分查找q已排序X, 然后线性搜索周围的一个块。
伪代码:

def near( q, X, Blocksize=100 ):
    preprocess: sort X
    Uint* p = binsearch( q, X )  # match q in leading bits
    linear-search Blocksize words around p
    return the hamming-nearest of these.

这速度真快——二分查找100万字 + 大小为 100 的块中最近的 Hammingdist 在我的 Mac ppc 上花费 will vary.)

这距离找到真正最接近的 X[j] 有多近? 我只能实验,不能做数学:
对于 1M 随机单词中的 1M 随机查询, 最近的匹配项平均相差 4-5 位, vs. 3 距离为真正的最近(线性扫描全部 1M):

near32  N 1048576  Nquery 1048576  Blocksize 100 
binary search, then nearest +- 50
7 usec
distance distribution: 0 4481 38137 185212  443211 337321 39979 235  0

near32  N 1048576  Nquery 100  Blocksize 1048576 
linear scan all 1048576
38701 usec
distance distribution: 0 0 7 58  35 0

使用块大小(例如 50 和 100)运行数据 看看比赛距离如何下降。


To get even nearer, at the cost of twice the memory,
make a copy Xswap of X with upper / lower halfwords swapped, and return the better of
near( q, X, Blocksize )
near( swap q, Xswap, Blocksize )

有了大量内存,就可以使用更多的位混洗副本X, 例如32 次旋转。
我不知道性能如何随 Nshuffle 和 Blocksize 变化 - 这是 LSH 理论家面临的一个问题。


(Added): To near-match bit strings of say 320 bits, 10 words, make 10 arrays of pointers, sorted on word 0, word 1 ... and search blocks with binsearch as above:
nearest( query word 0, Sortedarray0, 100 ) -> min Hammingdist e.g. 42 of 320
nearest( query word 1, Sortedarray1, 100 ) -> min Hammingdist 37
nearest( query word 2, Sortedarray2, 100 ) -> min Hammingdist 50
...
-> e.g. the 37.

这当然会错过没有任何一个单词接近的近似匹配, 不过很简单,排序和binsearch就是炽热地快速地。 指针数组占用的空间与数据位完全相同。 100 个字、3200 位的工作方式完全相同。
但是:只有当 0 位和 1 位的数量大致相等时,这才有效, 不是 99%0 位。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

位串最近邻搜索 的相关文章

  • set 中的哈希表在 python 中如何工作?

    据我所知 set在python中通过哈希表来实现O 1 查找复杂度 虽然它是哈希表 但其中的每个条目set必须是可散列的 或不可变的 所以这种和平的代码引发了异常 gt gt gt dict Traceback most recent ca
  • 使用 YUIcompressor 压缩多个 JavaScript 文件?

    我正在尝试使用 YUI 压缩机压缩多个 JS 文件 我认为我的语法错误 我想压缩目录中以以下内容开头的所有文件at 然而 当 YUI 压缩机运行时 我发现 YUI 压缩机在输出中只放置了一个文件的压缩版本 具体来说 假设我有三个文件 at
  • 如何使用 Python GZip 模块压缩文件夹?

    我正在创建压缩文件 文件夹的 Python 软件 我将如何创建一段代码 要求用户输入文件夹位置 然后对其进行压缩 我目前拥有单个文件的代码 但没有包含完整文件的文件夹 请详细解释如何执行此操作 将文件夹压缩为 tar 文件的代码是 impo
  • MacOS X 上使用 crypt 进行 Python SHA512 加盐密码

    我正在尝试生成加密的密码字符串 类似于Linux中的 etc shadow 由于某种原因 我得到的输出是不同的 我有什么想法吗 一个比另一个长 不包括盐部分 usr bin python import crypt alg 6 SHA512
  • java中带有二维键的映射

    我想要一个在 Java 中由两个键索引的映射 在其中使用两个键放置和检索值的映射 需要明确的是 我正在寻找以下行为 map put key1 key2 value map get key1 key2 returns value map ge
  • 首次执行后 CPU 霍夫曼压缩速度更快?

    我最近用 C 构建了 Huffman 编码的 CPU 实现 我还在 CUDA 中构建了一个 GPU 版本来比较时间 但在测试 CPU 时间时遇到了一个问题 当通过压缩大文件 例如几乎包含字母表中的每个字母和各种其他 ascii 字符的 97
  • 如何跳过压缩一张 PNG?

    注意 我已经解决了这个问题 但花了很长时间才在这里发布问题 答案 Xcode 构建过程在构建时 优化 我的 PNG 这通常不是问题 但以这种方式处理的 iTunesArtwork 会导致其损坏 以致 iTunes 无法显示它 我怎样才能防止
  • Oh-my-zsh 哈希(井号)符号错误模式或未找到匹配项

    我很确定是与我的 Oh my zsh 配置相关的东西 但我不知道它是什么 当我在 git 命令中使用 符号时 但也适用于其他所有命令 例如 ls 2 我收到 错误模式 错误或 找不到匹配项 我猜是要计算一些东西 但我找不到在哪里配置它 I
  • hashlib 和 urandom 哪个更随机?

    我正在和一个朋友一起开发一个项目 我们需要生成随机哈希 在我们有时间讨论之前 我们都提出了不同的方法 并且因为他们使用不同的模块 我想问你们大家什么会更好 如果有这样的事情的话 hashlib sha1 str random random
  • http压缩和url压缩有什么区别?

    查看 Web config 中的节点 我发现它允许 httpCompression 和 urlCompression 元素 两者有什么区别 我只想执行标准 gzip 我应该使用哪一个 url压缩指定what压缩和http压缩表示how进行压
  • IIS 7.5 ASP.NET-4 Gzip 压缩

    我似乎无法为我的 ASP NET 4 应用程序启用 GZIP 压缩 似乎只有 javascript 文件被压缩 页面 CSS 和其他内容不会被压缩 未压缩的CSS文件的响应头是 Content Type text css Last Modi
  • 如何使用符号来标识 ruby​​ 方法中的参数

    我正在学习 Rails 并回到 ruby 来了解 Rails 中的方法 以及 ruby 的实际工作原理 当我看到如下方法调用时 validates first name presence gt true 我有点迷惑不解了 如何在 ruby
  • 如何使用KDTrees实现最近邻搜索?

    所以 我正在实施一个KD Tree http en wikipedia org wiki Kd tree进行最近邻搜索 我已经构建了树部分 但我认为我没有完全理解搜索部分 关于遍历树来搜索邻居 维基百科文章如下 Starting with
  • 如何对定义的字符集python中的所有可能的字符串进行加密?

    我试图加密定义的字符集中所有可能的字符串 然后将它们与用户输入给出的哈希进行比较 这就是我目前拥有的 import string from itertools import product import crypt def decrypt
  • 什么时候使用哈希表?

    什么情况下使用哈希表可以提高性能 什么情况下不能 哪些情况不适合使用哈希表 什么情况下使用哈希表可以提高性能 什么情况下不能 如果您有理由关心 请使用哈希表和您正在考虑的其他任何内容来实现 将您的实际数据放入其中 并衡量哪个性能更好 也就是
  • C++ 压缩字节数组

    大家好 我加载一组图像并生成体积数据 我将此体积数据保存在 无符号字符 体积 array 现在我想将此数组保存在文件中并检索 但在保存之前我想压缩字节数组 因为卷数据很大 这方面有什么建议吗 提前致谢 volume在你的例子中不是一个数组
  • 快速搜索压缩文本文件

    我需要能够在大量压缩文件 txt 中搜索文本 压缩可能会改变为其他东西 甚至成为专有的 我想避免解压所有文件并压缩 编码 搜索字符串并在压缩文件中搜索 这应该可以通过对所有文件使用相同的码本使用霍夫曼压缩来实现 我不想重新发明轮子 所以 任
  • 如何在 Ruby on Rails 中不使用 eval 将字符串转换为哈希值? [复制]

    这个问题在这里已经有答案了 这里是string需要转换成hash status gt label gt Status collection gt return misc definitions project status 我们不能使用ev
  • 非加密用途的最快哈希值?

    我本质上是在准备要放入数据库的短语 它们可能格式错误 所以我想存储它们的简短散列 我将简单地比较它们是否存在 所以散列是理想的 我假设 MD5 在处理 100 000 个请求时相当慢 所以我想知道散列短语的最佳方法是什么 也许推出我自己的散
  • 为什么即使我的哈希码值相同,“==”也会返回 false

    我写了一个像这样的课程 public class HashCodeImpl public int hashCode return 1 public static void main String args TODO Auto generat

随机推荐

  • 如何计算VBA中一个字符串出现在另一个字符串中的次数?

    如何计算 Access VBA 中一个字符串出现在另一个字符串中的次数 例如 我如何计算 The Quick Brown Fox Jumps Over the Lazy Dog 中 The 出现了多少次 因为您对子字符串 区分大小写没问题
  • 从 forEach 推送对象后数组保持为空

    需要帮助 我遇到数组保持空的问题从 forEach 推送对象后 我是否错过了什么 这是代码 const allStatus result forEach async element gt const count await BpCandid
  • 使用 Mac App Store 中 Safari 组件的应用程序的导出合规性

    我正在向 Mac App Store 提交一个应用程序 该应用程序使用 Safari 组件来显示网页 我被问到这个问题 您的应用程序是否设计为使用加密技术 或者是否包含或合并加密技术 即使您的应用程序仅使用 iOS 或 OS X 中提供的加
  • Swift - 整数转换为小时/分钟/秒

    我有一个 有点 关于时间转换的基本问题Swift 我有一个整数 我想将其转换为小时 分钟 秒 Example Int 27005会给我 7 Hours 30 Minutes 5 Seconds 我知道如何在 PHP 中执行此操作 但可惜 S
  • 打开抽屉菜单时重建脚手架主体

    我有一个有状态的小部件 它构建了一个脚手架 我在脚手架中使用一个抽屉作为侧面菜单 此外 Scaffold 的主体是一个 FutureBuilder 它从 firestore 数据库获取数据并将信息显示在主体的卡片中 打开抽屉时似乎出现问题
  • SQL 中“AS”是什么意思?

    下面是概要SELECT来自 PostgreSQL文档 在我看来 有时我们会写
  • DateTime 和 ASP.NET MVC 3 模型绑定的全球化问题

    我的应用程序在 ro RO 区域性设置下运行 在 web config 全球化部分中配置 如果我发出像这样的 POST 请求 POST myapp index date 03 12 2010 value something 模型绑定将此映射
  • IE8 在 JavaScript 弹出窗口上奇怪地崩溃

    创建弹出窗口后我遇到一个奇怪的问题onclick 弹出窗口打开 但在 IE8 上立即挂起 在包括 IE6 在内的所有其他浏览器上工作正常 但在添加alert如 JavaScript 代码中所示 弹出窗口工作正常 我在用 https 并不是
  • 如何在 TypeScript 中定义 Singleton

    在 TypeScript 中为类实现单例模式的最佳和最方便的方法是什么 有或没有延迟初始化 从 TS 2 0 开始 我们有能力定义构造函数的可见性修饰符 所以现在我们可以在 TypeScript 中执行单例 就像我们习惯在其他语言中一样 给
  • 非空约束上的 Hibernate JoinColumn 错误

    这是我的课程列表 MappedSuperclass public abstract class JpaModel Id Column name ID columnDefinition serial GeneratedValue strate
  • 除了 Davg 之外还有其他求平均值的方法吗?

    我在工作中继承了这个访问数据库 我正在寻找一种更快的方法来编写一些代码 目前运行该程序大约需要 1 5 分钟 我需要它更快 目前我已将其全部设置为 DAvg 和 DCount 但问题是它基本上打开和关闭其使用的每一行的查询 就其本身而言很好
  • Weblogic Prefer 应用程序包不工作

    我使用的是Weblogic 10 3 6门户服务器 Weblogic 10 3 6始终使用weblogic附带的common fileupload jar 但我希望服务器使用我在战争中拥有的服务器 用例是我有 war1 它使用 war2 内
  • 如果类型与类型说明符不匹配,printf 如何工作?

    int main printf c n return 0 这里根据类型说明符需要一个字符 但我们正在通过它const char 我希望它会在代码块 GNU GCC 编译器中给我一条警告消息 但它没有给我任何警告并打印 特点 为什么它不发出任
  • VS2010 中的扩展管理器错误?

    当我尝试从 VS2010 Ultimate 打开扩展管理器时 出现此错误 指定的路径 文件名或两者都太长 完全限定文件名 Microsoft Visual Studio 必须少于 260 个字符 目录名必须少于 248 个字符 我之前曾使用
  • 选择列时出现 KeyError

    我试图调用一个字段并收到错误 调用该表中的任何字段都会出现相同的错误 df ret pd read csv Retention Data csv na values print df ret Cohorts Retention Rate 这
  • 如何在Python中创建第二个None?创建一个 id 始终相同的单例对象

    警告 以下问题要求提供有关不良做法和脏代码的信息 建议开发商酌情决定 注意 这与在 Python 中创建单例问题是因为我们想要解决酸洗和复制以及正常的对象创建问题 目标 我想创造一个价值 称为NoParam 模拟的行为None 具体来说 我
  • 如何使用 log4j2 记录 CXF Web 服务请求?

    我想记录所有传入和传出CXF对特定日志文件的请求 但我通过以下配置得到的只是控制台输出 这里有什么问题吗 log4j2 xml
  • 如何停用浏览器中的缓存?

    例如 如果您退出雅虎邮件 然后单击后退按钮 它不会加载最后一页 而是将您重定向到登录页面 我必须用我的 PHP 代码来完成此操作 我正在使用 CodeIgniter 有些朋友告诉我禁用缓存 但这将是一件坏事 因为我的系统中有很多图像 每次都
  • 为什么 Safari 会重复 GET 请求,而 Chrome 却不会?

    Update TL DR 这可能是 Safari 和 或 Webkit 中的错误 更长的 TL DR 在 Safari 中 使用 Fetch API 发出 GET 请求后 当页面重新加载时 Safari 会自动 无意中 重新运行该请求即使发
  • 位串最近邻搜索

    我有数十万个长度为 32 位的稀疏位串 我想对它们进行最近邻搜索 并且查找性能至关重要 我一直在阅读各种算法 但它们似乎针对文本字符串而不是二进制字符串 我认为局部敏感散列或频谱散列似乎都是不错的选择 或者我可以考虑压缩 这些中的任何一个都