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