我有一个问题:我需要根据文件路径前缀节省空间的文件系统数据查找.换句话说,前缀搜索已排序的文本.你说,使用trie,我也想到了同样的事情.麻烦的是,尝试不够节省空间,没有其他技巧.
我有相当数量的数据:
我不想在内存中接近450M的任何地方吃东西.在这一点上,我很乐意在大约100M左右使用,因为前缀形式有很多冗余.
我正在使用C#来完成这项工作,并且直接实现trie仍然需要为文件中的每一行提供一个叶子节点.假定每个叶子节点都需要对最后一个文本块进行某种引用(32位,比如指向一个字符串数据数组的索引以最小化字符串重复),并且CLR对象开销是8个字节(使用windbg/SOS验证) ,我将花费> 96,000,000字节的结构开销,根本没有文本存储.
让我们看一下数据的一些统计属性.当塞进一个特里:
叶片产生的过剩率约为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> …
我正在尝试优化大量的乘法和指针算术,并希望看到编译器在我放入优化标志时所做的事情.
- 编辑 -
如何将其限制为特定功能或代码块?
--Edit_2--
如何让gcc生成一个不那么详细的汇编代码?
我需要调整一char array[size]来char array[new_size]在运行时.
我怎样才能做到这一点?
在Visual Studio安装和部署项目中,我可以为安装程序设计用户界面.我有一个欢迎屏幕,一个许可证接受对话框,然后是一个安装位置对话框.都好.
我想再包含一个对话框,以确认更改文件关联.我认为这样做的方法是使用一个包含Checkbox的对话框.
我可以右键单击UI节点,然后选择"添加对话框",我得到这个选择:
复选框http://i32.tinypic.com/2hxm16a.jpg
这些复选框对话框之间有什么区别?
我尝试了RTFM,但找不到这些选项的文档.
编辑:等等,我找到了.
我想解析"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#语言和.NET Framework创建一个声音可视化系统.这可能看起来像在Winamp应用程序中.也许存在免费图书馆或一些描述如何做的有趣文章?示例: alt text http://img44.imageshack.us/img44/9982/examplel.png
我有一个脚本,可以在linux机器上的文件中创建文件系统.我看到要创建文件系统,它使用'dd'和bs = x选项,从/ dev/zero读取并写入文件.我认为通常指定ibs/obs/bs对于从真实硬件设备读取是有用的,因为具有特定的块大小限制.但是,在这种情况下,当它从虚拟设备读取并写入文件时,我看不到使用'bs = x bytes'选项背后的任何意义.我的理解在这里错了吗?(以防如果有帮助,此文件系统稍后用于启动qemu vm)
你如何在PHP 5.3中使用名称空间的_autoload?我在与我的脚本分开的命名空间中有一个主自动加载功能.我也在调用一个具有不同命名空间的类.(这并不奇怪,但是)它没有找到自动加载功能.我是否必须为每个命名空间重新创建自动加载功能?这似乎不是最理想的.
在此先感谢您的帮助!
我是iPhone开发的新手,我在一段时间后买了证书,已经在应用程序商店发布了一个简单的应用程序(午餐钱,以防万一你好奇),但我一直在互联网上寻找一个适用于iPhone openGL ES(2d或3d将可以工作)游戏开发的好系列.
有谁知道iphone opengl es游戏开发的一个很好的起点?
在Java中用于解码Rubik多维数据集的代码是一种相对简单的算法.效率也很重要,但是次要考虑因素.