Sorting 存储具有重复键的自排序列表的正确数据结构是什么?
我需要一些能够在O(log(n))复杂度下工作的东西,我考虑过AVL树,但问题是有些键可能会重复它们自己(例如某人的分数),所以我想不出如何将其作为树来实现。做这件事的正确方法是什么?有很多选择。大多数类型的二元搜索树可以很容易地修改,以允许具有重复值的节点,因为平衡操作(通常)纯粹由旋转组成,从而保持序列的有序性。对于这样的情况,您只需执行正常的BST插入,但每次看到重复的值时,您只需任意向左或向右移动并继续,就好像该值是不同的一样 SkipList特别容易更新以支持每个密钥的多个副本,因为它们不会对插入或删除进行任何复杂的结构更新 如果没有与每个键关联的辅助信息,那么另一个更简单的选项是存储一个标准的二进制搜索树,但用一个“count”字段来增加每个节点,该字段指示该字段存在多少逻辑副本。每次插入时,如果密钥不存在,则使用计数1创建它。如果它已经存在,只需增加现有节点中的计数。删除将以类似方式执行Sorting 存储具有重复键的自排序列表的正确数据结构是什么?,sorting,data-structures,time-complexity,Sorting,Data Structures,Time Complexity,我需要一些能够在O(log(n))复杂度下工作的东西,我考虑过AVL树,但问题是有些键可能会重复它们自己(例如某人的分数),所以我想不出如何将其作为树来实现。做这件事的正确方法是什么?有很多选择。大多数类型的二元搜索树可以很容易地修改,以允许具有重复值的节点,因为平衡操作(通常)纯粹由旋转组成,从而保持序列的有序性。对于这样的情况,您只需执行正常的BST插入,但每次看到重复的值时,您只需任意向左或向右移动并继续,就好像该值是不同的一样 SkipList特别容易更新以支持每个密钥的多个副本,因为它
当然,如果您不想使用自己的数据结构,只需找到一个好的multimap或multiset实现,这将很好地完成您的工作。根据您选择的编程语言,您甚至可以在标准库中找到它们。:-) 您是否只需要将一些数据与密钥一起存储?关于二进制搜索树(不是AVL)可能会有所帮助。