Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果内存不缺乏,您将如何在具有表示和排序集的库的语言中实现排序_Java_Algorithm_Data Structures - Fatal编程技术网

Java 如果内存不缺乏,您将如何在具有表示和排序集的库的语言中实现排序

Java 如果内存不缺乏,您将如何在具有表示和排序集的库的语言中实现排序,java,algorithm,data-structures,Java,Algorithm,Data Structures,如果内存不缺乏,您将如何在具有表示和排序集合的库的语言中实现排序集合是无序的,因此排序集合是无用的。“排序”集与集本身相同,即使内存不足 在非稀缺内存中表示集合,就像在稀缺内存中表示集合一样。然而,如果内存不稀缺,我们可以为内存中的每个值或对象创建一个二进制谓词,声明:“我是集合X的成员” 如果要检查对象Y是否是集合X的成员,则只需检查二进制谓词;是真是假 集合中所有对象的迭代就像一个数组。它也可以实现为一个双链接列表或使用哈希表。区别在于细节;您希望集合中有哪些对象 如果内存不是很紧缺,而且C

如果内存不缺乏,您将如何在具有表示和排序集合的库的语言中实现排序

集合是无序的,因此排序集合是无用的。“排序”集与集本身相同,即使内存不足

在非稀缺内存中表示集合,就像在稀缺内存中表示集合一样。然而,如果内存不稀缺,我们可以为内存中的每个值或对象创建一个二进制谓词,声明:“我是集合X的成员”

如果要检查对象Y是否是集合X的成员,则只需检查二进制谓词;是真是假

集合中所有对象的迭代就像一个数组。它也可以实现为一个双链接列表或使用哈希表。区别在于细节;您希望集合中有哪些对象

如果内存不是很紧缺,而且CPU中还有足够的马力,那么我会将对象的每个哈希值存储在内存中,而不是动态计算。然后,集合的哈希表式实现对于列出功能来说非常快。从集合中添加/删除对象相当缓慢

如果添加/删除比列出更需要,任何链接列表都可以

这两种方法都可以为每个对象使用谓词值。这取决于你的要求;例如,是否允许两个对象同时位于两个集合中?(通常这是“是”),然后需要为集合中的每个对象使用数组/链表存储,以存储其成员信息


不过,没有“一对一”的解决方案。只有我的两便士。

这在很大程度上取决于情况。我假设你指的是列表,而不是集合。 还有,记忆是多么的稀少

无论是哪种情况,请阅读以下内容-

在所有情况下,就地合并排序都不是坏事。 排序时,此排序不使用任何顺序的额外内存

如果内存不是那么少,快速排序通常会更好。

然后,桶和基数排序在某些类型的数据上工作得很好。 如果你的数字都小于10000,这些分类效果很好

当数字集太大时,它们工作得不太好。(即,随机32位整数)。 http://en.wikipedia.org/wiki/Radix_sort

编辑:注意:我忽略了表示和排序集合的整个库。WTF这跟什么有关系吗? 也许这个问题是。。如果我有一个库来对列表进行排序,而每个列表只能有一个?
如果是这样的话,这个问题就太奇怪了,听起来像是家庭作业。

不完全是这样,但我很想找到合适的解决方案。嗯。。。我会使用库:-)。[提示:如果你努力更清楚地表达你的问题,我可能会努力给你一个明智的答案。]如果你正在存储整数,内存不是问题,那么考虑一个比特集,它提供了非常紧凑的存储,并且可以按升序迭代。