
小算法
EnjoyCodingAndGame
Nothing raplaces hard work.
纸上得来终觉浅,绝知此事要躬行。
展开
-
快速判断一个非负整数是否为完全平方数
快速判断一个非负整数是否为完全平方数定义:若一个数能表示成某个自然数的平方的形式,则称这个数为完全平方数。性质:1. 完全平方数是非负整数。2. 十进制的完全平方数的末位数只能是0, 1, 4, 5, 6, 9; 十六进制的完全平方数的末位数只能是0, 1, 4, 9。3. 除0以外的完全平方数是从1开始的连续的奇数的和,例如: 1 = 1, 4 = 1 +原创 2014-10-17 23:47:22 · 3014 阅读 · 3 评论 -
拓扑排序C++实现
一.定义对一个有向无环图(Directed Acyclic Graph, DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。注意:1)只有有向无环图才存在拓扑序列;2)对于一个DAG原创 2016-09-21 16:00:30 · 18156 阅读 · 3 评论 -
红黑树算法简要介绍
1. 简介红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C++ STL中,很多部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操作的支持)。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高转载 2016-08-26 00:04:06 · 2448 阅读 · 1 评论 -
二叉树前序、中序、后序遍历相互求法
今天来总结下二叉树前序、中序、后序遍历相互求法,即如果知道两个的遍历,如何求第三种遍历方法,比较笨的方法是画出来二叉树,然后根据各种遍历不同的特性来求,也可以编程求出,下面我们分别说明。首先,我们看看前序、中序、后序遍历的特性(三种遍历方法,从语义上,是相对于根而言的): 前序遍历(根左右): 1.访问根节点 2.前序遍历左子树 3.前序遍历右子树 中序遍历(左根右转载 2016-08-25 23:00:19 · 934 阅读 · 0 评论 -
Fast Modular Exponentiation
算法分析First, it is required that the exponent e be converted to binary notation. That is, e can be written as:{\displaystyle e=\sum _{i=0}^{n-1}a_{i}2^{i}}In such notation, the length原创 2016-09-17 22:48:34 · 1200 阅读 · 0 评论 -
Trie树详解及其应用
1、 概述Trie树,又称字典树、单词查找树或者前缀树,可以保存一些字符串->值的对应关系,是一种用于快速检索的多叉树结构。如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。Trie一词来自retrieve,发音为/tri:/ “tree”,也有人读为/traɪ/ “try”。Trie树可以利用字符串的公共前缀来节约存储空间。如下图所示,该trie树用10个节点保存了6个字原创 2016-08-25 18:08:48 · 689 阅读 · 0 评论 -
Google面试题详解(0~n之间1的个数,f(n)=n)
0. 问题描述Consider a function which, for a given whole number n, returns the number of ones required when writing out all numbers between 0 and n. For example, f(13)=6. Notice that f(1)=1. What is the原创 2016-09-01 00:13:21 · 1939 阅读 · 0 评论 -
八大排序算法总结及C/C++实现
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排原创 2016-09-10 16:22:51 · 7246 阅读 · 2 评论 -
摩尔投票算法(Boyer–Moore majority vote algorithm)
问题描述:1. The majority vote problem is to determine in any given sequence of choices whether there is a choice with more occurrences than half of the total number of choices in the sequence and if so,原创 2016-08-30 15:50:56 · 3132 阅读 · 0 评论 -
寻找第(前)k大的数的方法总结
问题描述给定一个包含n个数的乱序数组,寻找其中第k大的数。方法总结解法1:先将乱序数组按照从大到小排序,然后取出第k大的数。时间复杂度为O(n*logn)。解法2:利用选择排序,k次选择后即可得到第k大的数。时间复杂度为O(n*k)。解法3:利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种原创 2016-09-08 23:00:32 · 2466 阅读 · 0 评论 -
最近公共祖先(Least Common Ancestors,LCA)问题详解
问题描述求有根树的任意两个节点的最近公共祖先。最近公共祖先简称LCA(Lowest Common Ancestor),所谓LCA,是当给定一个有根树T时,对于任意两个结点u、v,找到一个离根最远的结点x,使得x同时是u和v的祖先,x 便是u、v的最近公共祖先。(参见:http://en.wikipedia.org/wiki/Lowest_common_ancestor )原问题涵盖一般性的转载 2016-08-28 01:45:53 · 28652 阅读 · 3 评论 -
用位运算实现两个整数的加减乘除
一、整数加法用位运算实现加法也就是计算机用二进制进行运算,32位的CPU只能表示32位内的数,这里先用1位数的加法来进行,在不考虑进位的基础上,如下1 + 1 = 01 + 0 = 10 + 1 = 10 + 0 = 0很明显这几个表达式可以用位运算的“^”来代替,如下1 ^ 1 = 01 ^ 0 = 10 ^ 1 = 10 ^ 0 = 0这原创 2016-03-07 16:16:24 · 1413 阅读 · 0 评论 -
灰度图转伪彩色图
前言人类能够观察到的光的波长范围是有限的,并且人类视觉有一个特点,只能分辨出二十几种灰度,也就是说即使采集到的灰度图像分辨率超级高,有上百个灰度级,但是很遗憾,人们只能看出二十几个,也就是说信息损失了五十倍。但人类视觉对彩色的分辨能力相当强,能够分辨出几千种色度。 代码#include using namespace cv;using namespace std;M原创 2015-06-18 13:44:42 · 16441 阅读 · 1 评论 -
等比数列求和:x^0 + x^1 + ... + x^k
等比数列求和:x^0 + x^1 + ... + x^k令S表示x^0 + x^1 + ... + x^k的和:S = 1 + x + x^2 + ... + x^k两边同时乘以x:S*x = x * (1 + x + x^2 + ... + x^k) = x + x^2 + ... + x^k + x^(k+1)两边再同时加1:S*x + 1原创 2015-03-21 22:28:57 · 2594 阅读 · 1 评论 -
快速寻找给定上限内质数的3个算法
A prime number is a natural number which has exactly two distinct natural number divisors: 1 and itself.Sieve of Eratostheneshttp://en.wikipedia.org/wiki/Sieve_of_Eratosthenes原创 2014-10-13 19:59:19 · 1541 阅读 · 1 评论 -
动态规划入门教程
多阶段决策过程最优化问题——动态规划的基本模型在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线。这种把一个问题看做是一个前后关联具有链状结原创 2016-10-07 19:37:54 · 1350 阅读 · 0 评论