![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 74
emailed
这个作者很懒,什么都没留下…
展开
-
Oil Deposits(POJ 1562)
Oil DepositsTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 2682 Accepted: 1592Description原创 2009-06-14 10:46:00 · 620 阅读 · 0 评论 -
三门问题
三门问题又叫蒙提霍尔问题。说的是在一个电视游戏中,参赛者面对三扇一模一样的关闭着的门,其中一扇门后面是汽车,另外两扇后面是山羊。参赛者选择了一扇门,但并没有打开;这时主持人开启了另外一扇门,后面是山羊。主持人问参赛者要不要换另外一扇关着的门。问题是:换另一扇门是否会增加参赛者赢得汽车的概率?注解(引自Wikipedia):Mueser和Granberg透过在主持人的行为身上加上明确转载 2009-11-01 22:27:00 · 901 阅读 · 0 评论 -
非递归遍历二叉树
//使用栈模拟二叉树遍历(非递归)void preOrderNoRecursive(TreeNode* root){ stack s; while ((NULL != root) || !s.empty()) { if (NULL != root) { visit(root);转载 2009-10-31 01:08:00 · 605 阅读 · 0 评论 -
Binary Indexed Tree
通常对于求数组的两个操作: 一、更新某个元素 二、求数组中某个区间的元素的和对于操作一,在O(1)可完成,对于操作二,在O(n)内可完成,但是如果操作二的次数很多,可能就比较耗时间了,所以这里对于操作二提供另外一种方法,叫做Binary Indexed Tree,时间复杂度为O(logn).假设一共有N个元素,a[N]这里用一个辅助数组tree[N],数组下标从1开始原创 2009-11-05 21:32:00 · 674 阅读 · 0 评论 -
bit 的 一些有用的操作
ALL_BITS 是所有的位都为1A: 1000 0010B: 1100 11001.对A的所有位取反ALL_BITS ^ A2.将A的第bit位(最右边是第0位)设置为1A |= 1 3.将A的第bit位清0A &= ~(1 4.测试第bit位是否为0 (A & 1原创 2009-11-03 20:31:00 · 525 阅读 · 0 评论 -
An Introduction to Recursion, Part 2
Scenario #2: Multiple Related DecisionsWhen our program only has to make one decision, our approach can befairly simple. We loop through each of the options for our decision,evaluate each one转载 2009-11-03 19:16:00 · 585 阅读 · 0 评论 -
An Introduction to Recursion, Part 1
Recursion is a wonderful programming tool. It provides a simple,powerful way of approaching a variety of problems. It is often hard,however, to see how a problem can be approached recursively;转载 2009-11-03 19:10:00 · 552 阅读 · 0 评论 -
Range Minimum Query (RMQ)
RMQ(Range Minimum Query) : 给定一个数组,求给定的两个索引(下标)间最小值元素的索引. 符号意义:假设一个算法有 f(n)的预处理时间和g(n)的查询时间.则这个算法的总的时间复杂度记为 记数组A在索引i和j之间的最小值元素的索引为RMQA(i, j).例子:A[0,9]翻译 2009-11-03 13:33:00 · 2452 阅读 · 1 评论 -
后缀树
在pongba的讨论组上看到一道Amazon的面试题:找出给定字符串里的最长回文。例子:输入XMADAMYX。则输出MADAM。这道题的流行解法是用后缀树(Suffix Tree)。这坨数据结构最酷的地方是用它能高效解决一大票复杂的字符串编程问题:在文本T里查询T是否包含子串P(复杂度同流行的KMP相当)。文本T里找出最长重复子串。比如abcdabcefda里abc同da都重复出转载 2009-10-21 20:01:00 · 2908 阅读 · 0 评论 -
三种最基本的排序 选择排序 插入排序 冒泡排序
/* * 选择排序(Selection sort)、插入排序(Insertion sort)与气泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式,它们由于速度不快而不实用(平均与最快的时间复杂度都是O(n2)),然而它们排序的方式确是值得观察与探讨的。 * */public class BasicSort{ /* * 选择排序将要转载 2009-10-17 15:10:00 · 775 阅读 · 0 评论 -
五类插入排序
插入排序可分为五类: 1. 直接插入排序算法 基本操作:将一个记录插入到已排好序的有序表中,从而得到一个新的、记录增1的有序表。 时间复杂度:O(n^2) 代码:java表示 /** * 直接插入排序,升序排列。 * * @param data */ public void dirInsertSor(int[] data) { fo转载 2009-10-15 00:57:00 · 740 阅读 · 0 评论 -
Tian Ji -- The Horse Racing (TOJ 1188)
1188. Tian Ji -- The Horse Racing Time Limit: 3.0 Seconds Memory Limit: 65536KTotal Runs: 419 Accepted Runs: 135 Here is a famous story in Chinese history."That was about 2300 years原创 2009-06-14 10:55:00 · 1650 阅读 · 0 评论 -
Square(TOJ 1398)
1398. Square Time Limit: 2.5 Seconds Memory Limit: 65536KTotal Runs: 685 Accepted Runs: 236 Given a set of sticks of various lengths, is it possible to join them end-to-end to form a squ原创 2009-06-14 10:50:00 · 655 阅读 · 0 评论 -
约瑟夫问题的数学解法
在原帖上加了一些内容,便于理解. 无论是用链表实现还是用数组实现都有一个共同点:要模拟整个游戏过程,不仅程序写起来比较烦,而且时间复杂度高达O(nm),当n,m非常大(例如上百万,上千万)的时候,几乎是没有办法在短时间内出结果的。我们注意到原问题仅仅是要求出最后的胜利者的序号,而不是要读者模拟整个过程。因此如果要追求效率,就要打破常规,实施一点数学策略。为了讨论方便,转载 2009-11-01 16:29:00 · 585 阅读 · 0 评论