
算法
dadada~
这个作者很懒,什么都没留下…
展开
-
剑指offer
03 数组中的重复数字pythonclass Solution: def findRepeatNumber(self, nums: List[int]) -> int: cnt_list = [0 for _ in range(len(nums))] for _ in nums: cnt_list[_] += 1 for _ in range(len(nums)): if cnt_list[_]原创 2021-01-09 10:51:51 · 110 阅读 · 0 评论 -
八数码问题是否有解
八数码问题描述: 3*3的棋盘有八个数字(1-8)和一个空位,数字可以滑动。问题研究的是从一个棋盘状态到另一个状态。是否有解的判定12345678对于上面的棋盘状态,我们可以表示为一个一维的序列 1,2,3,4,5,6,7,8,9,0 (空位表示为0) 。现在,对这个序列定义逆序,即在某个数字的前面比它大的数字个数。我们再来看滑动对逆序的影响:左右:逆序不变。上下:逆序加2或减2。也就是说,一个棋盘状态无论怎么滑动,它的逆序和的奇偶性是不会变的。原创 2020-09-09 23:27:28 · 2651 阅读 · 1 评论 -
单源最短路径
单源最短路径从给定源节点s到每个结点v的最短路径。最短路径的最优子结构最短路径算法依赖一个重要的性质,两个结点之间的最短路径包含其他最短路径,最短路径的子路径也是最短路径。负权重边如果图G包含从源节点s可以到达的权值为负的的环路,则最短路径权重定义不成立(总是可以找到权值更小的路径)。如果图G不包含那样的环路,那么即使有负权边也能计算最短路径权重。Dijkstra算法需要图所有边权都为正,Bellman-Ford算法不仅允许负权边,甚至可以侦测到存在的权重为负的环。松弛操作对于每个结点原创 2020-08-25 18:34:07 · 204 阅读 · 0 评论 -
不相交集合的数据结构和操作
什么是不????集合不相交集合维护了一个不相交动态集的集合,选用一个代表元素来标识每个集合,并不关心哪个元素作为代表(当然,还是有一定的选取规则)。动态集合支持的操作:Make-Set(x) 建立一个新的集合,它的成员唯一且仅出现在此集合中(因为不相交)。Union(x,y)将包含x和y的两个动态集合(不一定是单一成员集合)合并成一个新的集合,选取两个集合中的任意元素作为代表。Find-Set(x) 返回一个指针,这个指针指向包含x的集合的代表。(这个集合是唯一的)不相交集合的链表表示每个原创 2020-08-24 18:46:31 · 464 阅读 · 0 评论 -
最小生成树MST,prim和kruskal算法
最小生成树问题描述:给出一个连通无向图 G=(u,v)G=(u,v)G=(u,v)和边权重函数 w:E→Rw:E→Rw:E→R,希望找出它的最小生成树,即找出一个无环子集使得所有结点都被连接且边权之和最短。生成过程MST(G,w)initialize A with empty setwhile A doesn't form a MST find an edge (u,v) that is safe for A A = A union {(u,v)}return A其中A是某个最小生成树的原创 2020-08-23 19:51:24 · 414 阅读 · 0 评论