问题列表 - 第12858页

节省空间的内存结构,用于支持前缀搜索的排序文本

我有一个问题:我需要根据文件路径前缀节省空间的文件系统数据查找.换句话说,前缀搜索已排序的文本.你说,使用trie,我也想到了同样的事情.麻烦的是,尝试不够节省空间,没有其他技巧.

我有相当数量的数据:

  • 在磁盘上以纯文本Unix格式列出大约450M
  • 大约800万行
  • gzip默认压缩到31M
  • bzip2默认压缩到21M

我不想在内存中接近450M的任何地方吃东西.在这一点上,我很乐意在大约100M左右使用,因为前缀形式有很多冗余.

我正在使用C#来完成这项工作,并且直接实现trie仍然需要为文件中的每一行提供一个叶子节点.假定每个叶子节点都需要对最后一个文本块进行某种引用(32位,比如指向一个字符串数据数组的索引以最小化字符串重复),并且CLR对象开销是8个字节(使用windbg/SOS验证) ,我将花费> 96,000,000字节的结构开销,根本没有文本存储.

让我们看一下数据的一些统计属性.当塞进一个特里:

  • 文字总数独特的"块"约110万
  • 文本文件中磁盘上大约16M的唯一块总数
  • 平均块长度为5.5个字符,最大值为136
  • 当没有考虑重复时,总共大约5200万个字符
  • 内部trie节点平均约6.5个孩子,最多44个
  • 约1.8M内部节点.

叶片产生的过剩率约为15%,多余的内部节点产生率为22% - 过量创建,我的意思是在构造期间创建的叶子和内部节点,但不是在最终的trie中,作为每种类型的最终节点数的一部分.

这是来自SOS的堆分析,指示使用最多内存的位置:

 [MT    ]--[Count]----[   Size]-[Class                                          ]
 03563150       11         1584 System.Collections.Hashtable+bucket[]
 03561630       24         4636 System.Char[]
 03563470        8         6000 System.Byte[]
 00193558      425        74788      Free
 00984ac8    14457       462624 MiniList`1+<GetEnumerator>d__0[[StringTrie+Node]]
 03562b9c        6     11573372 System.Int32[]
*009835a0  1456066     23297056 StringTrie+InteriorNode
 035576dc        1     46292000 Dictionary`2+Entry[[String],[Int32]][]
*035341d0  1456085     69730164 System.Object[]
*03560a00  1747257     80435032 System.String
*00983a54  8052746     96632952 StringTrie+LeafNode
Run Code Online (Sandbox Code Playgroud)

Dictionary<string,int>被用于映射串块到索引到List<string>,并能特里施工后丢弃,虽然GC似乎并没有被删除它(一对夫妇明确集合了这个转储前完成) - !gcroot在SOS并不表示任何根,但我预计后来的GC会释放它.

MiniList<T> …

.net c# algorithm prefix trie

14
推荐指数
1
解决办法
1961
查看次数

如何查看gcc(任何风格)编译器为C/C++程序生成的汇编代码?

我正在尝试优化大量的乘法和指针算术,并希望看到编译器在我放入优化标志时所做的事情.

- 编辑 -

如何将其限制为特定功能或代码块?

--Edit_2--

如何让gcc生成一个不那么详细的汇编代码?

c c++ assembly code-generation

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

在运行时调整char []的大小

我需要调整一char array[size]char array[new_size]在运行时.

我怎样才能做到这一点?

c++

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

Visual Studio安装项目中的"Checkboxes(A)"和"Checkboxes(B)"对话框之间有什么区别?

在Visual Studio安装和部署项目中,我可以为安装程序设计用户界面.我有一个欢迎屏幕,一个许可证接受对话框,然后是一个安装位置对话框.都好.

我想再包含一个对话框,以确认更改文件关联.我认为这样做的方法是使用一个包含Checkbox的对话框.

我可以右键单击UI节点,然后选择"添加对话框",我得到这个选择:

复选框http://i32.tinypic.com/2hxm16a.jpg

这些复选框对话框之间有什么区别?

我尝试了RTFM,但找不到这些选项的文档.


编辑:等等,我找到了.

替代文字http://i26.tinypic.com/b49m6g.jpg

installation setup-project visual-studio-2008 visual-studio

9
推荐指数
1
解决办法
892
查看次数

如何将带小数点的字符串解析为double?

我想解析"3.5"一个双字符串的字符串.然而,

double.Parse("3.5") 
Run Code Online (Sandbox Code Playgroud)

收益35和

double.Parse("3.5", System.Globalization.NumberStyles.AllowDecimalPoint) 
Run Code Online (Sandbox Code Playgroud)

抛出一个FormatException.

现在我的计算机的语言环境设置为德语,其中逗号用作小数分隔符.它可能需要做些什么并double.Parse()期待"3,5"作为输入,但我不确定.

如何解析包含十进制数的字符串,该十进制数可能是也可能不是我当前语言环境中指定的格式?

c# string double parsing

217
推荐指数
6
解决办法
30万
查看次数

C#声音可视化

我想用C#语言和.NET Framework创建一个声音可视化系统.这可能看起来像在Winamp应用程序中.也许存在免费图书馆或一些描述如何做的有趣文章?示例: alt text http://img44.imageshack.us/img44/9982/examplel.png

.net c# audio bitmap noise

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

dd中ibs/obs/bs的用途

我有一个脚本,可以在linux机器上的文件中创建文件系统.我看到要创建文件系统,它使用'dd'和bs = x选项,从/ dev/zero读取并写入文件.我认为通常指定ibs/obs/bs对于从真实硬件设备读取是有用的,因为具有特定的块大小限制.但是,在这种情况下,当它从虚拟设备读取并写入文件时,我看不到使用'bs = x bytes'选项背后的任何意义.我的理解在这里错了吗?(以防如果有帮助,此文件系统稍后用于启动qemu vm)

linux filesystems file-io

5
推荐指数
2
解决办法
8892
查看次数

使用PHP 5.3中的命名空间自动加载?

你如何在PHP 5.3中使用名称空间的_autoload?我在与我的脚本分开的命名空间中有一个主自动加载功能.我也在调用一个具有不同命名空间的类.(这并不奇怪,但是)它没有找到自动加载功能.我是否必须为每个命名空间重新创建自动加载功能?这似乎不是最理想的.

在此先感谢您的帮助!

php namespaces autoload

15
推荐指数
1
解决办法
6043
查看次数

Iphone游戏开发

我是iPhone开发的新手,我在一段时间后买了证书,已经在应用程序商店发布了一个简单的应用程序(午餐钱,以防万一你好奇),但我一直在互联网上寻找一个适用于iPhone openGL ES(2d或3d将可以工作)游戏开发的好系列.

有谁知道iphone opengl es游戏开发的一个很好的起点?

iphone opengl-es

-1
推荐指数
1
解决办法
969
查看次数

最容易为Rubik的立方体编码算法?

在Java中用于解码Rubik多维数据集的代码是一种相对简单的算法.效率也很重要,但是次要考虑因素.

java algorithm rubiks-cube

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