从一组中找到多个最大不同的二元向量

2024-01-04

考虑集合,S,所有长度的二进制向量n其中每个恰好包含m那些;所以有n-m每个向量中的零。
我的目标是构建一个数字,k,向量来自S使得这些向量彼此尽可能不同。

举个简单的例子,n=4, m=2 and k=2,那么可能的解是:[1,1,0,0]和[0,0,1,1]。

这似乎是编码理论文献中的一个开放问题(?)。

有什么方法(即算法)可以找到次优但良好的解决方案吗?
在这种情况下,汉明距离是正确的性能衡量标准吗?

一些想法:
In 这张纸 http://emis.impa.br/EMIS/journals/EJC/Volume_13/PDF/v13i1a2.pdf,作者提出了几种算法来查找向量子集,使得成对汉明距离 >= 某个值,d.
我已经实现了随机方法如下:取一组SS,它由任意向量初始化S。然后,我考虑剩余的向量 在S。对于每个向量,我检查该向量是否至少有一个距离d对于每个向量SS。如果是这样,则将其添加到SS.
通过取最大可能的d,如果大小为SS是 >=k,然后我考虑SS作为最佳解决方案,我选择的任何子集k向量来自SS。 使用这种方法,我认为结果SS将取决于初始向量的身份SS;是。有多种解决方案(?)。
但如果尺寸SS是 k ?
从论文中提出的算法来看,我只了解了随机算法。我对二进制词典搜索(第 2.3 节)感兴趣,但我不知道如何实现它(?)。


也许你会发现这张纸 http://btw2017.informatik.uni-stuttgart.de/slidesandpapers/F8-11-13/paper_web.pdf有用(我写的)。它包含有效创建位串排列的算法。

例如,inc()算法:

long  inc(long h_in , long m0 , long m1) {
    long  h_out = h_in | (~m1); //pre -mask
    h_out ++;
    // increment
    h_out = (h_out & m1) | m0; //post -mask
    return  h_out;
}

它需要一个输入h_in并返回下一个更高的值,该值至少比h_in并“匹配”边界m0 and m1。 “匹配”意味着:结果有一个1无论在哪里m0 has a 1,结果有一个0无论在哪里m1 has a 0。不是那个h_in必须是关于以下方面的有效值mo and m1!另外,请注意m0必须按位小于m1, 意思就是m0不能有一个1处于一个位置m1 has a 0.

这可用于生成与给定输入字符串具有最小编辑距离的排列:

假设你有0110,你首先将其否定1001(编辑距离=k)。 设置“m0=1001”和“m1=1001”。使用它只会导致“1001”本身。

现在获取具有编辑距离的所有值k-1,您可以执行以下操作,只需翻转其中一位m0 or m1, then inc()将返回所有位串的有序序列,其差异为k or k-1.

我知道,还不是很有趣,但是你可以修改k位,以及inc()将始终返回具有最大允许编辑差异的所有排列关于m0 and m1.

现在,为了得到all排列,您将不得不使用所有可能的组合重新运行算法m0 and m1.

示例:获取所有可能的排列0110与编辑距离2,您必须使用以下排列来运行 inc()m0=0110 and m1=0110(为了获得排列,必须有一个位位置expanded, 意思是m0被设定为0 and m1被设定为1:

  • 位 0 和 1expanded: m0=0010 and m1=1110
  • 位 0 和 2expanded: m0=0100 and m1=1110
  • 位 0 和 3expanded: m0=0110 and m1=1111
  • 位 1 和位 2expanded: m0=0000 and m1=0110
  • 位 1 和位 3expanded: m0=0010 and m1=0111
  • 位 2 和位 3expanded: m0=0100 and m1=0111

作为起始值h_0我建议简单地使用m0。迭代可以中止一次inc()回报m1.

Summary上述算法生成O(x) all x至少有差异的二元向量y来自给定向量的位(可配置)v.

使用你的定义n=number of bits in a vector v, 环境y=n生成 1 个与输入向量完全相反的向量v. For y=n-1,它会生成n+1向量:n除一位以外所有位均不同的向量和所有位均不同的 1 个向量。等等不同的值y.

**编辑:在上面的文本中添加了摘要并用“NEGATE”替换了错误的“XOR”。

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

从一组中找到多个最大不同的二元向量 的相关文章

  • 为什么jdk中没有ConcurrentLinkedHashMap类?

    这个问题直接接着问从我之前的问题来看 https stackoverflow com q 12299731 1527084 我想我的第二个问题的答案是否定的 所以我想了解为什么 java util concurrent 包中没有 Concu
  • 按百分比减少多边形面积

    我有一个由点 x y 组成的多边形 我想做的是将其减少一个百分比 请记住 我不想只是扩大规模 多边形应该有一种内部边界 其宽度取决于百分比 该内部边界被多边形切断 谁知道可以实现这一目标的算法 输入 点数组 百分比 输出 点数组 你所寻求的
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 使到 n 个点的集合的欧氏距离之和最小的点

    我有一组点W x1 y1 x2 y2 xn yn 在 2D 平面上 你能找到一种算法 将这些点作为输入并返回一个点 x y 在 2D 平面上 距以下点的距离之和最小W 换句话说 如果 di Euclidean distance x y xi
  • 从日志文件中获取前 100 个 URL

    我的一位朋友在接受采访时被问到以下问题 谁能告诉我如何解决它 我们有一个相当大的日志文件 大约 5GB 日志文件的每一行都包含一个用户在我们网站上访问过的 URL 我们想要找出用户访问最多的 100 个 URL 怎么做 如果我们有超过 10
  • 缩短文本并仅保留重要句子

    德国网站 nandoo net 提供了缩短新闻文章的可能性 如果使用滑块更改百分比值 文本会发生变化并且某些句子会被遗漏 您可以在这里看到它的实际效果 http www nandoo net read article 299925 http
  • 如何求解:T(n) = T(n - 1) + n

    我已经解决了以下问题 T n T n 1 n O n 2 现在 当我解决这个问题时 我发现界限非常松散 我是否做错了什么 或者只是这样 您还需要一个递归关系的基本情况 T 1 c T n T n 1 n 为了解决这个问题 您可以首先猜测一个
  • 如何高效地在屏幕上精确绘制N个点?

    这听起来是一个简单的问题 但我发现要获得良好的性能是非常棘手的 我提出的第一个算法是随机绘制点 从一组中检查是否已绘制 否则绘制 如果我们只绘制几个点 那么这种方法效果很好 但当我们接近填满屏幕时 速度会灾难性地减慢 我想出的最好的方法是构
  • 快速求解子集和

    考虑这种解决子集和问题的方法 def subset summing to zero activities subsets 0 for activity cost in activities iteritems old subsets sub
  • 找到一系列间隔的最有效分组

    我有一个应用程序 其中有一系列不重叠的固定宽度间隔 每个间隔都有一个给定的键 每个间隔具有相同的宽度 并且可以存在连续的间隔 本质上 我想以最小化单独间隔的数量的方式对间隔和键进行分组 这可以通过合并具有相同键的连续间隔或查找匹配间隔并将它
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 有人可以解释以下异或属性

    我的一个论坛提到给定的数组n数字 arr 0 n 1 以下条件成立 is the xor运算符 f l r f 0 r f 0 l 1 where f l r arr l arr l 1 arr r 我检查了上面的数组数量和不同的值l an
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 在 C++ 中通过引用传递 std 算法谓词

    我正在尝试从 a 中删除元素std list并保留已删除元素的一些统计信息 为此 我使用列表中的remove if 函数 并且我有一个谓词 我想使用这个谓词来收集统计数据 这是谓词的代码 class TestPredicate privat
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • 快速约会算法

    我在一家咨询公司工作 大部分时间都在客户所在地 正因为如此 我很少见到同事 为了更好地了解彼此 我们将安排一个晚宴 会有很多小桌子 方便人们聊天 为了在聚会期间与尽可能多的不同的人交谈 每个人都必须每隔一段时间 比如每小时 换一张桌子 如何
  • 使用多级解决方案计算二维网格中的最近邻

    我有一个问题 在 x y 大小的网格中 我提供了一个点 并且我需要找到最近的邻居 在实践中 我试图在 pygame 中找到距离光标最近的点 该点跨越颜色距离阈值 计算如下 sqrt rgb1 0 rgb2 0 2 rgb1 1 rgb2 1
  • 在常数空间中创建 1..N 的随机排列

    我正在寻找枚举固定空间中数字 1 N 的随机排列 这意味着我无法将所有数字存储在列表中 原因是 N 可能非常大 超过可用内存 我仍然希望能够一次遍历这样一个数字的排列 只访问每个数字一次 我知道对于某些 N 可以这样做 许多随机数生成器随机
  • 使用并集查找(又名不相交集)检测图是否是二分图

    我正在 Spoj 上做一个问题 基本上可以简化为检测图是否是二分图 我正在尝试使用 dfs 为图表着色 但它太慢了 有人评论这个 没有 bfs 没有 dfs 没有二部图 简单的并查集就可以做到 确实速度很快 提示 1 偶数长度的环不会影响两

随机推荐