Tag: 数据结构

如何实现连通房?

这可能是一个重复的问题,因为我不知道用短语搜索查询。 我正在用Java创建一个类似Zork的文本游戏,角色会移动到彼此连接的不同房间。 我希望能够列出玩家可用于此房间的所有选项。 例如,房间A连接到B的东边,B连接到A的西边,C的南面,D的北面,依此类推。 我应该使用什么数据结构,或者我应该如何尽可能有效地实现它?

用于文件比较的Java编程方法

将两个hex文件签名相互比较以获得相似性的最佳方法是什么。 更具体地说,我想要做的是采用.exe文件的hex表示forms,并将其与一系列病毒签名进行比较。 对于这种方法,我计划将文件(exe)hex表示分成N个字符的单个组(即10个hex字符),并对病毒签名执行相同操作。 我的目标是执行某种启发式方法,因此统计检查此exe文件是否与已知病毒签名具有X%的相似性。 我想到这样做的最简单和可能非常错误的方法是,将exe [n,n-1]与病毒[n,n-1]进行比较,其中数组中的每个元素都是一个子数组,因此exe1 [0, 9]针对病毒1 [0,9]。 每个子集将进行统计分级。 你可以意识到会有大量的比较,因此非常慢。 所以我想问一下你们是否可以考虑采用更好的方法进行这种比较,例如一起实现不同的数据结构。 这是我正在为我的BSc做的一个项目,我正在尝试开发一种算法来检测多态恶意软件,这只是整个系统的一部分,另一个是基于遗传算法来演化静态病毒签名。 任何建议,意见或资源等一般信息都是非常受欢迎的。 定义 :多态恶意软件(病毒,蠕虫,……)与“原始”版本保持相同的function和有效负载,同时具有明显不同的结构(变体)。 他们通过代码混淆实现了这一点,从而改变了他们的hex签名。 用于多态的一些技术是; 格式更改(插入删除空格),变量重命名,语句重新排列,垃圾代码添加,语句替换(x = 1更改为x = y / 5,其中y = 5),交换控制语句。 非常像流感病毒变异,因此疫苗接种无效,多态恶意软件会发生变异以避免检测。 更新:建议之后,你们给了我关于阅读的内容; 我做到了,但它让我更加困惑。 我找到了几种可以应用于我的问题的距离算法,例如; 最常见的子序列 Levenshtein算法 Needleman-Wunsch算法 Smith-Waterman算法 Boyer Moore算法 Aho Corasick算法 但现在我不知道使用哪个,他们似乎都以不同的方式做同样的事情。 我将继续做研究,以便我能更好地理解每一个; 但同时你可以给我你的意见, which might be more suitable以便我可以在研究期间优先考虑并深入研究。 更新2:我最终使用了LCSubsequence,LCSubstring和Levenshtein Distance的合并。 谢谢大家的建议。 在GitHub上有一份完成的纸张

为什么将队列实现为循环数组?

当实现像队列这样的FIFO时,我的教师总是建议我们将它表示为圆形数组而不是常规数组。 为什么? 是因为在后者中,我们最终会在arrays中有垃圾数据吗?

如何将平面数据结构显示为分层数据结构(Java)?

我最近在一份工作的实际测试中遇到了这个问题。 假设您有一个像这样的平面数据结构: **Category** **Name** **Parent** 1 electronics 0 2 Television 1 3 21inch 2 4 23inch 2 5 LCD display 2 6 player 1 7 mp3player 6 8 vcd player 6 9 dvd player 6 10 hd quality 8 现在从上面的平面数据结构我们想要显示类似下面的分层树结构。 -Electronics | -Television | | -21 inch | | -23 inch | | -lcd display […]

是否有可嵌入的Java替代Redis?

根据这个post ,如果我想从Java使用Redis,Jedis是最好用的。 但是,我想知道是否有任何库/包提供与Redis中已存在的类似的高效设置操作,但是可以直接嵌入Java应用程序而无需设置单独的服务器。 (即,使用Jetty作为Web服务器)。 更确切地说,我希望能够有效地执行以下操作: 有大量M个用户(事先不知道M)。 有大量的N项。 我们希望用户一次检查项目,一个用户/项目,产生存储结果(在普通数据库中)。 每次用户到达时,我们都希望为该用户分配用户以前从未见过的现有结果数量最少的项目。 当我们只关心所有项目看起来大致相同的次数时,这会对所有到达的用户产生近似的循环分配项目。 以上以并行方式发生。 当M和N很大时,Redis比SQL查询更有效地完成上述任务。 有没有办法使用比启动Redis服务器更轻量级的可嵌入Java库来实现这一点? 我认识到使用Java的并发库编写一堆代码是可能的,这些库大致接近这个(在某种程度上,我已经完成了),但这并不是我在这里寻找的。

Java Tree用于表示路径列表中的文件系统(files / dir)

我有这样的路径列表 /mnt/sdcard/folder1/a/b/file1 /mnt/sdcard/folder1/a/b/file2 /mnt/sdcard/folder1/a/b/file3 /mnt/sdcard/folder1/a/b/file4 /mnt/sdcard/folder1/a/b/file5 /mnt/sdcard/folder1/e/c/file6 /mnt/sdcard/folder2/d/file7 /mnt/sdcard/folder2/d/file8 /mnt/sdcard/file9 因此,从这个路径列表(Stings)我需要创建一个Java Tree结构,其中包含文件夹作为节点,文件作为leaf(不会将空文件夹作为叶子)。 我需要的是我想的是add方法,我向它们传递一个String(文件的路径),然后将它添加到树中的正确位置,如果它们不在那里,则创建正确的节点(Folder) 当我在节点和叶子列表上时,这个树结构将需要我获取节点列表(但我认为这将是树的常规function) 我将始终将字符串作为路径而不是真正的文件或文件夹。 是否有可以使用的东西或源代码开始? 非常感谢你。

在Java中删除ArrayList的最后一个对象

我想快速从ArrayList删除最后一个对象。 我知道remove(Object O)在ArrayList占用O(n) ,但是我想知道是否可以在恒定时间内执行此操作,因为我只想删除最后一个对象?

Java中的持久数据结构

有没有人知道一个库或者至少有一些关于在Java中创建和使用持久数据结构的研究? 我没有将持久性称为长期存储,而是将持久性称为不变性(参见维基百科条目 )。 我目前正在探索为持久性结构建模api的不同方法。 使用构建器似乎是一个有趣的解决方案: // create persistent instance Person p = Builder.create(Person.class) .withName(“Joe”) .withAddress(Builder.create(Address.class) .withCity(“paris”) .build()) .build(); // change persistent instance, ie create a new one Person p2 = Builder.update(p).withName(“Jack”); Person p3 = Builder.update(p) .withAddress(Builder.update(p.address()) .withCity(“Berlin”) .build) .build(); 但这仍然有点像锅炉板。 有任何想法吗?

Lists,ArrayLists,Maps,Hashmaps,Collections等有什么区别..?

我一直在使用HashMaps,因为我在Java中再次开始编程而没有真正理解这些Collections的东西。 老实说,我不确定是否一直使用HashMaps最适合我或生产代码。 到目前为止,只要我能够以我在PHP中调用它的方式获取我需要的数据对我来说无关紧要(是的,我承认你现在正在考虑的任何负面的事情)其中$this_is_array[‘this_is_a_string_index’]为回忆变量数组提供了很多便利。 所以现在,我已经使用java超过3个月了,并且遇到了我在上面指定的接口并且想知道,为什么有这么多东西(更不用说,矢量,abstractList {哦,这个列表继续… })? 我的意思是他们彼此之间有什么不同? 更重要的是,在我的案例中使用的最佳界面是什么?

找到给出集合的最长的单词

这是一个谷歌面试问题,我在网上找到了大多数使用HashMap或类似数据结构的答案。 我想尽可能找到使用Trie的解决方案。 有人可以给我一些提示吗? 这是一个问题:您将获得一个字典,其forms为每行包含一个单词的文件。 例如, abacus deltoid gaff giraffe microphone reef qar 您还会收到一系列信件。 例如, {a, e, f, f, g, i, r, q}. 任务是找到字典中可以用字母集拼写的最长单词。 例如,上面示例值的正确答案是“长颈鹿”。 (注意“礁石”不是一个可能的答案,因为这组字母只包含一个“e”。) Java实现将是首选。