随笔分类 - [41]Algorithm算法
-
人人校招笔试题
摘要:人人校招笔试题人人校招笔试题 ---9月22日,人人校招笔试题1、给定一个有序数组a,长度为len,和一个数X,判断A数组里面是否存在两个数,他们的和为X,bool judge(int *a, int len, int x),存在返回true,不存在返回false2、给定有n个数的数组a,其中超过一半的数为一个定值,在不进行排序、不开设额外数组的情况下,以最高效的算法找到这个数:int find(int *a, int n)题解:(转载请联系博主,个人看法,仅供参考!)1、给定一个有序数组a,长度为len,和一个数X,判断A数组里面是否存在两个数,他们的... 阅读全文
-
Sparse Filtering
摘要:Sparse Filtering当前很多的特征学习(feature learning)算法需要很多的超参数(hyper-parameter)调节, Sparse Filtering则只需要一个超参数--需要学习的特征的个数, 所以非常易于进行参数调节.1.特征分布及其特性 基本上所有的参数学习算法都是要生成特定的特征分布, 比如sparse coding是要学得一种稀疏的特征, 亦即学到的特征中只有较少的非零项. 基本上所有的特征学习算法都是为了优化特征分布的某些特性的.Sparse Filtering也是这样的一种特征学习方法, 其目的是为了学到拥有一下特定特性的特征, 为了简洁, 首先定义 阅读全文
-
快速排序
摘要:《算法导论》第七章----快速排序(代码实现+部分练习+部分证明)快速排序,对于n个数的输入数组,最坏情况运行时间:Θ(n^2);期望运行时间:Θ(nlgn);就地排序(Sort in place)。数组A[p..r]会被分为两个子数组A[p..q-1]和A[q+1..r],其中A[p..q-1]的元素都不大于A[q],A[q+1..r]都不小于A[q]。如何划分子数组对运行时间的有很大影响,最坏的情况为n个数的数组划分为一个n-1的数组和一个0元素的数组;最佳情况为对半分(1:1);对于平均情况的划分,其运行时间与最佳情况很接近。先看代码实现:快速排序的关键是数组划分,对子数组进行就地重排。 阅读全文
-
algorithm(算法)
摘要:algorithm(算法)STL中算可以分为三种, 1、变序型队列算法,可以改变容器内的数据; 2、非变序型队列算法,处理容器内的数据而不改变他们 ; 3、通用数值算法,这涉及到很多专业领域的算术操作,这里不做介绍。 第一是变序型算法,这种算法可以改变容器内的数据,而且可以只对容器的一部分数据进行操作。常用的有copy,reverse,swap,replace等,用法如下: 首先看看copy函数,是将某一范围的数据拷贝到新的容器中_OutIt copy(_InIt _First, _InIt _Last,_OutIt _Dest); // copy [_First, _Last... 阅读全文
-
腾讯2014软件开发
摘要:腾讯2014软件开发笔试题目腾讯2014软件开发笔试题目 -----9月21日,腾讯2014软件开发校招-简答题-广州简答题:1、请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在 中所处的位置和变化。队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要即时反馈到用户。2、A、B两个整数集合,设计一个算法求他们的交集,尽可能的高效。(博主能力有限,不是所有题目都会求解,第1题不是我的擅长,这里贴出来让大家知道腾讯的考题。我的重点放在第2题上面!)第2题 题解(个人看法,仅供参考!)思路1:排序法 对集合A和... 阅读全文
-
字符串的非字典排序
摘要:字符串的非字典排序题目描述: 已知有一自字符数组MB[]={'d','g','e','r','a','o'},现有字符数组str[]={"dog","dear","ear","geo"},实现对str中的字符串按MB字符数组提供的规则排序输出,输出样式应为dear dog geo ear 。分析:这道题最佳的解法应该采用Trie数,Trie树又称字典树,它可以用来实现对字符串的快速匹配。它的基本思想是以空间换时间,匹配一 阅读全文
-
创新工场笔试题目
摘要:创新工场笔试题目创新工场编程题9月16日,创新工场校招笔试题:1.输入一个整型无序数组,用堆排序的方法是数组有序2.求一个正整数的开方,要求不能使用库函数sqrt,结果精度在0.01即可3.给定一个矩阵int matrixA[m][n],每行没列都是增序的,实现一个算法寻找矩阵中的某个元素element下面做出我的题解,能力有限,望见谅!第一题:堆排序 考的排序算法中的堆排序,这里稍微讲一下堆排序的算法: 二叉树: 基本概念: 大根堆: 就是说父节点要比左右孩子都要大。 小根堆: 就是说父节点要比左右孩子都要小。 算法: 1、从最后一个父结点开始,从后往前遍历树的所有二叉树的父节... 阅读全文
-
汉诺塔问题
摘要:汉诺塔问题汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?分析如果是初次接触类似的问题,乍看之下肯定会感觉无从下手。要把64个圆盘从a柱子移动到c柱子上,第一步应该怎么做?虽然可以肯定,第一步唯一的选择是移动a最上面的那个圆盘,但是应该将其移到b还是c呢?很难确定。因为接下来的第二步、第三步… 阅读全文
-
子序列的个数
摘要:动态规划---子序列的个数子序列的个数题目详情:子序列的定义:对于一个序列a=a[1],a[2],......a[n],则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列,其中1#include #define M 1000000007int run(const int *a,int n){ long long SubArray[120] = {0}; int LastIndex[120] = {0}; int iter = 0; for(iter = 1; iter #include #define M 1000000007int run(c... 阅读全文
-
优先级队列(代码实现+部分练习)
摘要:优先级队列(代码实现+部分练习)算导本章的优先级队列是堆数据结构的一个应用,优先级队列分为两种:最大优先级队列和最小优先级队列。主要内容是基于最大堆实现最大优先级队列。关于堆数据结构的内容见此:堆。下文有关堆的代码解释也在链接的文章。“优先级队列是一种用来维护由一种元素构成的集合S的数据结构,这一组元素中的每一个都有一个关键字key。“------《算法导论》我的代码实现与算导中关于最大优先级队列的支持操作有出入,我将increase-key操作删除,把insert操作修改了一下。具体支持的操作为下:1 int heap_maximum(int A[]); /... 阅读全文
-
快速排序
摘要:快速排序快速排序(Quick Sort)是冒泡排序的一种改进算法 基本思想:在当前的排序序列(K1,K2......Kn)中任意选取一个元素,把该元素称为基准元素或支点,把小于等于基准元素的所有元素都移动到基准元素的前面,把大于基准元素的所有元素都移动到基准元素的后面,这样使得基准元素的位置正好处于排序后的最终位置,并且把当前参加排序的序列分为前后两个子序列,接下来分别对这两个子序列重复上述操作,直至子序列长度为1。 举例分析:设有一个数据元素序列{3,6,4,2,11,10,5},要求按从小到大顺序排列,排序步骤如下图所示: 快速排序元素间的比较次数较少,速度较快;在各种内部排序方法中... 阅读全文
-
一亿数中求前100大
摘要:腾讯面试:一亿数中求前100大Posted on2013-09-22 12:27DM张朋飞阅读(1309) 评论(10)编辑收藏 我记得在算法导论里看过这个算法,貌似开篇就是。 维护一个大小为100的数组top100,第一个里面存储最先100个数字里的最小值,构建小顶堆,然后循环下标100到一亿,若是大于top100[0]就交换,重新构建小顶堆,循环完毕就得到结果了。 对top100[100]插入排序效率不知道如何。 进行100次区间快排求k值如何。 进行100次桶排序如何。 不过复杂度分析还是弱项。 堆排序笔记:http://www.cnblogs.com/hxsyl/p/3244756.h 阅读全文
-
迭代法
摘要:牛顿迭代法1. 迭代公式建立将在点的Taylor展开如下:一阶泰勒多项式:近似于解出x记为,则2. 牛顿迭代法的几何解析在处做曲线的切线,切线方程为:令得切线与x轴的交点坐标为,这就是牛顿迭代法的迭代公式。因此,牛顿法又称“切线法”。Newton迭代法的特点是:1. 对初值的选取要求较高。一般的,Newton迭代法只有局部收敛性,当初值在收敛区间里时,收敛速度很快(平方收敛)。但初值离方程根x*较远时,不能保证Newton迭代法收敛。2. Newton迭代法求单根时,收敛速度很快(平方收敛)。但如果方程根是重根,则收敛速度较慢,且重数越高速度越慢。但当是m重根时,用下面的迭代格式:则至少能保持 阅读全文
-
求两个数组的交集
摘要:求两个数组的交集题目意思大概是这样的:给定两个大数组(1w以上1亿以下),用最有效的方法找出来两个数组的交集。对于这道题,我有一个思路就是,先对数组进行排序,然后用两个指针在已排序的数组上轮流指向头结点,进行比较。比较亮的地方,就是在于这个比较的方式了。首先,比较的时候,要先确定两个指针指向的内用是否一致。如果一致,那么这个点,就是交集的一个元素,没问题吧?这里有一个问题就是,接下来如何比较?步骤是这样的:先比较两个指针指向内容的大小,指向结果小的指针,开始递增,直到较小的指针指向的值大于或等于另一个指针。而接下来另一个指针也采用同样的方法,此时这个较大的指针已经变成了较小的指针,递增,直到比 阅读全文
-
对"一维最大子数组和"问题的思考
摘要:对"一维最大子数组和"问题的思考(homework-01) 一维最大子数组和问题,即给定一个数组,在它所有的连续子数组的和中,求最大的那个和。“最大子数组和”是一个很好的IT面试考题,在《编程之美》一书中同时阐述了一维数组和二维数组的讨论。本篇博客将会更加细致的讨论一维部分。 一. 最直观的O(n3) 解法 在课上看到这个问题,当然最直观的解决办法即穷举。我们通过对子数组的起点和重点进行二层循环,计算每一个子数组的和,取其最大值,这样当然能够解决。但是作为一种O(n3)的解法,显然是低效率的。 二. 进一步思考——O(n2)解法 为增加程序效率,在接触过的算法中,我们想到或 阅读全文
-
对Map按key和value分别排序
摘要:对Map按key和value分别排序一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。 TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。 Map.Entry返回Collectio 阅读全文
-
网页和查询的相关性
摘要:如何确定网页和查询的相关性本文分为两部分搜索关键词权重的科学度量TF-IDF利用python的工具包计算文本的IF-IDF1. 搜索关键词权重的科学度量TF-IDF查询:原子能的应用首先进行分词:原子能、的、应用根据直觉知道:包含这三个词较多的网页比包含少的网页与我们的需求相关性更好漏洞:内容多的比内容少的占优势改进:归一化。即用关键词的个数除以网页总的词数,商称为”单文本词频“TF(Term Frequency)。比如”原子能、的、应用“三个词出现的词数分别为2、35、5,网页中一共有1000个词,那么三个词的TF分别为:0.002、0.035、0.005。查询与网页的相关度即总词频公式如下 阅读全文
-
JAVA算法两道
摘要:算法(JAVA)----两道小小课后题 LZ最近翻了翻JAVA版的数据结构与算法,无聊之下将书中的课后题一一给做了一遍,在此给出书中课后题的答案(非标准答案,是LZ的答案,猿友们可以贡献出自己更快的算法)。1、编写一个程序解决选择问题。令k=N/2,画出表格显示程序对于N种不同的值的运行时间。 分析:选择问题是指从N个数当中,按升序(降序也可以)排列,找出第k个数。LZ的写法是采用书中给出的算法自己实现的,分别采用冒泡排序和分批处理的方式。以下为LZ写出的算法代码。import java.util.Arrays;import java.util.Random;//选择问题答案pub... 阅读全文
-
堆排序练习(证明)
摘要:堆排序练习(证明)关于堆排序的具体介绍和C代码实现见该链接。算导关于堆排序的练习主要是一些证明,可以帮助理解堆的特征。部分练习是图示过程,这些练习认真用笔过一次会很有收获。1.在高度为h的堆中,最多和最少的元素个数是多少?最多:底层全满;1 + 2^1 + 2^2 + ...... + 2^h,等比数列求和得2^(h+1) - 1最少:底层只有一个节点;1 + 2^1 + 2^2 + ...... + 2^(h-1) + 1,等比数列求和得2^h - 1 + 1 = 2^h2.证明:含n个元素的堆的高度为floor(lgn)假设n个元素的堆的高度为h。由上题得2^h A[i]) ... 阅读全文
-
BFS和DFS详解
摘要:BFS和DFS详解以及java实现前言图在算法世界中的重要地位是不言而喻的,曾经看到一篇Google的工程师写的一篇《Get that job at Google!》文章中说到面试官问的问题中几乎有一半的问题都可以用图的方法去解决。由此也可以看出图确实适用范围确实很广。图的表示闲话不多说,首先要介绍的就是图的表示,图最常用的两种表示方法是邻接表和邻接矩阵。顾名思义,这两种办法分别用表和矩阵的方式描述图中各顶点之间的联系下图展示了两种表示上面这个图的方法BFS本文将着重介绍遍历图的两种最常用的方法,分别为广度优先遍历和深度优先遍历,后面会具体介绍为什么这么命名。首先来看广度优先遍历BFS(Bre 阅读全文