- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
正如title所说,我正在寻找在内存中存储集的最佳方式。我只对字节集感兴趣(从0
到255
的整数数组,其中顺序不重要)。不要求编码/解码速度快唯一必要的是集合需要尽可能少的内存。
我提出的第一种方法是为每个集合分配256
位的数组(32
字节),而位于n
位置的位告诉集合中是否有n
位。这种方法的问题在于,即使集合大部分是空的(只有很少的元素),它也需要相同的内存量。
我尝试的第二种方法是将集合存储为常规数组。因此,如果集合包含n
元素,则需要存储n + 1
字节。第一个字节表示元素的数量,其他字节表示元素但是,正如我们所知道的,集合顺序并不重要,所以有些东西强烈地告诉我,一定有办法来实现这一点。
我的第三个尝试是枚举所有可能的集合,并只存储集合的索引(整数表示它在所有可能的字节集合列表中的索引)但是,事实证明,它绝对等同于第一种方法。基本上,我仍然需要32
字节来存储任何集合,因此它不是很有用。
我的第四次尝试是基于我的第二种方法我注意到这个集合包含n
元素,当然,它需要n + 1
字节(如果我使用第二种方法)。但是,例如,如果元素k
出现在set中(实际上出现在array中,因为在我的第二次尝试中,我将集合存储为数组),那么它就不能再次出现基本上,如果k
再次出现,那么它的意思一定有所不同(可能k - 1
)。所以,我做了一些优化,我注意到,如果我对每个下一个元素进行不同的编码,我可以节省一些字节(例如,检验[3, 3, 5, 7]
)被解释为元素的元素是3
(每个下一个元素被索引降低)的集合,并且{3, 4, 5}
被解释为[3, 3, 5, 6]
(注意到{3, 4, 2}
和cc>已经存在,所以3
由4
和它减少。变为6
,但2
存在,4
存在,因此必须是4
)。但是这种方法如何能真正节省字节呢我尝试并意识到我可以对数组中的元素进行排序,以便在某些情况下避免使用高位对元素进行编码,因此我为每个元素保存了3
位,这大约是2
个字节(即1
)。
我所做的第五种方法与第二种方法类似,但它对元素数量的解释不同。如果元素数小于n / 16
则它通常从内存中的以下数组读取所有元素但是,如果元素的数目大于n / 2 * 1 / 8
,那么它将创建一个完整的集合,然后从内存中的以下数组中移除元素。平均来说,is节省了很多字节,但它离最优值还很远。
我的最后一次尝试(第六次尝试)是枚举一些集合(例如创建一个集合列表,该列表将包含:full set,set with only偶数,set with only odd numbers,set with elements than 128,etc),然后使用该列表中的元素和基本集合操作(并集、交集等)重建原始集合。对于我们从列表中使用的每个基集,它需要几个字节;对于并集或交集操作,它需要几个字节;当然,对于序列的长度,它需要一个字节它非常依赖于基本集合列表中应该硬编码的元素的数量,但是似乎很难预先创建和正确选择列表中的元素总之,有人告诉我,这不是一个很聪明的方法。
但什么才是最理想的方法呢有人告诉我,我的第四次尝试还不错,但我们能做得更好吗我操作的集合具有随机的元素数,因此平均每个集合的元素数都是128
个,因此我正在寻找一种方法来为每个集合分配128
个位(128
个字节)到目前为止,我所做的最好的事情是使用第四种方法,这离我的目标很远。
再说一遍,速度并不重要。编码/解码可能非常慢,唯一重要的是集合需要尽可能少的内存当我说“在内存中”时,我的意思是在内存中编码(压缩)另外,我对尽可能少的比特感兴趣(不仅仅是字节),因为我想在硬盘上存储几十亿个压缩的数据集,所以计算每一个数据集所需的平均比特数是很重要的,这样我就知道有多少资源可用于我想实现的目标。
如果你想要一些代码(但我真的不明白你为什么要这么做),我可以在这里发布我用C语言为所有这些方法制定的解决方案不管怎样,我并不是在问如何用特定的编程语言实现它的代码或技术细节,我只是在问压缩集的方法/算法。
提前谢谢你。
最佳答案
你的第一种方法(和第三种方法是等价的)已经是最优的了。这是无法改善的。
有2256个可能的数字集你正在使用根据鸽子洞原理,你需要2256个数字来识别它们,你需要256位来表示这些数字任何识别使用少于256位的集合的方法都会留下至少一对(可能还有多对)集合共享同一标识符。
关于c - 存储压缩集的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44511191/
我有点想做 the reverse of this. 我不想解压缩并将收集文件添加到 S3 应用户要求: 生成一堆xml文件 使用一些图像(托管在 s3 上的预先存在的图像)压缩 xml 文件 下载
将此添加到域的虚拟主机后 AddOutputFilterByType DEFLATE application/javascript text/javascript text/css 响应头不包含任何内
在 Apache Im 中,通过将以下内容添加到我的 .htaccess 文件来启用输出压缩: # compress text, html, javascript, css, xml: AddOutp
是否可以以压缩格式将请求数据从浏览器发送到服务器? 如果是,我们该怎么做? 最佳答案 压缩从浏览器发送到服务器的数据是不受 native 支持 在浏览器中。 您必须找到一种解决方法,使用客户端语言(可
我正在寻找可以压缩JavaScript源代码的工具。我发现一些网络工具只能删除空格字符?但也许存在更好的工具,可以压缩用户的函数名称、字段名称、删除未使用的字段等。 最佳答案 经常用来压缩JS代码的工
使用赛马博彩场景,假设我有许多单独的投注来预测比赛的前 4 名选手 (superfecta)。 赌注如下... 1/2/3/4 1/2/3/5 1/2/4/3 1/2/4/5 1/2/5/3
我是一名实习生,被要求对 SQL 2008 数据压缩进行一些研究。我们想将 Outlook 电子邮件的几个部分存储在一个表中。问题是我们想将整个电子邮件正文存储在一个字段中,然后又想压缩它。使用 Ch
我目前有一个系统,用户可以在其中上传 MP4 文件,并且可以在移动设备上下载该文件。但有时,这些视频的大小超过 5MB,在我国,大多数人使用 2G。因此,下载大型视频通常需要 15-20 分钟。 有什
假设我有一个带有类型列的简单文档表: Documents Id Type 1 A 2 A 3 B 4 C 5 C 6 A 7 A 8 A 9 B 10 C 用户
我有一个较大字符串中的(子)字符串位置的 data.frame。数据包含(子)字符串的开头及其长度。可以很容易地计算出(子)字符串的结束位置。 data1 start length end #>
我想知道是否 文件加密算法可以设计成它也可以执行文件压缩的事件(任何活生生的例子?)。 我也可以将它集成到移动短信服务中,我的意思是短信吗? 另外我想知道二进制文件...如果纯文本文件以二进制编码
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我们有几个具有大量 JavaScript 的 Java 项目,目前我们使用的是旧版本的 YUICompressor (2.4.2)。然而,我在这篇博文中发现 YUICompressor 正在 depr
从之前关于尝试提高网站性能的文章中,我一直在研究 HTTP 压缩。我读过有关在 IIS 中设置它的信息,但它似乎是所有 IIS 应用程序池的全局事物,我可能不允许这样做,因为还有另一个站点在其上运行。
我有一个 REST 服务,它返回一大块 XML,大约值(value) 150k。 例如http://xmlservice.com/services/RestService.svc/GetLargeXM
我正在尝试获取一个简单的 UglifyJS (v2.3.6) 示例来处理压缩。 具体来说,“未使用”选项,如果从未使用过,变量和函数将被删除。 这是我在命令行上的尝试: echo "function
我正在开发一个项目,如果我的磁盘出现问题,我将在使用 ZLIB 压缩内存块后将其发送到另一个磁盘。然后我计划下载该转储并用于进一步调试。这种压缩和上传将一次完成一个 block - 比如说 1024
LZW 压缩算法在压缩后增加了位大小: 这是压缩函数的代码: // compression void compress(FILE *inputFile, FILE *outputFile) {
我的问题与如何在 3D 地形上存储大量信息有关。这些信息应该是 secret 的,因为它们非常庞大,也应该被压缩。我选择了文件存储,现在我想知道将对象数据加密/压缩(或压缩/加密)到文件的最佳做法。
我使用以下代码来压缩我的文件并且效果很好,但我只想压缩子文件夹而不是在压缩文件中显示树的根。 public boolean zipFileAtPath(String sourcePath, Strin
我是一名优秀的程序员,十分优秀!