algorithm-series-2d-partial-order
二维偏序
概念
偏序关系满足:
反自反性(Reflexivity): 对于集合中的每个元素,关系都与自身存在。
反对称性(Antisymmetry): 如果存在a<=b && b<=a,则必须是a==b
传递性(Transitivity): 如果存在a<=b && b<=c,则必须是a<=c
二维偏序问题涉及对一个二维数据集中元素的排序,其中排序不仅仅依赖于元素自身的大小关系,还可能依赖于元素在不同维度上的关系。
二维偏序是这样一类问题:已知点对的序列(a1,b1), (a2,b2), (a3,b3)...,
并在其上定义某种偏序关系<,现有点(ai,bi),求满足(aj,bj) < (ai,bi)的的数量。
二维偏序问题一般是要使其中的一个维度有序,再通过树状数组的方式处理另一个维度
翻转对
给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。
你需要返回给定数组中的重要翻转对的数量。
示例 1:
12输入: ...
algorithm-sort
一些常见的排序
algorithm-topo-sort
拓扑排序
概念
拓扑排序是一种在有向图中对节点进行排序的算法,其中每个节点表示一个任务或事件,而有向边表示任务间的依赖关系。拓扑排序可以帮助我们找到一种满足依赖关系的节点排列顺序,从而确保所有依赖关系得到满足。
概述
拓扑排序通常用于解决有向无环图(DAG)中的任务调度、依赖分析、编译顺序等问题。在一个有向图中,每个节点代表一个任务,而有向边代表任务间的依赖关系。拓扑排序的目标是找到一种节点排列,使得每个节点都排在它的后继节点之前,从而满足所有的依赖关系。
基于BFS的拓扑排序算法步骤
初始化一个队列,将所有入度为 0 的节点入队。
当队列不为空时,执行以下操作:
从队列中弹出一个节点,将其添加到结果列表中。
遍历该节点的所有后继节点(邻居节点):
将后继节点的入度减一。
如果后继节点的入度变为 0,则将其入队。
重复步骤 2,直到队列为空。
基于DFS的拓扑排序算法步骤
选择一个没有入边的节点作为起点。
对起点节点进行DFS遍历,将遍历过程中的节点按照逆序加入到结果列表中。
重复步骤 1 和步骤 2,直到所有节点都被遍历过。
课程表
你这个学期必须选修 numC ...