时间复杂度

To Java程序员:切勿用普通for循环遍历LinkedList

ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: public static void main(String[] args) { List<Integer> arrayList = n...

七大查找算法

顺序查找 二分查找 插值查找 斐波那契查找 树表查找 分块查找 哈希查找 查找是在大量的信息中寻找一个特定的信息元素。在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找算法分类: 1)静态查找和动态查找: 注:静态或者动态都是针对查找表而言的...

求2个集合的交集

求2个集合的交集 第一种方法 最简单、粗暴的循环遍历2个集合,判断如果有相同的元素就取出来。假设集合1的长度为M,集合2的长度为N,那么,时间复杂度为:O(M*N) 代码: public static List<string> GetIntersection(List<string> list1, List<string&...

湖北省大学程序设计竞赛(武大校赛)

Link A 题意 几何 分析 旋转一个三角形,观察即可得出 B 概率题,胆量== C 题意 给一棵树,问这棵树的所有子图 分析 定义:num[i]:以i为根的子树数量(i选择在内),dfs递归count即可 G   模拟题 直观的是 1、并不是一直尽可能多的买卡片好 2、X<=Y 的时候并不一定不买,因为卡片一旦买了,产生的效益可以叠加 故...

几种常见的排序算法分析

选择排序 选择排序是一种非常直观且简单的排序算法。它工作的流程是这样的: 首先找出数组中最小的那个元素,将它和数组的第一个元素交换位置;然后在第二个到最后一个元素中间找到最小的那个元素与数组的第二个元素交换位置。 就这样依次遍历,直到将整个数组排序。 选择排序不是稳定排序,但是是原地排序,时间复杂度是平方级,空间复杂度为1。 C++代码实现如下: #inc...

算法概念、大O记号

算法定义:基于特定的计算类型,旨在解决某一信息处理问题而设计的一个指令序列算法需具备以下要素 输入与输出输入(input):对所求解问题特定实例的描述 输出(output):经计算和处理之后得到的信息,即针对输入问题实例的答案 确定性和可行性:算法应可描述为由若干语义明确的基本操作组成的指令序列,且每一基本操作在对应的计算模型中均可兑现。 有穷性...

信息熵 和 算法时间复杂度

本文仅仅是我个人的理解,发现错误请告诉我一下。 前几天虽然看完了吴军先生的《数学之美》,但一直搞不懂信息熵所以连带着也没搞懂 最大熵的原理,直到今天白天看了TopLanguage的一个讨论信息论的帖子 再经过晚上散步时思考才顿悟信息熵的意义。 信息是个很抽象的概念。人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少。比如一本五十万字的中文书到底...

排序算法时间复杂度的下界

《算法导论》中有一节讲的是“(比较)排序算法时间的下界”,本文将论述同一个问题,思路略有差异。本文将从信息熵的角度论述排序算法时间复杂度的下界。若本文论述过程中有错误或是不足,还请各位指正。 1. 问题归约     排序,涉及到被排序的序列和排序的方法。(比较)排序算法时间的下界对被排序的序列和排序方法做了以下限制 没有关于被排序序列的先验信息,譬如序列...

堆排序算法实现

关于堆排序算法的思想,网上有很多介绍,这里不再解释,这里提供了两个Java类,读者可以把类潜入到自己的程序中,直接调用,免去了重新编写堆排序的过程。 分为两个堆排序接口,一个是数组从下标1开始存储的堆排序类Duisort1,另一个是从下标0开始存储的堆排序类Duisort2,具体的Java代码如下: 1 import java.util.*;...

LCA(最近公共祖先)离线算法Tarjan+并查集

本文来自:http://www.cnblogs.com/Findxiaoxun/p/3428516.html 写得很好,一看就懂了。 在这里就复制了一份。 LCA问题: 给出一棵有根树T,对于任意两个结点u,v求出LCA(T, u, v),即离根最远的结点x,使得x同时是u和v的祖先。      把LCA问题看成询问式的:给出一系列询问,程序应当对每一个询...