算法 - 技术教程文章

【LeetCode-面试算法经典-Java实现】【101-Symmetric Tree(对称树)】【代码】【图】

【101-Symmetric Tree(对称树)】【LeetCode-面试算法经典-Java实现】【所有题目目录索引】原题  Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For example, this binary tree is symmetric: 1/ 2 2/ \ / 3 4 4 3  But the following is not: 1/ 2 2\ 3 3  Note: Bonus points if you could solve it both recursively and iteratively.题目大意...

查找算法【代码】【图】

阅读目录1. 顺序查找2. 二分查找3. 插值查找4. 斐波那契查找5. 树表查找6. 分块查找7. 哈希查找  查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。树表查找和哈希查找会在...

《趣学算法》,陈小玉【代码】

觉得还是先从简单例子程序着手,先了解各个算法的基本思想。目录:贪心算法分治法动态规划回溯法分支限界法线性规划网络流算法是指对特定问题求解步骤 的一种描述算法的评价标准:时间复杂度与空间复杂度。时间复杂度:考虑给定的数据数目n,关于算法的执行次数。渐进上界用O()表示,最坏情况对衡量算法的好坏具有实际的意义。空间复杂度:算法占用的空间大小。一般将算法的辅助空间作为衡量标准。1.贪心算法算法思想:一个贪心算法...

建模算法(九)——拟合【代码】【图】

一、线性最小二乘法1、基本思路 令,其r(x)是事先选定的一组线性无关的函数。ak是待定系数。然后拟合的准则就是使得yi与f(xi)的距离的平方和最小,称之为最小二乘准则2、系数的确定 ,要使距离的平方和最小,那只要取得,使得取到极值,就可以解除待定系数ak,记然后线性方程组为,所以当R列满秩,R’R是可逆的,所以方程组有唯一解3、函数r(x)的选取 一般是直观的去判断用什么样的曲线。然后下面有一般常用的曲线一...

ALGO-145_蓝桥杯_算法训练_4-1打印下述图形【代码】【图】

记:这里用到了printf("%*s%s%*s\n",n-i,"",arr,n-i,"");的写法,其中%*s中的*代表该字符串s的个数,s为给字符串,这写法一般用在打印中 AC代码: 1 #include <stdio.h>2#define MAX 503 4int main(void)5{6int i,n;7char arr[MAX+1];8 scanf("%d",&n);9 sprintf(arr,"%s","*"); 10for (i = 1 ; i <= n ; i ++) 11 { 12 printf("%*s%s%*s\n",n-i,"",arr,n-i,""); 13 sprintf(arr,"%s%s",arr,"**"); ...

1.3.1 区块链中的加密算法——Hash算法(更新)【代码】【图】

为了为保证存储于区块链中的信息的安全与完整,区块链中使用了包含密码哈希函数和椭圆曲线公钥密码技术在内的大量的现代密码学技术,同时,这些密码学技术也被用于设计基于工作量证明的共识算法并识别用户。  在前边的文章中已经系统的讲述了密码学中的哈希算法,在本节,将会给大家介绍Hash算法在区块链中的应用! 概念回顾:  哈希函数:是一类数学函数,可以在有限合理的时间内,将任意长度的消息压缩为固定长度的二进制串,...

排序算法【代码】

好悲催,住房停电,手机停机。只好来网吧,还没有usb.... 还好哥机智的写完一段,马上保存。这破网吧真不靠谱,莫名重启了,竟然...一、快速排序 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进...

算法:POJ1006 三重峰值问题【代码】

这题有直接套公式的解法这里提供一个O(n)的解法。package practice;import java.io.BufferedInputStream; import java.util.Scanner;/*** * * @author caiyu* @date 2014-11-4*/publicclass POJ1006 {publicstaticvoid main(String[] args) {Scanner cin = new Scanner(new BufferedInputStream(System.in));while (true) {int p = cin.nextInt();if (p < 0)break;int e = cin.nextInt();if (e < 0)break;int i = cin.nextInt();if...

基于人体部件小边特征的多行人检测和跟踪算法【图】

基于人体部件小边特征的多行人检测和跟踪算法detection tracking edgelet feature multiple occluded human Bayesian combination读"B. Wu, R. Nevatia. Detection and tracking of multiple, partially occluded humans by Bayesian combination of edgelet based part detectors[J],IJCV,75(2),247-266" 笔记文章主要贡献点-基于小边特征(edgelet feature) boosting的人体部件检测子 -使用贝叶斯方法combine人体部件检测结果实现...

C++设计实现算法时易犯错误

1.未初始化指针未初始化为NULL,造成判断条件出错数值未初始化为0,造成数组超界,内存泄漏 2.long long输入时lld or I64d写成d一定出错 3.gcc编译报错:程序中有游离的‘\357’‘\273’‘\277’等感谢http://www.cnblogs.com/lidp/archive/2009/06/17/1697886.html 造成的原因主要有两个:1. 程序(*.c,*.h)中使用了中文的标点符号(全角),比如;,},+。改成英文的标点半角符号就行了。甚至有时候空格也会出现类似错误,删...

统治世界的十大算法

软件正在统治世界。而软件的核心则是算法。算法千千万万,又有哪些算法属于“皇冠上的珍珠”呢?Marcos Otero 给出了他的看法。什么是算法?通俗而言,算法是一个定义明确的计算过程,可以一些值或一组值作为输入并产生一些值或一组值作为输出。因此算法就是将输入转为输出的一系列计算步骤。—Thomas H. Cormen,Chales E. Leiserson,算法入门第三版简而言之,算法就是可完成特定任务的一系列步骤,它应该具备三大特征:1、有限2...

快速排序算法【代码】

快速排序的思想是找一个基准值pivot,两个索引从后,从前 同时推进,第一次排完比基准值大的都在其右边,比基准值小的都在其左边。下面给出两种解法1privatestaticvoid quitckSort(int[] arr, int low, int high) {if (low < high) {//递归终止条件int pivot = getPivot(arr,low,high);//找到中轴,中轴左边全比中轴小,中轴右边全比中轴大 System.out.println(Arrays.toString(arr));quitckSort(arr, low, pivot-1);//...

70. Implement strStr() 与 KMP算法【代码】

Implement strStr()Implement strStr().Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.MY: Question.思路: 逐步查找。当出现不同时,如何回溯是关键。Solution A:class Solution { public:char *strStr(char *haystack, char *needle) {int i = 0, j = 0;while(haystack[i] != ‘\0‘ && needle[j] != ‘\0‘) {if(haystack[i] == needle[j])++i, ++j;else i = i...

快速排序算法理解【代码】【图】

几种排序算法的联系希尔排序相当于直接插入排序的升级,同属于插入排序类;堆排序相当于简单选择排序的升级,同属于选择排序类;快速排序是最慢的冒泡排序的升级,属于交换排序类;快速排序的基本四想快速排序是通过不断比较和移动交换来实现排序的,只不过它的实现增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,减少了总的比较次数和移动交换次数通过一趟排序将...

数据结构与算法

1:实现单链表的逆置:http://www.cnblogs.com/myseries/p/5222376.html2: 有个单链表,不知道节点N的值,怎样只遍历一次就可以求出中间节点? 解:设立两个指针,比如*p, *q, p每次移动两个位置,即 p = p->next->next, q每次移动一个位置,即 q = q->next,当p到达最后一个节点时,q就是中间节点。3:如何找出单链表中的倒数第k个元素? 思路:设立两个指针*p,*q, p一开始指向单链表的第k个节点,q一开始指向头结点,然后p,q同...

查找算法总结(一)—顺序、二分、二叉、红黑【图】

1.顺序查找在查找中我们一个一个顺序的遍历表中的所有键并使用equals()方法来查找匹配的键。优点:对数组的结构没有特定的要求,可以使用数组或者链表实现,算法简单。缺点:当数组个数n较大时,效率低下。时间复杂度:查找命中时,最大时间复杂度是O(n),最小时间复杂度是O(1),平均时间复杂度是O(n/2);未命中时,总需要O(n)次比较。      向一个空表中插入N个不同的件需要N2次比较。 2.基于有序数组的二分查找在查找时,...

粗糙的洗牌算法实现【代码】【图】

今天无意中聊起洗牌算法,于是就尝试写一下这个洗牌算法,不管算法多么简陋,主要进一步熟悉js语言,锻炼一下自己。 我的思路,模拟现实中的洗牌常用方法: 1、一开始牌的状态是有序或者无序的。 2、每次讲牌分开两半,然后用左右手分别将这两堆牌交叉,得到一个新顺序的牌。 3、 将过程2重复n次,即洗好牌。 4、(上面的策略只是自己经常洗牌使用的方法,不一定能公平或者随机,还请大家多多见谅) 具体代...

【算法】6、指数退避算法【代码】

今天简单跟大家聊下指数退避算法(Exponential Backoff ),关于指数避退算法的话题开始前首先向大家抛出几个问题:指数退避算法是什么呢?为什么要用指数退避算法呢?指数退避算法的应用场景有哪些呢?代码如何实现呢?带着这些疑问诸君且向下看。指数退避算法到底是什么呢?wiki上有这么一段解释:"Exponential backoff is an algorithm that uses feedback to multiplicatively decrease the rate of some process, in order to...

经典排序算法 - 归并排序Merge sort【代码】【图】

经典排序算法 - 归并排序Merge sort原理,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组举例无序数组[6 2 4 1 5 9]先看一下每个步骤下的状态,完了再看合并细节第一步 [6 2 4 1 5 9]原始状态第二步 [2 6] [1 4] [5 9]两两合并排序,排序细节后边介绍第三步 [1 2 4 6] [5 9]继续两组两组合并第四步 [1 2 4 5 6 9]合并完毕,排序完毕输出结果[1 2 4 5 6 9]合...

[算法]二叉树的非递归遍历算法【代码】

1.二叉树的非递归中序遍历算法二叉树的中序遍历方法是:左中右,因此一开始会顺着根节点的左孩子一直往下(这点和先序遍历一样,这也是二者前面部分代码很相似的原因),到最后一个左孩子时尝试把它的右孩子塞进栈内,然后顺着它的的左孩子而下,直到不能访问为止。利用的栈FILO的特性,对每个节点都进行顺左孩子而下即可。上代码: 1void inOrder(TreeNode* root,vector<int>& inOrder)2 {3 stack<TreeNode*>st;4 TreeNo...

面试所遇到的两个算法题【代码】

题目1:写一段代码,求出数列{1,2,2,3,3,3,4,4,4,4,5,5,5,5...n},第169的数字,n的大小为10^18,比如输入169:输出的数为18思考:数列的规律是到几,这个数字就出现几次,所以可以采用循环输入数列,求169的数字,可以用求数组下标的方式来获得,以下是代码public static void main(String[] args) {long l = 1; //使用双循环写出这个数列,将数列的值添加进集合里ArrayList list = new ArrayList();for (; l < Math.pow(10,18); l+...

基于特征差异的异常预测算法(LOF算法)【图】

基于未知准则的WSS失效异常检测算法——第二种算法LOF算法(异常离群算法—非聚类算法)1.算法原理介绍 LOF算法,全称是Local Outlier Factor(局部离群因子检测方法),是一种基于密度的高精度离群点异常检测算法。基于密度的离群点检测方法的关键步骤在于给每个数据点都分配一个离散度,其主要思想是:针对给定的数据集,对其中的任意一个数据点,如果在其局部邻域内的点都很密集,那么认为此数据点为正常数据点,而离群...

[算法模版]Link-Cut-Tree【代码】【图】

[算法模版]Link-Cut-Tree博主懒本博客只对现有博客进行补充,先直接放隔壁链接。FlashHu-LCT总结Menci-LCT学习笔记make-root操作make-root操作用于把任何一个点反转到当前树的根节点。做法是先把要进行操作的节点x进行access,将root和x进行连通。然后进行splay(x)操作,把x变成splay的根。(请注意,这时候x在主树的深度仍然没有改变)。随后将x的子树全部进行反转操作。也就是改变了这个splay的深度。虽然splay和splay之间的连接...

数据结构与算法分析 3.4&3.5 — 链表的交与并算法【代码】【图】

代码: #include <list>template<typename ElementType> list<ElementType> Intersect(const list<ElementType> &list_1, const list<ElementType> &list_2) {list<ElementType> result;auto leftPos = list_1.begin( );auto rightPos = list_2.begin( );while (leftPos != list_1.end() && rightPos != list_2.end()){if (*leftPos > *rightPos)rightPos++;elseif (*leftPos < *rightPos)leftPos++;else{result.push_back(*leftPo...

ID3决策树算法原理及C++实现(其中代码转自别人的博客)【图】

分类是数据挖掘中十分重要的组成部分.分类作为一种无监督学习方式被广泛的使用.之前关于"数据挖掘中十大经典算法"中,基于ID3核心思想的分类算法C4.5榜上有名.所以不难看出ID3在数据分类中是多么的重要了.ID3又称为决策树算法,虽然现在广义的决策树算法不止ID3一种,但是由于ID3的重要性,习惯是还是把ID3和决策树算法等价起来.另外无监督学习方式我还要多说两句.无监督学习方式包括决策树算法,基于规则的分类,神经网络等.这些分类方式...

常见加密算法

七种算法:BASE64、MD5、SHA、HMAC、RSA 、AES、ECC MD5、SHA、HMAC、RSA这四种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。 一、BASE64 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be h...

图像的相似度Hash算法【代码】【图】

Hash算法有三种,分别为平均哈希算法(aHash)、感知哈希算法你(pHash)和差异哈哈希算法(dHash)。针对以上三种的Hash算法详解见博客园文章 https://www.cnblogs.com/Kalafinaian/p/11260808.html本文实现针对平均哈希算法;1 平均哈希算法(aHash)1.1 算法步骤 平均哈希算法是三种Hash算法中最简单的一种,它通过下面几个步骤来获得图片的Hash值,这几个步骤分别是(1) 缩放图片;(2)转灰度图; (3) 算像素均值;(4)根据相似...

Java算法分析与设计视频教程下载

下载地址:http://pan.baidu.com/s/1i4pMZ9z 密码:v9ra 算法分析与设计Java版,是一套实用型算法课程。通过本课程的学习,学员可以掌握以下技术点:线性结构与顺序表、单向链表、循环链表、栈的基本概念、链式堆栈、中缀表达式、队列、链式队列、串、MyString、Brute-Force算法、MySet类实现、矩阵类、递归算法、哈夫曼树、希尔排序、HashTable算法等内容。第一讲、算法基本概述、抽象数据类型第二讲、算法的设计目标、时间复杂度...

Manacher算法【代码】【图】

求回文子串 O(n) manacher 算法注:此处引用他人的文章题目:解答:publicclass LongestPalindromicSubstring {public String longestPalindrome(String s) {StringBuilder sb = new StringBuilder(s); int[] p = newint[2*s.length()+3]; //p数组用来保存每个字符的回文半径sb.insert(0, ‘?‘); //这里在开头和结尾设置两个不同的字符,是为了向两边扫描的时候设置字符对比结束,sb最终结果为(?#...#!)for(int i=0;i<=s.length()...

贪心算法【代码】

1 贪心算法1.1 简介贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择。也就是说,不从整体最优上加以考虑,做出的只是在某种意义上的局部最优解。注意 贪心算法不是对所有问题都能得到整体最优解1.2 分配问题455. 分发饼干(Easy)分析每个孩子按照胃口的大小从小到大依...