如果我必须为研究所的数据网格站开发应用程序。应用的目的是在上午10点到10点30分之间的一周内从数据GRID站接收一次数据,然后将其存储到数据结构中,数据仅由数字组成,但一个条目的数字可能很长从数组,列表,链表,双向链表,队列,优先级队列,堆栈,二叉搜索树,AVL树,线程二叉树,堆,排序顺序数组和跳过列表<哪个数据结构将是最佳的给定方案/ p>
我想存储已排序的数字。排序后的数据可以按升序或降序排列,主要关注点是“快速有效的搜索”。
答案 0 :(得分:1)
根据您的描述,我收集到您不存储任何其他数字或数字的数据。所以基本上你想知道一个数字是否在集合中。
了解这一点的最快方法是为每个数字添加一组标志。假设您处理1到1000之间的数字。您想知道数字200是否在集合中。看看位置200,标志是真还是假。你知道,这是最快的方法,因为你只查找一个地方。
正如我们在这里谈论布尔标志一样,一点就足够存储了。根据数字的数量,可用的内存和机器的架构,您可以决定将布尔值以位,字节,单词或其他形式存储起来。
话虽如此,你可能不得不处理这么多数字,以至于上述方法不再可行。理论上它会是最快的,但是由于内存有限,硬盘交换,许多读取,其他算法可能会更好。您可以选择:
其中哪一项最有效,再次取决于您的数据和机器。
答案 1 :(得分:0)
这取决于您想要进行的搜索类型。如果您只想知道数字是否在数据集中,那么哈希将非常快并且与数据集的大小无关。而且没有必要排序,甚至没有任何秩序的概念。
如果我引用Perl的作者Larry Wall的话:
对关联数组进行线性扫描就像试图俱乐部一样 有人带着Uzi去死。
(关联数组与散列同义。)