2D 位集存储为 1D 时的 XOR 位集

2023-11-30

回答当你只关心速度时如何存储二进制数据?,我想写一些来做比较,所以我想用std::bitset。然而,为了公平比较,我想要一个一维std::bitset模拟 2D。

所以不要有:

bitset<3> b1(string("010"));
bitset<3> b2(string("111"));

我想使用:

bitset<2 * 3> b1(string("010111"));

优化数据局部性。但是,现在我遇到了问题我应该如何存储和计算二进制代码之间的汉明距离?,如我的最小示例所示:

#include <vector>
#include <iostream>
#include <random>
#include <cmath>
#include <numeric>
#include <bitset>

int main()
{
    const int N = 1000000;
    const int D = 100;
    unsigned int hamming_dist[N] = {0};
    std::bitset<D> q;
    for(int i = 0; i < D; ++i)
        q[i] = 1;

    std::bitset<N * D> v;
    for(int i = 0; i < N; ++i)
        for(int j = 0; j < D; ++j)
            v[j + i * D] = 1;


    for(int i = 0; i < N; ++i)
        hamming_dist[i] += (v[i * D] ^ q).count();

    std::cout << "hamming_distance = " << hamming_dist[0] << "\n";

    return 0;
}

错误:

Georgioss-MacBook-Pro:bit gsamaras$ g++ -Wall bitset.cpp -o bitset
bitset.cpp:24:32: error: invalid operands to binary expression ('reference' (aka
      '__bit_reference<std::__1::__bitset<1562500, 100000000> >') and
      'std::bitset<D>')
                hamming_dist[i] += (v[i * D] ^ q).count();
                                    ~~~~~~~~ ^ ~
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/bitset:1096:1: note: 
      candidate template ignored: could not match 'bitset' against
      '__bit_reference'
operator^(const bitset<_Size>& __x, const bitset<_Size>& __y) _NOEXCEPT
^
1 error generated.

发生这种情况是因为它不知道何时停止!我如何让它在处理 D 位后停止?


我的意思是不使用 2D数据结构.


问题是v[i * D]访问单个位。在二维位数组的概念模型中,它访问 row 处的位i和列0.

So v[i * D] is a bool and q is a std::bitset<D>,以及按位逻辑异或运算符 (^)应用于那些没有意义。

If v旨在表示大小为二进制向量的序列D,你应该使用std::vector<std::bitset<D>>反而。还,std::bitset<N>::set()将所有位设置为1.

#include <vector>
#include <iostream>
#include <random>
#include <cmath>
#include <numeric>
#include <bitset>

int main()
{
    const int N = 1000000;
    const int D = 100;

    std::vector<std::size_t> hamming_dist(N);

    std::bitset<D> q;
    q.set();

    std::vector<std::bitset<D>> v(N);
    for (int i = 0; i < N; ++i)
    {
        v[i].set();
    }

    for (int i = 0; i < N; ++i)
    {
        hamming_dist[i] = (v[i] ^ q).count();
    }

    std::cout << "hamming_distance = " << hamming_dist[0] << "\n";

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

2D 位集存储为 1D 时的 XOR 位集 的相关文章

  • 在 C/C++ 中获得正模数的最快方法

    通常在我的内部循环中 我需要以 环绕 方式索引数组 因此 例如 如果数组大小为 100 并且我的代码要求元素 2 则应该给它元素 98 高级语言 例如 Python 可以简单地使用my array index array size 但由于某
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 在实体框架拦截器中向 DbScanExpression 添加内部联接

    我正在尝试使用实体框架 CommandTree 拦截器通过 DbContext 向每个查询添加过滤器 为了简单起见 我有两个表 一个称为 User 有两列 UserId 和 EmailAddress 另一个称为 TenantUser 有两列
  • 如何保证对象只有一个线程

    我有以下代码 class Service public void start creates thread which creates window and goes to message loop void stop sends WM C
  • 我如何理解这个 C 类型声明?

    double bar int double double double double 在查看讲座幻灯片时 我发现了留给学生的练习 用简单的英语来说 什么是类型bar在这个 C 声明中 Please帮助我解决这个问题 我什至不知道从哪里开始
  • FileStream 构造函数和默认缓冲区大小

    我们有一个使用 NET 4 用 C 编写的日志记录类 我想添加一个构造函数参数 该参数可以选择设置文件选项 WriteThrough http msdn microsoft com en us library system io fileo
  • 我如何在 C# .NET(win7 手机)中使用“DataContractJsonSerializer”读入“嵌套”Json 文件?

    我有一个问题 如果我的 json 文件看起来像这样 Numbers 45387 Words 空间桶 我可以很好地阅读它 但是如果它看起来像这样 Main Numbers 45387 Words 空间桶 某事 数字 12345 单词 克兰斯基
  • 读取 C# 中的默认应用程序设置

    我的自定义网格控件有许多应用程序设置 在用户范围内 其中大部分是颜色设置 我有一个表单 用户可以在其中自定义这些颜色 并且我想添加一个用于恢复默认颜色设置的按钮 如何读取默认设置 例如 我有一个名为的用户设置CellBackgroundCo
  • 如何在 C# 控制台应用程序中将修饰符(ctrl、alt、shift)按键捕获为单个按键?

    Console ReadKey 仅在按下 正常 键时捕获输入 然后将修饰符 如果有 附加为键信息的一部分 如何将单个修饰键注册为输入 提供了一种解决方案这个链接 https blogs msdn microsoft com toub 200
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 类的成员复制

    在学习 复制成员 概念时 书中给出了如下说法 此外 如果非静态成员是引用 const 或没有复制赋值的用户定义类型 则无法生成默认赋值 我不太明白这个声明到底想传达什么 或者说这个说法指的是哪一种场景 谢谢 该语句与编译器自动为您编写的类
  • std::forward_as_tuple 将参数传递给 2 个构造函数

    我想传递多个参数以便在函数内构造两个对象 以同样的方式std pair
  • 检查 RoutedEvent 是否有任何处理程序

    我有一个自定义 Button 类 当单击它时 打开特定窗口 它总是执行相同的操作 我添加了一个可以在按钮的 XAML 中分配的 Click 事件 就像常规按钮一样 当它被单击时 我想执行 Click 事件处理程序 如果已分配 否则我想执行默
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 是否有相当于 Clang/LLVM 的 .spec 文件,在哪里可以找到参考?

    The gcc驱动程序可以配置为使用特定的链接器 特定的选项和其他细节 例如覆盖系统头 specs files 当前 截至撰写本文时 GCC 版本 4 9 0 的手册此处描述了规范文件 https gcc gnu org onlinedoc
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 了解使用 Windows 本机 WPF 客户端进行 ADFS 登录

    我已经阅读了大量有关 ADFS 与 NodeJS Angular 或其他前端 Web 框架集成以及一般流程如何工作的文献 并通过 Auth0 Angular 起始代码构建了概念证明 但我不明白如何这可以与本机 WPF Windows 应用程
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft

随机推荐

  • 更改 profilepictureview 的大小:Facebook:preset_size 无效

    我正在尝试更改 ProfilePictureView 的大小 太小 但我无法通过 XML 执行此操作
  • 如果使用基指针声明,为什么简单析构函数不会删除派生对象[重复]

    这个问题在这里已经有答案了 int main Base p new Derived delete p return 0 我有一些困惑 为什么在这里删除 p 不会删除派生对象 是否使得派生对象包含基类型和指针的子对象p实际上是指向派生对象的基
  • 如何将 xsi:type 属性添加到 XML 元素

    如何在 xml 元素中添加 xsi type 我正在用 C 编写一个例程 它使用 XmlSerializer 序列化 Xml 文件 一切似乎都很好 除了一些我最初以为是次要的事情但结果并非如此 这是我的代码 public class Out
  • 将 magento 联系表单电子邮件的“发件人”字段更改为发件人

    如何将联系表单电子邮件的 发件人 字段更改为发件人的字段 例如 如果客户要使用电子邮件填写表格 电子邮件受保护 我怎样才能使生成的电子邮件来自 电子邮件受保护 我查看了系统管理面板中的 电子邮件发件人 字段 但这仅允许一系列预设的商店电子邮
  • JSP - 帮助在分页中生成固定数量的链接

    我的分页效果很好 但我无法理解如何生成固定数量的页面链接 例如 我需要这样有5个固定链接 1 2 3 4 5 gt 如果我点击第三页 我总是会看到 5 个链接 现在用我的算法我只能生成所有链接 但我不知道如何创建我上面解释的内容 这是我的代
  • Spring Data JPA 查询返回重复行而不是实际数据,为什么?

    实体类 public class Event Id private String name private String description private Date eventDateTime getter and setter co
  • HTML 表格不同行中的列数不同

    就像在 Excel 工作表中一样 我可以有 第一行 2 列 第 2 行 1 长列 这在html中可能吗 意识到你不熟悉colspan 我想你也不陌生rowspan 所以我想我会免费把它扔进去 使用时需要注意的重要一点rowspan 下列tr
  • 生成不重复的随机数数组[重复]

    这个问题在这里已经有答案了 我已经绞尽脑汁两天了 试图确保随机生成器方法不会生成重复项 我只需要使用循环来完成此操作 而不导入任何库 我已经找到了这个解决方案 从长远来看 这段代码会生成重复吗 如果是 请帮忙 int vargu1 new
  • SQL Server 的 SoundEx 函数在非拉丁字符集上?

    SQL Server 2000 是否Soundex 函数适用于亚洲字符集 我在查询中使用了它 它似乎没有正常工作 但我意识到这可能是因为我不知道如何阅读中文 此外 还有其他语言的函数可能会遇到问题吗 以俄语为例 谢谢你 Frank Soun
  • 有条件地子集化并计算闪亮数据框中的新变量

    我正在尝试在 Shiny 的数据框中计算一个新变量 该变量是根据另一个变量有条件计算的 这是我正在尝试做的一个小例子 mydata lt data frame cbind x 1 y 1 10 value lt 10 from user i
  • GPU 的哈希表实现[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找可用于 CUDA 编码的哈希表实现 那里有什么好的吗 像Python字典之类的东西 我将使用字符串作为我的键 阿尔坎塔拉等人演示了一种在 GPU 上构建哈希表的数据并行算法
  • MediaPlayer.setDataSource 导致有效文件出现 IOException

    这段代码曾经有效 然后 也许我在某个地方改变了一些东西 或者如果我对 Android 很了解的话 更新会在媒体播放器中引入一个错误 它停止工作了some设备 特别是我的 Nexus S 2 3 6 文件test m4a 17 775 201
  • 从 dll 导出函数指针

    我在 dll 文件中有一个函数指针 在实现中 而不是标头中 如何在exe源代码中调用this指针指向的函数 您可以导出返回指针的函数 标题 typedef void MyPtr declspec dllexport MyPtr GetMyP
  • 写入视频文件并同时播放

    在我有趣的项目中 我从 youtube 下载视频文件 并写入本地磁盘上的文件 同时我也想玩一下 目的是将文件缓存在本地磁盘上 以便当我想再次观看视频时 应用程序可以在本地播放它 从而节省带宽 我在用着Python 3 3 1 PyQt4 P
  • 如何在 XML Schema 1.1 中使用替代方案

    从我读到的所有内容来看 我在下面定义的模式应该有效 强调替代方案 我收到以下错误 http www w3 org 2001 XMLSchema alternative 在此上下文中不支持元素 你能指出我做错了什么吗 这是我当前的架构
  • 如何在 Android 中将图像 URL 分享到 WhatsApp?

    我需要在我的应用程序中将图像分享到 WhatsApp 我有图片网址 为了分享到 WhatsApp 我使用以下代码 String image url http images cartradeexchange com img 800 vehic
  • 如何禁用heroku上的资产管道?

    heroku cedar 隐式预编译了我的资产 即使我已经写了 config assets enabled false 如何禁用资产功能 问题是编译 slug 时应用程序配置不可用 最近解决了这个问题http devcenter herok
  • while 循环仅在 bash 中的文件的第一行上运行[重复]

    这个问题在这里已经有答案了 我有一个 while 循环 应该迭代一个文本文件 但停在第一行 我不明白为什么 我的代码如下 while read hadoop accounts do if grep no lock no remove the
  • 调试Android振动

    各位 我的手机无缘无故震动 所以我想确定发送振动命令来振动的应用程序 Android 会记录此类事件吗 或者我可以编写一个应用程序来监控Vibrator vibrate TIMEOUT 来自另一个应用程序的调用 笔记 我有 root 访问权
  • 2D 位集存储为 1D 时的 XOR 位集

    回答当你只关心速度时如何存储二进制数据 我想写一些来做比较 所以我想用std bitset 然而 为了公平比较 我想要一个一维std bitset模拟 2D 所以不要有 bitset lt 3 gt b1 string 010 bitset