算法设计与分析
沙漠之狐MSFollower
在读博士生,研究方向包括多模态智能、机器学习、图学习、自然语言处理。期待与有共同爱好的同学一起发现信息化世界的美好。
展开
-
递归分治问题之找出两个有序序列的中间值
问题描述: You are interested in analyzing some hard-to-obtain data from two separate databases. Each database containsn numerical values, so there are 2nvalues total and you may assume that n原创 2017-01-13 23:39:47 · 1731 阅读 · 2 评论 -
SUHO2018校招笔试
此题虽然不是很难,但是感觉挺烧脑的...用贪心算法处理,从大的块开始处理,一直到小的块。 while (true) { int num1,num2,num3,num4,num5,num6;//numi表示输入的i*i的数量 int num=0,remain1=0,reminder,remain2=0;//remain1表示剩余可容纳1*1的个数,remain2表示剩余可容纳2*2的个原创 2017-08-28 21:49:05 · 464 阅读 · 0 评论 -
C++ 单纯形法求解线性规划问题
转自:http://www.doc88.com/p-7495430586060.html转载 2017-01-28 00:52:46 · 4869 阅读 · 2 评论 -
美团2018校招笔试
本题的主题思想是贪心算法。我们可以这样认为:将最大的一组拿出后,后续所有的组原创 2017-08-31 22:02:30 · 3399 阅读 · 0 评论 -
C++实现基础的算法
针对找工作时,遇到的数据结构基础算法做一个简单的回顾和积累。大数相乘://大数相乘int Bigdata_multiple(char string1[], char string2[],int length1,int length2){ int result[length1+length2+2]; for (int iindex = 0; iindex < le...原创 2018-08-14 21:31:37 · 704 阅读 · 0 评论 -
关于在字符串中获得所有的回文子序列的数量及最长回文子字符串问题
多年前发表在网易博客上的文章,今天转过来。 今天刚刚完成了微软"编程之美”网上编程挑战赛。hihoCode平台上的第二个赛题就是针对此问题。刚开始思考这个问题,真的是一头雾水,摸不着道。在网上找了一下资料,发现针对这个问题的解决,网上只有台湾国立暨南大学资讯系的一位研究生的论文里面有。但是,仔细阅读完论文(全英文),才发现,他的算法用程序语言实现起来,其实真的很难。 ...原创 2018-08-14 22:12:08 · 819 阅读 · 0 评论 -
数组中的第k个最小数——最小的k个数——出现次数大于length/2的数
如标题,这三个问题的思路其实是一样的。具体的理论知识,大家可以参考剑指offer上面。这里,我只给出C++代码实现。//寻找数组中第k小的数;//首先是处理快速排序int Partition(int *num, int fir, int sec){ int temp = num[fir]; int i = fir, j = sec; while(i<j)...原创 2018-08-17 22:28:40 · 282 阅读 · 0 评论 -
两个字符串的最长公共子序列和最长公共子字符串的问题
求解两个字符串的公共最长子序列,在面试中经常出现。这里,我们来用C++实现其功能。关于理论知识,这篇文章已经写的非常好:https://www.cnblogs.com/hapjin/p/5572483.html,在这里我不在描述。下面,我们直接来给出C++代码实现://两个字符串的最长公共子序列:动态规划string get_same(string str1, string ...原创 2018-08-16 11:29:58 · 543 阅读 · 0 评论 -
C++实现数字拆分(拆分的组合数量)
整数拆分的方法有很多种,比如下面的理论知识:http://www.cnblogs.com/hadilo/p/5733305.htmlhttp://blog.chinaunix.net/uid-26548237-id-3503956.html https://blog.csdn.net/u011889952/article/details/44813593当然,也可以尝试“多数之和为...原创 2018-11-13 23:22:44 · 8770 阅读 · 0 评论 -
牛顿法实现开方函数
在招聘会中,很多面试官会要求应聘者手写代码。其中,C++手动实现sqrt()函数是一个非常常见的题目。这里,我们来为大家进行C++实现。具体的理论知识,大家可以自行搜索。//C++重写sqrt()函数#include <iomanip>#include <iostream>#include <math.h>using namespace std;...原创 2018-11-13 23:25:33 · 841 阅读 · 0 评论 -
实现对数组和链表的快速排序
在前面的博客中,已经写了关于数组和链表的选择排序、冒泡排序和插入排序。在这里,再次补充快速排序。快排的应用场景很多,其中面试中广泛使用的就是在无序数集中查找第K个大(或小)的数值。下面,我们来处理一下该排序: 首先,在数组中进行快排,这是非常常见的排序方式://快速排序算法void Quick_Sort(int *num, int fir, int sec)...原创 2018-12-18 10:02:29 · 372 阅读 · 0 评论 -
C++语言实现归并排序
归并排序的表现形式有多种,最常见的当然是递归归并排序,这里不再赘述。我们主要来实现两种不常用的归并排序形式:非递归归并排序和原地归并排序。非递归归并排序void Merge(int num[], int size)//size表示长度,因此索引应该最大是size-1{ int len = 1; while(len <= size) { fo...原创 2019-05-24 22:38:20 · 291 阅读 · 0 评论 -
C++语言实现堆排序
堆排序也是一种较为简单和常用的排序方式,其在面试和工程实践中常被提及。具体的理论知识在严蔚敏、吴伟民版《数据结构》课本上非常清晰。这里,仅展示其C++语言实现。void HeapAjust(int a[],int cur,int tail){ int max = cur;//在当前节点的小树中调整 int left = cur*2;//当前节点的左子树 int ri...原创 2019-05-24 22:45:46 · 219 阅读 · 0 评论 -
Z字形遍历二叉树
常见的二叉树遍历,有层次遍历、前序遍历、中序遍历、后序遍历。其中层次遍历中最常见的是正序层次遍历,但也会出现Z字形遍历的情况:如果从左向右输出第n行,则下一行从右向左输出。正序层次遍历是利用队列的先到先得性质,很明显Z字形遍历要用到栈得性质来实现。我们在输出时,可以借助行的奇、偶性,实现代码如下:void print(Tree *root){ if (root == NULL) ...原创 2019-05-26 16:38:42 · 2407 阅读 · 0 评论 -
二叉树的子结构问题
这个问题,在很多面试当中会出现。所谓子结构,就是子树结构是树结构的一部分。我们可以使用递归的方法来进行相应的处理与判断。//树的子结构struct tree{ int value; tree *left; tree *right;};bool JudgeHas(tree *pRoot1, tree *pRoot2){ if (pRoot1 == N...原创 2019-05-26 16:57:26 · 266 阅读 · 0 评论 -
从1到n整数中1出现的次数
题目描述:输入一个整数n,求从1到n这n个整数中的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,因此1共出现了5次。本题为leetcode、剑指offer、编程之美等众多资料和平台上的经典题目。其实,仔细思考数字的组成,本题并不是很难。设该数为[AAA]-X-[BBB],其中我们考察本位数为X1、本位数大于1,则本位上含有1为:([原创 2017-03-12 09:24:23 · 273 阅读 · 0 评论 -
不考虑重复字符的字符串组合
转自CSDN用户Hackbuter1的专栏,http://blog.csdn.net/hackbuteer1/article/details/7462447。 因为在学习何海涛的《剑指offer》期间,方法虽好理解,但是算法的具体实现比较困难。因而,参考了网上的代码。并且将苦涩难懂的代码加注释,以方便后来读者使用。 输入一个字符串,输出该字符串中字符的所有组合。举个例子转载 2017-03-09 13:53:04 · 385 阅读 · 0 评论 -
关于众数的求解
转自:http://blog.chinaunix.net/uid-627012-id-2706170.html 众数算法 a) 问题在一个由元素组成的表中,出现次数最多的元素称为众数。试写一个寻找众数的算法,并分析其计算复杂性。 众数算法 a) 问转载 2017-03-09 11:03:31 · 1451 阅读 · 0 评论 -
HH问题的解答
问题描述: In stock market, HH-index (historically highest) of the current price is k means that current price is the highest price in the previous k days, but not the highest one in the previous原创 2017-01-14 00:30:30 · 964 阅读 · 0 评论 -
分治递归之奶牛过河问题
问题描述:every year the cows hold an event featuring a peculiar version of hopscotch that involvescarefully jumping from rock to rock in a river. The excitement takes place on a long, straightriver原创 2017-01-14 08:06:12 · 549 阅读 · 0 评论 -
关于在字符串中获得所有的回文子序列的数量
在网上找了一下资料,发现针对这个问题的解决,网上只有台湾国立暨南大学资讯系的一位研究生的论文里面有。但是,仔细阅读完论文(全英文),才发现,他的算法用程序语言实现起来,其实真的很难。 在这里,我就把用到的所有知识、我的思路和一些查到的资料分享给大家。方法一、(台湾的那个研究生的思路) Step1:利用分治法或动态规划法,找到这个字符串中最长的回文子序列,记下它的原创 2017-01-11 21:00:06 · 1368 阅读 · 0 评论 -
关于3倍数的逆序数,即当i<j时,a[i]>3a[j]的序列逆序数。
题目描述: Recall the problem of finding the number of inversions. As in the course, we are given asequence of n numbers a 1,· · · , an, which we assume are all distinct, and we difine a原创 2017-01-17 11:41:07 · 1144 阅读 · 0 评论 -
序列中的最多除数问题(解题思路同样适用于最大递增序列)
题目描述: Given a set of distinct positive integers, find the largest subset such that every pair (Si,Sj)of elements in this subset satisfies:Si%Sj= 0 or Sj%Si= 0.解题思想: 首先将所有的数从原创 2017-01-17 15:15:12 · 454 阅读 · 0 评论 -
动态规划DP 之 抢劫得到最多的财务(只是针对题,别无他意)
题目描述:A robber is planning to rob houses along a street. Each house has a certain amount of moneystashed, the only constraint stopping you from robbing each of them is that adjacent houseshave se原创 2017-01-17 15:43:27 · 838 阅读 · 0 评论 -
动态规划 之 回文序列的最小划分
题目描述: Given a string s, partition s such that every substring of the partition is a palindrome. Returnthe minimum cuts needed for a palindrome partitioning ofs.For example, given s原创 2017-01-17 23:03:02 · 764 阅读 · 0 评论 -
动态规划DP 之 解码的数目问题
问题描述: A message containing letters from A-Z is being encoded to numbers using the followingmapping: A : 1B : 2. . .Z : 26Given an encoded message c原创 2017-01-18 10:15:02 · 355 阅读 · 0 评论 -
动态规划 解 青蛙跳石过河
题目描述:A frog is crossing a river. The river is divided intox units and at each unit there may ormay not exist a stone. The frog can jump on a stone, but it must not jump into the water.If the f原创 2017-01-18 13:01:11 · 2510 阅读 · 0 评论 -
贪心算法解决数列作为顶点度数构造无向图问题
问题描述:Given a list ofn natural numbersd 1, d 2,...,dn, show how to decide in polynomialtime whether there exists an undirected graphG = (V, E) whose node degreesare precisely the numb原创 2017-01-27 00:17:22 · 2398 阅读 · 2 评论 -
斐波那契堆(Fibonacci heaps)
转自:http://www.360doc.com/content/12/0710/17/110467_223416306.shtml斐波那契堆同二项堆一样,也是一种可合并堆。斐波那契堆的优势是:不涉及删除元素的操作仅需要O(1)的平摊运行时间(关于平摊分析的知识建议看《算法导论》第17章)。和二项堆一样,斐波那契堆由一组树构成。这种堆松散地基于二项堆,说松散是因为:如果不对斐波那契堆做任何转载 2017-01-27 17:24:29 · 961 阅读 · 0 评论 -
香农-范诺算法(Shannon-Fano coding)算法
转自:http://tec.5lulu.com/algorithm/detail/krn1g511yt8i90.html和Huffman-Tree一样,Shannon-Fano coding也是用一棵二叉树对字符进行编码。但在实际操作中呢,Shannon-Fano却没有大用处,这是由于它与Huffman coding相比,编码效率较低的结果(或者说香农-范诺算法的编码平均码字较大)转载 2017-01-28 00:33:03 · 5577 阅读 · 1 评论 -
最短路径算法--DIJKSTRA算法,BELLMANFORD算法,FLOYD算法,JOHNSON算法
最短路径算法在交通地图上,两地点之间的路径通常标有长度,我们可以用加权有向来描述地图上的交通网。加权有向图中每条路径都有一个路径权值,大小为该路径上所有边的权值之和。本节将重点讨论顶点之间最短路径问题。在实际问题中,路径权值还可以表示其它类型的开销,例如两地之间行程所需要的时间;两任务切换所需代价等。本节讨论的最短路径具有方向性,问题用图的术语描述为:给定一个起始顶点s和一个结束顶点t,在转载 2017-01-27 17:09:43 · 677 阅读 · 0 评论 -
贪心算法解决雷达站建站问题
问题描述:Assume the coasting is an infinite straight line. Land is in one side of coasting,sea in the other. Each small island is a point locating in the sea side. And anyradar installation, locatin原创 2017-01-29 23:32:02 · 2008 阅读 · 0 评论 -
反转0,但应该使得到的1数量最大
该题目是在线笔试时遇到的。题目的正式描述为:给定一个全部由0和1组成的字符串,并可以把0变换成1,但变换的次数最多为sec次,求经过变换后连续1的最大个数。#include<iostream>#include<string.h>using namespace std;int find(int *num, int start, int end){ int...原创 2019-05-26 17:08:47 · 872 阅读 · 0 评论