标签: bitvector

在位向量算法的决策过程中使用术语重写

我正在研究一个项目,其重点是使用术语重写来解决/简化固定大小的位向量算术问题,这对于某些决策程序(例如基于钻头爆破的程序)的先前步骤是有用的.术语重写可以完全解决问题,或者产生更简单的等效问题,因此两者的组合可以导致相当大的加速.

我知道许多SMT求解器实现了这种策略(例如Boolector,Beaver,Alt-Ergo或Z3),但很难找到详细描述这些重写步骤的论文/技术报告/等.一般来说,我只发现了作者在几段中描述这种简化步骤的论文.我想找一些文件详细解释术语重写的用法:提供规则的例子,讨论AC重写和/或其他等式公理的便利性,重写策略的使用等.

目前,我刚刚找到了技术报告"固定宽度位向量的决策程序",描述了CVC Lite执行的规范化/简化步骤,我想找到更多这样的技术报告!我还发现了一张关于STP术语重写的海报,但这只是一个简短的总结.

我已经访问了那些SMT求解器的网站,我在他们的出版物页面中搜索过......

我将不胜感激任何参考,或任何有关如何在当前版本的知名SMT求解器中使用术语重写的解释.我对Z3特别感兴趣,因为它看起来有一个最聪明的简化阶段.例如,Z3 3.*引入了一个新的位向量决策程序,但遗憾的是,我无法找到任何描述它的论文.

bitvector rewriting smt z3

8
推荐指数
1
解决办法
1059
查看次数

C++快速Bitset短路按位操作

一个演示问题:给定两个std::bitset<N>S,ab检查是否有任何比特都设定ab.

这个问题有两个相当明显的解决方案.这很糟糕,因为它会创建一个新的临时位集,并复制各种位置的值只是为了抛弃它们.

template <size_t N>
bool any_both_new_temp(const std::bitset<N>& a, const std::bitset<N>& b)
{
    return (a & b).any();
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案很糟糕,因为它一次只有一点,这不太理想:

template <size_t N>
bool any_both_bit_by_bit(const std::bitset<N>& a, const std::bitset<N>& b)
{
    for (size_t i = 0; i < N; ++i)
        if (a[i] && b[i])
            return true;
    return false;
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我将能够做这样的事情,在这里block_typeuint32_t或任何类型bitset的存储:

template <size_t N>
bool any_both_by_block(const std::bitset<N>& a, const std::bitset<N>& b)
{
    typedef std::bitset<N>::block_type block_type;
    for …
Run Code Online (Sandbox Code Playgroud)

c++ bitvector

8
推荐指数
1
解决办法
435
查看次数

使用泛型作为位向量时,不能应用二进制操作!=

我正在实现一个Bit Vector类作为练习,但是只知道Rust不到一周,我遇到了以下代码的问题:

use std::cmp::Eq;
use std::ops::BitAnd;
use std::ops::Index;
use std::ops::Not;

struct BitVector<S = usize> 
    where S: Sized + BitAnd<usize> + Not + Eq {
    data: Vec<S>,
    capacity: usize
}

impl<S> BitVector<S>
    where S: Sized + BitAnd<usize> + Not + Eq {
    fn with_capacity(capacity: usize) -> BitVector {
        let len = (capacity / (std::mem::size_of::<S>() * 8)) + 1;
        BitVector { data: vec![0; len], capacity: capacity }
    }
}

impl<S> Index<usize> for BitVector<S>
    where S: Sized + BitAnd<usize> + Not + Eq …
Run Code Online (Sandbox Code Playgroud)

generics bitvector rust

8
推荐指数
1
解决办法
1028
查看次数

我如何在Python中表示和使用n位向量?

在我正在进行的一项任务中,我们需要使用位向量,但我不确定如何在Python中执行此操作.它们应该能够从4位到20位.我以前从未使用过位向量,但我想可以创建一个使用通常的AND/OR/XOR操作操作的无符号字节数组.

这里的重要限制是:除了标准Python提供的库之外,我不能依赖任何库.

我想我知道如何使用8位无符号字节的数组在C中执行此操作:例如,将零数组的第18位转换为1,我会做类似my_bit_array [3]&= 1 << 2的操作

但由于Python是动态类型的,并且没有内置数组类型,我将如何以pythonic方式执行此操作?

是否有可能(如何?)表达大小为20的位向量?我在考虑制作一个24位/ 3字节向量并忽略4位.

python bit-manipulation bitarray bitvector

7
推荐指数
4
解决办法
1万
查看次数

C/C++位数组或位向量

我正在学习C/C++编程并遇到过"位数组"或"位向量"的用法.我无法理解他们的目的?这是我的疑惑 -

  1. 它们是否用作布尔标志?
  2. 可以使用int数组吗?(当然更多的记忆,但..)
  3. 这个Bit-Masking的概念是什么?
  4. 如果位掩码是简单的位操作以获得适当的标志,那么如何为它们编程?是不是很难在脑袋里做这个操作,看看标志会是什么,与十进制数相对应?

我正在寻找应用程序,以便我能更好地理解.对于Eg -

问:您将获得一个包含范围内的整数(1到1百万)的文件.有一些重复,因此缺少一些数字.找到找到丢失数字的最快方法?

对于上面的问题,我已经阅读了告诉我使用位数组的解决方案.如何将每个整数存储一下?

c c++ bit bitarray bitvector

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

c ++中的位向量

最近我听说过位向量,但我真的找不到任何关于这个主题的有用信息或教程.能否请您推荐一本关于如何实现自己的位向量类的书或快速教程?谢谢.

--- ///我无法回答我自己的问题,所以我决定编辑这篇文章.这就是我刚刚发现的:"游戏程序员的数据结构 - Ron Penton和Andre Lamothe".第4章,Bitvectors.本书详细解释了位向量,以及如何自己创建位向量类.玩得开心.

c++ bitvector

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

用于搜索连续置位/清零位的位数组的快速代码?

是否有一些相当快的代码可以帮助我快速搜索大的位图(几兆字节)运行连续的零或一位?

通过"合理快速",我的意思是可以利用机器字大小并同时比较整个单词,而不是进行逐点分析,这是非常慢的(例如一个人vector<bool>).

它对于例如在卷的位图中搜索可用空间(用于碎片整理等)非常有用.

c c++ bitarray bitvector

7
推荐指数
1
解决办法
1171
查看次数

编码位向量的有效方法?

目前使用行程长度编码来编码位向量,当前运行时间是2log(i),其中是运行的大小.还有另一种方法可以将其归结为log(i)吗?谢谢.

optimization performance encoding bitmap bitvector

7
推荐指数
1
解决办法
540
查看次数

确定字符串具有所有唯一字符,而不使用其他数据结构且没有小写字符假设

这是Gayle Laakmann McDowell 撰写Cracking the Coding Interview中的一个问题:

实现算法以确定字符串是否具有所有唯一字符.如果您不能使用其他数据结构怎么办?

作者写道:

我们可以通过使用位向量来减少空间使用量.我们假设,在下面的代码,该字符串只有较低的情况下'a'通过'z'.这将允许我们只使用一个int.

作者有这个实现:

public static boolean isUniqueChars(String str) {
    int checker = 0;
    for (int i = 0; i < str.length(); ++i) {
        int val = str.charAt(i) - 'a';
        if ((checker & (1 << val)) > 0)
            return false;
        checker |= (1 << val);
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)

让我们说我们摆脱了"字符串只是小写'a'通过'z'" 的假设.相反,该字符串可以包含任何类型的字符ASCII字符或Unicode字符.

有没有像作者那样有效的解决方案(或者一种与作者一样高效的解决方案)?

相关问题:

java string algorithm bit-manipulation bitvector

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

java micro-optimization:将一组布尔实例变量与基于int的位向量相结合

我们有一个包含许多实例的类,并遇到内存问题.因此,我们尝试减少这个类的内存需求.一个想法是以下.

该类有许多布尔实例变量,每个变量在初始实现中占用一个单词.可以想到将它们组合到存储在int中的迷你位向量,使得它们的组合存储器要求将是一个字.

但我怀疑Java VM正在进行这种优化,因此手动执行它不会获得任何额外的节省.对?

java boolean micro-optimization bitvector

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