随笔分类 - 算法设计与分析课程
摘要:问题 A: 割点与桥 题目描述 给出一个无向连通图,找到所有的割点和桥 输入 第一行:点的个数,如果点个数是n,他们的编号为0 ~ n-1 余下的行:每行代表一条边,如“0 2”代表顶点0和顶点2有一条边 (一条边只出现一次,如出现“0 2”则不会出现“2 0”) 第一行:点的个数,如果点个数是n,
阅读全文
摘要:问题 A: 变位词 题目描述 请大家在做oj题之前,仔细阅读关于抄袭的说明http://www.bigoh.net/JudgeOnline/. 变位词是指由相同的字母组成的单词,如eat、tea是变位词。本次问题给出一串单词,你需要找到所有的变位词。 请大家在做oj题之前,仔细阅读关于抄袭的说明ht
阅读全文
摘要:问题 A: 动态中位数问题 题目描述 输入一组整数a1, a2, …, an ,每输入一个整数,输出到此时为止的中位数。 中位数定义:如果数串的大小是偶数 2j,中位数是从小到大排列的第 j 个数;如果数串的大小是奇数 2j+1,中位数是从小到大排列的第 j+1 个数。 输入一组整数a1, a2,
阅读全文
摘要:3.1 不证明了 3.2 正确性不证了 如果不进行优化,那最坏复杂度和平均复杂度都是n2 冒泡排序代码如下: //冒泡排序 void bubblesort(vector<int>& v) { for (int i = 0; i < v.size() - 1; ++i) { for (int j =
阅读全文
摘要:一、快速排序 算法导论上关于快速排序有两种写法 第一种,从头到尾遍历,不断将小于基准元素的项移到前面。代码很简介,只需要维护一个交换位置,表示小于基准元素的末尾位置加一 我们看算法导论上的一个例子: 代码实现(代码中用p记录上面i+1的位置,pos2应该为数组长度减1): 第二种,维护两个位置,第一
阅读全文
摘要:一、递归方程 按照分治的思想,可以将一个递归的复杂度写成递归方程 一、解递归方程--猜然后证明 该方法又称为代入法,步骤如下: 1、猜解的形式 2、数学归纳法证明正确 例子: 我们假设有如下递归式: 我们猜其解为T(n)=O(nlgn),然后对递归式进行替换,得 特别注意:我们替换之后得出的结果必须
阅读全文
摘要:一、几种比较复杂度的符号 数据结构有描述,相关严格数学定义也不想说了,就这么过了吧。 二、最大子数组的几种解决方法 从最复杂的暴力解法过渡到最简单的动态规划 解析和代码见这里:http://www.cnblogs.com/likaiming/p/8570205.html 三、作业调度问题 后面的动态
阅读全文
摘要:问题 A: 最大子序列和问题 题目描述 给定一整数序列 a1, a2, …, an,求 a1~an 的一个子序列 ai~aj,使得从 ai 到 aj 的和最大。 只需要求出最大子序列的和,而不需要求出最大的那个序列。 给定一整数序列 a1, a2, …, an,求 a1~an 的一个子序列 ai~a
阅读全文
摘要:问题1 用来测试的,就不说了 问题2:中位数附近2k+1个数 给出一串整型数 a1,a2,...,an 以及一个较小的常数 k,找出这串数的中位数 m 和最接近 m 的小于等于 m 的 k 个数,以及最接近 m 的大于等于 m 的 k 个数。将这 2k+1 个数按升序排序后输出。 中位数定义:如果数
阅读全文
摘要:1.1 这里直接使用冒泡排序,并设置了变量保证在已经排好的情况下及时终止 void sort(vector<int>& v) { bool flag = true; for (int i = 0; i < v.size() && flag; ++i) { flag = false; for (int
阅读全文