- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设您有大量流行语言(Java、C、C++ 等)的源代码(如 50GB 以上)。
项目需求是:
压缩源代码以减少磁盘使用和磁盘 I/O
以无需解压整个文件即可从压缩源中提取特定源文件的方式对其进行索引
整个代码库的压缩时间不重要
搜索和检索时间(以及搜索和检索时的内存使用)很重要
此 SO 答案包含潜在答案:What are the lesser known but useful data structures?
但是,这只是潜力列表 - 我不知道这些结构实际上如何根据上面列出的要求进行评估。
问题:根据上述要求,哪些数据结构(及其实现)会表现良好?
最佳答案
用于搜索的主要数据结构是 inverted list .幸运的是,您不需要自己实现它。 Lucene是一种广泛使用的搜索工具,可在内部使用倒排列表。
使用 Lucene,您可以创建具有多个字段 的文档。我们的想法是,其中一些字段可以使用标准关键字类型查询搜索。
我已经实现了一个源代码搜索实用程序,现在我将在以下段落中对其进行简要描述。整个源代码本身存储为一个名为“代码”的不可索引字段(您可以修改源代码以存储压缩版本)。
对于检索部分,请注意您要用于搜索的关键字可以是函数、类、包或变量的名称。它们也可以是评论中的文字等等。在我的实现中,我使用 Java 注释语法树 (AST) 提取了这些信息。通过使用适当的解析器构建 AST,您也可以对其他语言执行相同的操作。
另一种可能性是示例查询 (QBE) 范例,您可以在其中使用一小段代码从您的索引代码库中搜索大致相似的片段。这对于检测源代码重用和剽窃特别有帮助,这是我开发该工具的主要目的。
项目页面为here .我称之为 YASOCS(又一个源代码搜索器)。
搜索速度非常快,因为它使用倒排列表。您也可以使用 Luke (一个开源的 Lucene 索引可视化工具)自己“查看”索引并使用界面执行测试查询。
关于c++ - Read-moSTLy 数据结构压缩和搜索源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25781826/
我有一个程序返回数字结果的数字(目前为 6 个),将它们转换为字符串,然后连接它们以通过 ZMQ 发送。 示例输出是: 结果:7.85、-5.75、16.0、0.0、0.84375、0.828125
动态编程 |集合 33(查找一个字符串是否与另外两个字符串交错) http://www.geeksforgeeks.org/check-whether-a-given-string-is-an-int
这个问题在这里已经有了答案: Which sort algorithm works best on mostly sorted data? [closed] (20 个答案) 关闭 8 年前。 我正
我正在用 C# 为聊天室编写一个机器人,我想检测一条消息是否包含太多大写字母。如果消息的大写字母总数超过消息总长度的 三分之一 并且总长度大于 13,则消息包含太多大写字母。这是为了防止较小的消息被标
我正在尝试在 Java 中使用线程池。但是线程的数量是未知的,所以我试图找到一个解决方案。然后出现两个问题: 一段时间以来,我一直在寻找增加线程池大小的方法,但我还没有想出办法。有什么建议吗?有人说
(在 Visual Studio 中使用 C++) 我有以下用于创建宇宙飞船对象的默认构造函数: Ship() // default constructor { name = "[ship u
对于类(class),我必须创建一个州对象的二叉树,每个州对象都包含一个常驻对象的二叉树,用于组织居住在每个州的人。我正在尝试按名称在整个州树中搜索一个人(州树和居民树都是按名称的字母顺序排列的),这
假设您有大量流行语言(Java、C、C++ 等)的源代码(如 50GB 以上)。 项目需求是: 压缩源代码以减少磁盘使用和磁盘 I/O 以无需解压整个文件即可从压缩源中提取特定源文件的方式对其进行索引
我想在我的代码中包含一个模式。单击按钮/href 时,模式中应显示不同的文件。我只是从 here 中获取了代码. 现在,在加载动画后(或几毫秒后)模态窗口就关闭了。奇怪的是,当你按下按钮几次时,它偶尔
我试图用 HREF 包装所有出现的 IP 地址,这样我就可以做一些事情了。 我已经通过几个验证器运行正则表达式本身,并且它与预期的模式匹配。因此,我认为我的问题在于实现,但我看不到正确的路径。有人可以
我正在尝试使用 Apache Tika 通过使用 ByteArrayInputStream 处理二进制文件来解析 pdf 文件...并且开始出现某些 pdf 文件的错误,并且对于某些 pdf 文件来说
格式为: 0 995 112 // there is an empty line here too 所以,我正在做: with open("in.txt") as f: articles =
给定一个线性递增的数组,但是 可能会遗漏一些数字 可能会有一些意想不到的数字, 您将如何构建算法以从数组中删除所有离群值? 可能的数组示例: 1,2,3,4,1,1,1,100,5,6,7 1,2,4
我想标记格式化字符串(非常类似于 printf),我想我只遗漏了一点点: %[number][one letter ctYymd] 应成为 token ² $1...$10 将成为代币 所有其他(普通
在我的一个项目中,我需要能够提供一个非常简单的变量查找和替换解析器(主要用于路径)。变量主要在启动期间使用,偶尔用于访问文件(不是程序的主要功能,只是加载资源),因此解析器不需要高性能。但是,我非常希
我目前正在重写一个电子商店 - 但仅限于客户端,即 CMS 大部分保持完好。我没有使用预构建的框架,因为系统必须保持与 CMS 的向后兼容性,而且我必须拥有完全自由的代码结构。 新系统完全基于 MVC
主要是头文件的文件结构(90% 的代码都是头文件)是否会减慢除了编译之外的任何事情? 有些人认为,在速度优化的情况下,它可能会导致大多数代码的内联,因此处理器会计算有关指令调用或类似内容的错误统计信息
想想 MUD/MUCK,但可能还有头像或现场插图。我选择的语言是 ruby。 我需要处理多个持久连接,数据在服务器和它的各种客户端之间异步传输。单个数据库必须根据客户端 session 中发生的事件保
场景:我试图在 git 下获取我的 unix 点文件。我必须(至少)在 cygwin 环境和一些标准的 linux 发行版(ubuntu 和 opensuse)之间工作,并且我有仅特定于 cygwin
我已经阅读了关于 the use of reinterpret_cast 的各种先前问题。 ,并且我还阅读了 C++ 标准中的相关措辞。本质上,它归结为指针到指针 reinterpret_cast 操
我是一名优秀的程序员,十分优秀!