Algorithm 按递增顺序对邻接列表中的列表进行排序
在有向图中,我需要一个O(n+m)算法来对邻接列表中的列表进行排序,以便在每个列表中按递增顺序对顶点的名称进行排序。 我能想到的唯一方法是对每个列表执行插入排序,但这肯定不会在O(n+m)中运行。有人能帮我吗?Algorithm 按递增顺序对邻接列表中的列表进行排序,algorithm,sorting,graph,time-complexity,Algorithm,Sorting,Graph,Time Complexity,在有向图中,我需要一个O(n+m)算法来对邻接列表中的列表进行排序,以便在每个列表中按递增顺序对顶点的名称进行排序。 我能想到的唯一方法是对每个列表执行插入排序,但这肯定不会在O(n+m)中运行。有人能帮我吗? 谢谢我认为这是不可能的。您对O(n+m)时间的请求表明您正在寻找图的一个部分。但是,尽管这将对图形进行排序,但它不允许按另一个度量(字符串节点名称)对节点/边进行排序所需的比较 也许你没有准确地说明这个问题?我还没有足够的观点通过评论提出这个问题,所以我假设n是顶点的数量,m是边的数量。
谢谢我认为这是不可能的。您对O(n+m)时间的请求表明您正在寻找图的一个部分。但是,尽管这将对图形进行排序,但它不允许按另一个度量(字符串节点名称)对节点/边进行排序所需的比较
也许你没有准确地说明这个问题?我还没有足够的观点通过评论提出这个问题,所以我假设n是顶点的数量,m是边的数量。通过按顶点名称排序,我将假设您的意思是要按字母顺序排序。如果是这样,那么您可能能够使用线性时间排序算法来实现O(n+m),即基数排序。只要顶点名称的长度不是很大,对每个列表使用基数排序将总共花费O(n+m)个时间。查看wiki以了解基数排序:
此解决方案不使用基数排序,而是依赖于邻接列表本身中顶点的顺序以及传入/传出边的概念 这是假设图G是一个邻接列表的形式,其顶点已经排序。特别是,用于邻接列表的数据结构必须是链表的数组(或允许随机访问的任何数据结构)。数组的每个索引对应于图中的一个顶点,而链表包含其相邻顶点。设n和m分别为顶点数和边数。 为了说明,假设我们有以下有向图G: G: [1] ->4,5,2 [2] ->3,1 [3] ->x(无邻居) [4] ->1,2 [5] ->4
[1] -> [2] -> [3] -> [4] -> [5] ->
[1] -> [2] ->1 [3] -> [4] ->1 [5] ->1 对G中的所有顶点重复此操作。此过程将花费O(n+m)时间