
【算法】
文章平均质量分 79
莫川
阿里巴巴集团高级无线开发专家
展开
-
有趣的动态规划
动态规划(Dynamic Programming)的理论基础是运筹学;动态规划中有一些概念,比如重叠子问题(Overlapping Subproblems)、和最优子结构(Optimal Substructure)、状态转移方程等。原创 2022-12-10 23:37:16 · 1220 阅读 · 1 评论 -
有趣的BackTracking回溯算法
最近无意中看了一些需要使用到「回溯算法」的实例,想起了读书时候的几种类型的提名,时隔多年,做个简单的回顾;构建的二叉树,图示详见:https://blog.youkuaiyun.com/nupt123456789/article/details/21193175以「先序」遍历为例,我们如何记录遍历的路径呢?输出结果可以看出,之前我们遍历二叉树,以root==null作为判断条件时,所有的搜索路径,这里面对于叶子节点,会有2条重复的搜索结果,主要是由于分别遍历其左右子树,均为null,所有会出现2次搜索结果;原创 2022-11-17 18:18:41 · 1457 阅读 · 0 评论 -
重温数据结构:Huffman树的建立
1.Huffman树霍夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应原创 2014-03-17 10:13:03 · 2360 阅读 · 0 评论 -
重温数据结构-排序算法
常见排序算法的对比:排序算法平均时间最坏情况辅助存储简单排序O(n*n)O(n*n)O(1)希尔排序O(n*logn)O(n^s)1O(1)快速排序O(n*logn)O(n*n)O(1)归并排序O(n*logn)O(n*logn)O(n)堆排序O(n*原创 2014-03-11 10:16:04 · 1923 阅读 · 0 评论 -
重温数据结构:二叉树的常见问题汇总
最近复习数据结构,自己将二叉树的常见问题写了一篇。部分代码参考了如下博文:1.http://blog.youkuaiyun.com/fightforyourdream/article/details/168433032.http://blog.youkuaiyun.com/luckyxiaoqiang/article/details/7518888解决的常见问题为:1. 求二叉树中的节点个数2. 求二叉树的深度3. 前序原创 2014-03-13 22:19:58 · 2721 阅读 · 0 评论 -
近期算法和数据结构面试题解答汇总(更新)
1.给定整数N,输出所有匹配的小括号序列。(2014-03北京某移动互联网公司面试题)例如:N=3输出:()()()(())()()(())((()))public void output(int n){ //.....}2.字符串反转(2014-03北京某移动互联网公司面试题)输入字符串:I am a student输出:student a a原创 2014-03-18 17:08:14 · 2223 阅读 · 2 评论 -
算法篇:神奇的卡塔兰数Catalan
这段时间复习数据结构,想起来这神奇的卡塔兰数1.百科简介卡塔兰数的来历:卡特兰数又称卡塔兰数,是组合数学中一个常出现在各种计数问题中出现的数列。由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名。2.Catalan数的递推规律由递推规律可知,前几项为:1,1,2,5,14,42,132,429,1430,4862,16796.。。Catalan数的通项公式为:3.Catalan数相关原创 2014-04-01 15:33:38 · 5593 阅读 · 1 评论 -
算法:全排列的一点点思考
1.题目描述:给定字符串“abc”,求abc的全排列。思考:我们最容易想到的办法就是枚举法:暴力求解。大致思路如下/** * 暴力求解 */ public static void permutation(){ String string="abc"; for(int i=0;i<string.length();i++){ for(int j=0;j<string原创 2014-03-25 16:03:50 · 1745 阅读 · 0 评论 -
算法篇:输出集合的所有子集
题目描述:输出含有n个元素集合的所有子集。例如,三个元素{a,b,c}的所有子集是:{},{a},{b},{c},{a,c},{ac},{b,c},{a,b,c}.输入:abc输出:cbabacaacbbcnull解题思路:递归思路:* 例如:对于集合{a,b,c}来说,我们如果获得它的所有子集,我们可以分两部分:* 1.获取集合{b,c}的所有子集(问题规模见减小)* 2.{b,c}的所有子集中原创 2014-04-08 11:19:02 · 8743 阅读 · 4 评论 -
重温数据结构:堆,堆排序,优先队列,TopK问题
1.堆的基本概念堆实际上是一颗完全二叉树,其中,任何一个非叶子节点均满足如下性质:key[i]key[i]>=key[2*i+1]&&key[i]>=key[2*i+2] (大顶堆)其中i是从0开始的。2.堆排序的思想 利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从无序中选择最大记录(最小记录)变得简单。 其基本思想为(大顶堆): 1)将初始待排原创 2014-03-17 09:32:32 · 2117 阅读 · 0 评论 -
重温数据结构:平衡二叉树(AVL树)、红黑树、TreeSet与TreeMap
写作目的:本博客的目的是认识和复习数据结构中的平衡二叉树和红黑树,以及由红黑树实现的TreeSet和TreeMap1.二叉搜索树的弊端二叉搜索树的查找,插入,删除的复杂度等于树的高度,时间复杂度是O(log(n)).但是,对于同一组数据,插入顺序的不同,可能会导致二叉搜索树的高度不同。如果是有序插入,二叉搜索树退化成链表,其查找的时间复杂度退化为O(log(n)).图 插入顺序不同对二叉搜索树的影原创 2014-04-09 21:27:33 · 4995 阅读 · 2 评论 -
重温数据结构:单链表的常见问题总结
图3-9在单链表中删除节点Java代码实现:/* * $filename: MySingleLinkedList.java,v $ * $Date: 2014-3-10 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */package原创 2014-03-11 10:33:33 · 3364 阅读 · 0 评论 -
重温数据结构:二叉查找树的java实现
1.二叉查找树的基本概念和性质查找树是一种数据结构,它可以用作字典,也可以用作优先队列。二叉查找树上执行的基本操作时间与树的高度成正比。二叉查找树具有如下性质:二叉查找树的任意节点root,均有:root.left.data2.二叉查找树的实现package edu.njupt.zhb;import java.util.ArrayList;import java.util.Lis原创 2014-03-17 09:58:23 · 1761 阅读 · 0 评论 -
重温数据结构:哈希表,MyHashMap与MyHashSet的Java实现
一.哈希表的相关概念哈希函数的构造方法:1. 直接定址法2. 数字分析法3. 平法取中法4. 折叠法5. 除留余数法6. 随机数法二.处理冲突的方法1. 开放定制法(线性探测再散列、二次探测再散列、伪随机探测再散列)2. 再哈希法3. 链地址法4. 建原创 2014-03-25 21:10:48 · 2238 阅读 · 0 评论 -
重温数据结构:队列的链式实现、顺序实现及循环队列
1.队列的链式存储实现队列接口:package edu.njupt.zhb;/* *@author: ZhengHaibo *web: http://blog.youkuaiyun.com/nuptboyzhb *mail: zhb931706659@126.com *2014-3-12 Nanjing,njupt,China */public interface MyQ原创 2014-03-12 16:33:35 · 1642 阅读 · 0 评论 -
算法:输出给定字符串的全部连续子串
题目来源:阿里实习生电话面试题目:http://blog.youkuaiyun.com/ns_code/article/details/21043665题目描述:给定一个字符串,输出其所有连续子串,如:给定字符串为abcd,则要输出的其全部连续子串为:a,b,c,d,ab,bc,cd,abc,bcd,abcd。思路:逐步扫描,逐渐输出步长分别为0,1,2,3的子字符串/* *原创 2014-03-12 10:31:40 · 3728 阅读 · 2 评论 -
梯度下降法(一)入门
梯度下降法是一个一阶最优化算法,通常也称为最速下降法。我之前也没有关注过这类算法。最近,听斯坦福大学的机器学习课程时,碰到了用梯度下降算法求解线性回归问题,于是看了看这类算法的思想。今天只写了一些入门级的知识。我们知道,函数的曲线如下:编程实现:c++ code/* * @author:郑海波 * blog.youkuaiyun.com/nuptboyzhb原创 2012-12-11 13:14:50 · 46835 阅读 · 16 评论 -
无约束最优化算法-Newton法原理及c++编程实现
无约束最优化方法-牛顿法牛顿法(Newton'smethod)又称为牛顿-拉弗森方法(Newton-Raphson method),它是一种在实数域和复数域上近似求解方程的方法,迭代的示意图如下:总结@郑海波 blog.youkuaiyun.com/nuptboyzhb/参考:斯坦福大学machine learning本博客中所有源代码:http://download.youkuaiyun.com原创 2012-12-14 13:04:20 · 13944 阅读 · 5 评论 -
坐标上升算法(Coordinate Ascent)及C++编程实现
坐标上升算法(Coordinate Ascent)及C++编程实现编程实现:#include using namespace std;#define f(x1,x2,x3) (-x1*x1-2*x2*x2-3*x3*x3+2*x1*x2+2*x1*x3-4*x2*x3+6)int main(){ double x1=1; double x2=1;原创 2012-12-20 13:43:10 · 8517 阅读 · 14 评论 -
无监督学习算法K-means算法总结与c++编程实现
Figure 1: K-means algorithm. Training examples are shown as dots, and cluster centroids are shown as crosses. (a) Original dataset. (b) Random initial cluster centroids (in this instance, not chosen t原创 2012-12-21 19:20:59 · 8828 阅读 · 0 评论 -
SIFT特征提取代码运行总结
代码下载:http://download.youkuaiyun.com/detail/nuptboyzhb/4987479官方网站: http://www.cs.ubc.ca/~lowe/keypoints/sift算法介绍:http://www.cnblogs.com/cfantaisie/archive/2011/06/14/2080917.html1. 在matlab环境下的运行原创 2013-01-12 12:08:23 · 8655 阅读 · 4 评论 -
朴素贝叶斯(NaiveBayes)算法总结
朴素贝叶斯(NaiveBayes)算法总结郑海波 2013/1/22 http://blog.youkuaiyun.com/nuptboyzhb算法概述:朴素贝叶斯算法是基于贝叶斯定理与特征条件独立假设的分类方法。对于给定的训练数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。朴素贝叶斯法实现简单,学习与预测的效率原创 2013-01-22 19:09:42 · 3703 阅读 · 0 评论 -
有关《查找两个List中的不同元素》的问题解答与编程实践
有关《查找两个List中的不同元素》的问题解答与编程实践 郑海波 2013-07-08问题:有List list1和List list2,两个集合各有上万个元素,怎样查找两个集合中不同的元素呢?问题分析:由于每个list中都有上万个元素,如果用简单的遍历查找算法,那么至少需要10000*10000次判断比较。显然,这样做的效率极低。那么有没有比较好的方案呢?原创 2013-07-15 10:16:18 · 4816 阅读 · 0 评论 -
Top-N算法的实现(Java版)
简介在搜索引擎中,如Lucene,搜索的结果是最相似 的前N条,那么如何从一个无序的数组中得到前N个最大(或最小)的值呢?以下是我写的一个Top-N的演示程序。主要用到的数据结构是TreeSet,TreeSet会自动化实现插入排序,前提是该类要实现Comparable接口。实体类/* * $filename: Student.java,v $ * $Date: 2013-10-原创 2013-10-23 22:27:00 · 5432 阅读 · 0 评论 -
重温数据结构-线性表的顺序表示与实现
代码实现举例:/* * $filename: MyArrayList.java,v $ * $Date: 2014-3-8 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */package edu.njupt.zhb;/* *@aut原创 2014-03-11 10:22:57 · 1635 阅读 · 0 评论 -
重温数据结构:有序循环链表的插入
注意:有序循环链表插入后,需要保持原来的顺序/* * $filename: MyCircularLinkedList.java,v $ * $Date: 2014-3-10 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */package原创 2014-03-11 10:43:27 · 2456 阅读 · 0 评论 -
重温数据结构:链表的应用之多项式的表示及相加和相乘
/* * $filename: PolynAddAndMultiply.java,v $ * $Date: 2014-3-10 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */package edu.njupt.zhb;import j原创 2014-03-11 10:45:58 · 1804 阅读 · 0 评论 -
重温数据结构:栈的顺序表示和实现与栈的链式表示和实现
1.栈的顺序表示与实现/* * $filename: MyArrayStack.java,v $ * $Date: 2014-3-11 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */package edu.njupt.zhb;/*原创 2014-03-11 21:52:28 · 1748 阅读 · 0 评论 -
重温数据结构-栈的应用:进制转换,括号匹配检测,行编辑,迷宫求解,求表达式的值
1.括号匹配检测,行编辑,迷宫求解代码/* * $filename: MyStackApplication.java,v $ * $Date: 2014-3-11 $ * Copyright (C) ZhengHaibo, Inc. All rights reserved. * This software is Made by Zhenghaibo. */package edu.原创 2014-03-11 22:08:32 · 2324 阅读 · 0 评论 -
Dijkstra算法求图的单源最短路径
源码下载:http://download.youkuaiyun.com/detail/nuptboyzhb/4848125简介:Dijkstra算法是已知网络的拓扑结构和各链路的长度,寻找从源节点到网络中其他各节点的最短路径。设某个节点为源节点,每次寻找一个节点到源节点的最短路径,直至找到所有的节点。以网络中的每一个节点作为源节点,分别使用最短路径算法,得出的结果就是全网的最短路径。一.原创 2012-12-04 13:08:26 · 9122 阅读 · 3 评论