摘要:
戴克斯特拉算法:(英语:Dijkstra's algorithm,又译迪杰斯特拉算法)由荷兰计算机科学家艾兹赫尔·戴克斯特拉在1956年提出。戴克斯特拉算法使用了广度优先搜索解决赋权有向图的单源最短路径问题。 如图为一个有权无向图,起始点1到终点5,求最短路径 lowcost数组存储下标点到起始点的 阅读全文
摘要:
克鲁斯卡尔算法:Kruskal算法是一种用来查找最小生成树的算法,由Joseph Kruskal在1956年发表。用来解决同样问题的还有Prim算法和Boruvka算法等。三种算法都是贪心算法的应用。和Boruvka算法不同的地方是,Kruskal算法在图中存在相同权值的边时也有效。 基本思想:先构 阅读全文
摘要:
普里姆算法(Prim算法):图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(英语:Vojtěch 阅读全文
摘要:
问题描述: 现有两个等长的升序序列的序列A,B,试设计一个时间和空间都尽可能高效的算法,找出两个序列的中位数 算法的基本思想是:分别求出两个序列的中位数,即为a b,有下列三种情况1:a=b;即a 为两个序列的中位数2:a<b: 则中位数只能出现在a和b之间,在序列A中舍弃a之前的元素的到序列A1, 阅读全文
摘要:
问题描述:n个数中找出第k小的元素 输入: 95 3 8 1 4 6 9 2 74 输出: 4 用快排思想先找出数组中第一个元素的位置(博客中有快排算法): 排序前:5 3 8 1 4 6 9 2 7 排序后:2 3 4 1 5 6 9 8 7 (5的位置确定了) 用k与元素5的下标计较,等于就输出 阅读全文
摘要:
输入: 9 3 4 5 8 6 1 7 2 9 输出: 1 2 3 4 5 6 7 8 9 时间复杂度: O(n2) 代码: #include <iostream> #include <bits/stdc++.h> using namespace std; int main() { int n; i 阅读全文
摘要:
减治法定义:将问题分成若干子问题,只解决其中的一个适合的子问题。 问题描述:n个硬币中有一个假币,假的硬币比真的硬币轻,一个只有0刻度的天平,求出假币的位置。 输入: 8 2 2 2 2 2 1 2 2 输出: 6 当n为偶数(start+end)为奇数时,将n个硬币等分,比较谁轻,轻的一方有假币。 阅读全文
摘要:
子序列:序列 X<A,B,C,D,E,F> , <A> <A,B> <A,C,E> <A,B,C,D,E,F>等等都为X。 最长公共子序列:两个序列的公共子序列最长的那个。 问题分析: 给定两个序列: 定义个C数组,存储当x1中只有0~7个元素时与y1中只有0~6个元素的最长公共子序列。 假设x1中 阅读全文
摘要:
归并排序(MERGE-SORT):是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳 阅读全文
摘要:
问题描诉: 给定有n个整数(可能为负整数)组成的序列a1,a2,...,an,求该序列连续的子段和的最大值和区间。 如果该子段的所有元素和是负整数时定义其最大子段和为0。 输入:1 -2 4 5 -2 8 3 -2 6 3 7 -1 输出:32 , [3 , 11] 蛮力法: 时间:O(n3) #i 阅读全文