数学之美
文章平均质量分 52
ojshilu
https://github.com/lucky521
展开
-
大数的乘法 Multiply Strings
# include# include# include void multiply(char* a,char* b,char* c){ int i,j,ca,cb,* s; ca=strlen(a); cb=strlen(b); s=(int*)malloc(sizeof(int)*(ca+cb)); for (i=0;i<ca+cb;i++)原创 2013-08-22 16:16:32 · 1486 阅读 · 1 评论 -
等概率选取问题 Random Pick
等概率选取问题要求保证选取的随机性,即原创 2014-05-03 13:33:44 · 3586 阅读 · 0 评论 -
二分算法实现幂函数x的n次方 Pow(x, n)
题目源自于leetcode。二分算法。题目:Implement pow(x, n).思路: 应该先考虑清楚,再下笔coding。 特殊情况:x取0时,0^n=0。 x取1时,1^n=1。 n取0时,x不能为负数,x^0=1。 x取负原创 2013-11-29 20:42:55 · 6847 阅读 · 2 评论 -
找出较大的下一个数字组合 Next Permutation
问题:Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.If such arrangement is not possible, it must rearrange it as the lowest possi原创 2014-03-22 18:51:31 · 1987 阅读 · 0 评论 -
找出穿过最多点的直线 Max Points on a Line
平面上有若干个点,要你找出一条直线,使其能穿过最多的点。思路:枚举法。求出任意两点之间的线,以直线(斜率,与y轴的交点坐标)的形式存储到map。这样个数最多的直线就是所求。时间O(N^2),空间O(N).注意特殊情况:1、当直线的斜率为无穷大时,其与y轴没有交点,但是和x轴的交点不相同,这时候我需要特殊表示一下。2、点集中有重叠的点时,算几个点?原创 2014-03-20 21:34:52 · 6242 阅读 · 2 评论 -
位运算使用技巧
一般来讲,位运算的速度比加减乘除运算符、分支语句等的速度要快,并且能够达到并行计算。学几个位运算的技巧,在不滥用的前提下对于优化程序速度是好处的。乘以或除以2的幂数可以用左移>位运算来代替i > 2判断一个数的奇偶性可以用判断二进制最右的一位来代替,最右位是1则是偶数,是0则是奇数。i & 1判断一个数是否是2的幂数x & (x – 1)原创 2013-12-06 15:18:26 · 1441 阅读 · 0 评论 -
两人取石子游戏 组合数学-博弈问题
问题源于:编程之美。微策略笔试题。微策略笔试题:桌子上有数值为Number的数字,2个玩家,每个玩家可以选择减去有 Number中连续1,2,,,,位构成的数值,桌子上换成差值,循环下去。提出算法:第一个玩家应该怎么减去桌子上的数值,如果第一个玩家输,返回-1。原创 2013-11-22 19:50:32 · 30766 阅读 · 2 评论 -
海盗分金的博弈问题 pirates and gold 虚拟场景递推
背景:一群海盗要分一批金子。每个海盗有一个编号,编号越大等级越高。现在他们要分配这批金子。分配方法:等级最高的海盗提出一种分配方案。然后所有的海盗投票决定是否接受分配,包括提议人。并且在票数相同的情况下,提议人有决定权。如果提议通过,那么海盗们按照提议分配金币。如果没有通过,那么提议人将被扔出船外,由下一个最高等级的海盗再提出新的分配方案。海盗的思维:海盗们基于三个因素来做决定。1,要原创 2013-11-10 18:11:06 · 2293 阅读 · 0 评论 -
Is Your Husband a Cheat? 死理性派问题
这是一个具有递推性质的死理性派问题。问题:A certain town comprises of 100 married couples. Everyone in the town lives by the following rule: If a husband cheats on his wife, the husband is executed as soon as his wife f原创 2013-12-17 13:58:16 · 1438 阅读 · 0 评论 -
高楼扔鸡蛋问题
题目:一座100层的高楼,有2个完全一样的鸡蛋,现在要得出恰好从第几层开始扔鸡蛋下去会碎(可能第1层就碎,也可能第100层都不碎)。题目的问题是:应该如何用最少的测试次数对于任何答案楼层都能够使问题得到解决?分析: 这其实是一个查找问题,要求最坏情况的比较次数也最少。如果100层楼也不碎就是所查找值不存在。 思考1:要知道,最笨(扔的次数最多)的办法是顺序查找法,从原创 2013-10-23 11:01:34 · 3713 阅读 · 0 评论 -
估算圆周率 Estimate PI
本文介绍了一种估算圆周率的非常简单的原创 2014-05-03 22:47:00 · 2514 阅读 · 0 评论 -
计算1~n之间的所有十进制整数中1的出现次数
问题是这样的,给出一个n,让你求出1~n之间的所有整数的十进制形式中的1的总个数。本问题假设n>1。比如给出一个数n=12,那么1到12之间的数1,2,3,4,5,6,7,8,9,10,11,12里面,能数出来是有5个1。最直观的方法:依次判断每一个区间内的每一个整数,对一个数逐渐除10判断其每一位。这个方法的时间复杂度为O(n*lgn)。介绍一个优化的方法(注意其中分治和原创 2013-12-03 10:49:36 · 1763 阅读 · 1 评论 -
寻找排列数中的第k个数 Permutation Sequence
问题:The set [1,2,3,…,n] contains a total of n! unique permutations.By listing and labeling all of the permutations in order,We get the following sequence (ie, for n = 3):"123""132""213""2原创 2014-03-24 21:11:32 · 2262 阅读 · 0 评论 -
只用位运算来实现整数的加减乘除四则运算
问题一: 位运算实现加法问题二:只用加法实现减法、乘法、除法问题三:只用加法实现1+2+3+...+n,(循环、判断语句也不用)下面逐一解决:问题三:方法1:只用加法实现1+2+3+...+n1、利用递归来代替循环结构;2、利用&&与运算的特性来代替if结构。int add(int n, int &sum)原创 2013-09-05 22:21:38 · 15790 阅读 · 5 评论 -
无损数据压缩 Lossless Compression
最近一部叫做《硅谷》的mei'ju原创 2014-06-10 21:00:46 · 4695 阅读 · 0 评论 -
插入时间段 Insert Interval
题目:Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessary).You may assume that the intervals were initially sorted according to their start times.原创 2014-02-20 21:57:43 · 1142 阅读 · 0 评论 -
判断一个整数是否是回文数 Palindrome Number
题目源自于Leetcode。Determine whether an integer is a palindrome. Do this without extra space.思路:1、不可以借助辅助空间。即要求空间复杂度为O(1)。如果把int转换为字符串,那么空间复杂度就不符合要求了。2、注意一下,要考虑到:负数的情况怎么算?3、如果想要逆转整数,一定要注意防止溢出的问原创 2013-10-13 16:32:34 · 5309 阅读 · 1 评论 -
将一个整数逆转 Reverse Integer
题目源自于Leetcode。Example1: x = 123, return 321思路:看到这题,一定要想到这几个问题。这就要看你这个人考虑问题是不是周到全面!1、负数的情况,怎么处理?2、原数后面有0,逆转之后怎么处理? 保留还是去掉?3、逆转之后溢出怎么处理? 32位int的表示范围是–2,147,483,648 ~ 2,147,483,647。原创 2013-10-13 14:37:58 · 1732 阅读 · 0 评论 -
读取文件中的随机一行 Random Probability
假设有一个文本文件,文件中有若干行。要求返回随机的一行。每行的被选概率相同。两种情况:1、如果文件很大,不能全放入内存2、如果是文件流大文件的特点是不能载入内存随机读取,文件流的特点是只能读取一次。//伪代码i = 1chosen_line = ""while line has next:if random() < 1/i: # random return原创 2014-02-25 10:49:01 · 4050 阅读 · 4 评论 -
寻找不在数组中最小的正整数 First Missing Positive
问题:给出一个无序的数组,其中包含有任意的整数。现在要求返回不包含在数组中的最小的正整数。要求:时间复杂度O(n),空间复杂度O(1)。思路:如果不要求空间复杂度,可以用hash、map进行统计。但是现在,不允许借助临时空间。但是对于无序数组,不借助空间怎么可能统计的出来。因此,唯一的出路,就是把输入数组自己作为临时空间使用。这道题用了一个类似计数排序的技巧。把一个正数是否存在这一原创 2014-03-08 20:14:49 · 3093 阅读 · 0 评论 -
判断平面上一点是否在三角形内 Inside a triangle or not
平面内有一个三角形,三个顶点的坐标已经给出。现在给出一个坐标点,原创 2014-05-14 21:14:39 · 2075 阅读 · 0 评论 -
扔骰子的一道概率题
题目:一个骰子,6面,1个面是 1, 2个面是2, 3个面是3, 问平均掷多少次能使1,2,3都至少出现一次?思路:对于一次实验,1的概率是1/6, 2的概率是1/3, 3的概率是1/2。我的方法:把它独立的当做是三个过程。几何分布的期望EX=1/p,方差DX=(1-p)/p^2。第一轮是必然事件,“第一次出现X值”(显然第一回扔骰子就会出现一个X)原创 2013-10-30 09:56:38 · 6658 阅读 · 1 评论 -
卡车能行驶到的最远距离 50 trucks with payload
题目: Given a fleet of 50 trucks, each with a full fuel tank and a range of 100 miles, how far can you deliver a payload? You can transfer the payload from truck to truck, and you can transfer fuel from原创 2013-12-20 19:12:38 · 4191 阅读 · 0 评论 -
最多能运送到的货物数量 Camel and Bananas
Question: The owner of a banana plantation has a camel. He wants to transport his 3000 bananas to the market, which is located after the desert. The distance between his banana plantation and the mark原创 2013-12-24 15:27:46 · 1777 阅读 · 0 评论 -
八皇后问题 EightQueen
题目:在8×8的国际象棋上摆放八个皇后,使其不能相互攻击,即要求任意两个皇后不得处在同一行、同一列或者同一对角斜线上。求出总共有多少种摆法。思路: 对于不在同行且不在同列的摆法,8行每行各有一个皇后,那么就是在8列中进行全排列,很明显有8!种情况。在这8!中情况中,再排除对角斜线上在出现冲突的情况。 对于排列组合类型的问题,经常采用递归方式来解决。数据结构:因为每行原创 2013-11-01 20:01:34 · 2220 阅读 · 0 评论 -
如何判断一个数是否为素数
对于一个数n,判断它是否为素数(质数)。这是一个喜闻乐见的问题。注意:2是素数,不过下面的算法一般假设所判定数n>2。最直接方法: 由素数的基本概念出发。 依次判断2~n-1的所有整数能否整除n。如果没有一个能整除的,n就是素数;否则不是素数。改进方法: 由非素数的因数(1除外)的特点可知,对于非素数n=A*B,非素数的因数中必定有一个小于等于sq原创 2013-11-22 11:13:48 · 5169 阅读 · 0 评论 -
求一个序列的逆序数 Inversion Count for an array
在这篇博文《通过交换相邻数来完成排序所需要的最少交换次数》中,提到了逆序数的概念。它的用处还是很广泛的。本文研究一下怎么求逆序数。按照定义来做的直观求解方法的时间复杂度是O(n^2)的,这个复杂度是不理想的。有没有O(nlogn)的方法呢?当然了,一种优化的求法引入了分治思想(Divide and Conquer)。分治思想的两个经典应用,都在解决排序问题上,一个是归并排序算法,一个是快速原创 2014-01-01 20:13:12 · 2523 阅读 · 1 评论 -
涂色问题之 同一排涂三种颜色 Coloring problem
问题:一排n个方块,现有3种颜色,要给这n个方块涂上颜色。要求:相邻方块颜色不同;第一个方块和最后一个方块颜色不同。思路: 递推思想。假设给n个方块涂色的问题是f(n)。那么前n-1个方块的涂色问题就是f(n-1)。1、假设第n-1块的颜色和第1块不同,那前n-1个方块就是f(n-1)问题。由于第n块的颜色既不能和第n-1块颜色相同,也不能第1块相同,那么第n块只能选择剩下的原创 2013-12-30 11:38:20 · 7609 阅读 · 0 评论 -
丑数 Ugly Numbers
问题:Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, …shows the first 11 ugly numbers. By convention, 1 is included. Write a program to原创 2013-12-29 16:22:04 · 1643 阅读 · 0 评论 -
通过交换相邻数来完成排序所需要的最少交换次数
对一个无序序列进行排序,要求一次只能交换相邻的两个数,那么最少需要交换多少次才可以完成排序呢?本问题假设序列所有数各不相同。概念介绍:1、逆序。一般认为从左向右序列的数字增大认为是正序的,那么从左到右序列的序列数字出现减小就认为是逆序的。一个“逆序”的数学定义是这样的,如果存在正整数 i, j 使得 1 ≤ i A[j],则 这个有序对称为 A 的一个逆序,又称作一个逆序对原创 2013-12-02 10:27:06 · 21882 阅读 · 0 评论 -
写出杨辉三角的某一行 Pascal's Triangle II
题目源自于leetcode。题目:Given an index k, return the kth row of the Pascal's triangle.For example, given k = 3, Return [1,3,3,1].思路:杨辉三角的每一行其实是二项式系数的序列。二项式系数C(n,r),可以用排列组合里的数学公式直接求,但是对于计算机来讲乘法和原创 2013-11-27 20:46:01 · 2776 阅读 · 0 评论 -
按身高排成两队问题 catalan数
题目源自于阿里巴巴校招笔试题。题目:12个高矮不同的人,排成2排,每排必须是从矮到高排列,而且第二排比对应的第一排的人高,问排列方式有多少种?思路:假设12个人的身高为,0 1 2 3 4 5 6 7 8 9 10 11。我们先把这12个人从低到高排列,然后,选择6个人排在第一排,那么剩下的6个肯定是在第二排。用0表示对应的人在第一排,用1表示对应的人在第二排。那么含有原创 2013-11-04 19:16:00 · 1982 阅读 · 0 评论 -
数独判断 Valid Sudoku
问题:源于leetcode。这不是要求解数独,而是判断当前的局面有没有违反数独的要求。思路:注意这几点。1、数独都是9*9的;2,数组的九个数字是1~9,跟计算机中常见的0起始的0~8要做个区分。判断方法:按照规定:1、每行没有重复数。2、每列没有重复数。3、9个小方形中也没有重复数。代码:class Solution {public: bool isValidSudok原创 2014-03-04 19:18:38 · 1607 阅读 · 0 评论 -
数独求解 Sudoku Solver
数独游戏是个经典的游戏。现在我要通过程序的方法才自动求解一个数独。这个问题在《Puzzles for Programmers and Pros》一书中有讲解。思路:最直接的方法是,可以用backtracking进行递归尝试。一旦探测到错误就回溯,最终将在递归的最深处发现正解。注意backtracking是可以用引用类型参数进行递归深入的,但是递归回溯出来的时候一定要将改变的值回复回原样原创 2014-03-07 21:16:36 · 1465 阅读 · 0 评论 -
相同数不能相邻的排列问题 组合数学-容斥原理
题目:1、2、3、4、5各有两个,组成一个十位数,要求相同的数不能相邻,有多少种排法?思路:两组数,每组5个各不相同的数,一共是5对儿,进行排列:0、如果没有要求相同数不相邻,则有10!/(2^5)种排列,记作S。1、如果要求有一对相邻的,那么把这一对儿数看成一个数,则有C(5, 1)*9!/(2^4)种排列,记作S1。2、如果要求有两对相邻的,那么把这两对儿数看成两个数,则有原创 2013-11-21 22:59:04 · 11595 阅读 · 0 评论 -
卡特兰数在多种问题下的应用 组合数学-Catalan数
卡特兰数是组合数学中常用的一个数列:通项公式为:h(n) = C(2n, n)/(n+1)递推公式为:h(0)=1,h(1)=1,h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) ,(n>=2)。从卡特兰数的递推公式来看,这是一个关于统计划分情况的递归问题。Catala原创 2013-11-09 18:12:07 · 3720 阅读 · 0 评论 -
普通涂色问题 组合数学-Polya定理
Polya定理是组合数学理论中最重要的定理之一。该定理是要解决这样的问题,在一个集合内,定义了一个等价关系,人们往往关心由这个等价关系所决定的等价类的数目。Polya定理: 设有n个对象,G是这n个对象上的置换群,用m种颜色涂染这n个对象,每个对象涂染一种颜色。若一种染色方案在群G的作用下变为另一种方案,则这两种方案当作是一种方案。那么存在的方案个数为:L=∑mc(ai)/|原创 2013-11-11 22:14:46 · 10614 阅读 · 3 评论 -
整数分解为2的幂数之和
问题:任何整数必定能分解成2的幂之和,给定整数n,求n的此类分解方法的数量。2的幂有:1,2,4,8,16,32,64,128......除了1是奇数之外,其他全部为偶数。比如n = 7时,共有6种分解方法。7=1+1+1+1+1+1+1 =1+1+1+1+1+2 =1+1+1+2+2 =1+2+2+2 =1+1+1+4 =1+2+4原创 2013-11-15 19:39:14 · 7141 阅读 · 0 评论 -
n个不同小球分配到m个相同的非空盒的方法数 组合数学-第二类stirling数
本问题等价于把n个不同的球划分/分配为m份。组合数学概念:斯特林数 斯特林数出现在许多组合枚举问题中,有两类。第一类斯特林数 StirlingS1[n,m], 给出恰包含m 个圈的 n 个元素 的排列数目。 第二类斯特林数 StirlingS2[n,m]给出把 n 个可区分小球分配到m个不可区分的盒子,且盒子没有空盒子的方法的数量。第一类斯特林数和第二类斯特林数有相同的初始条件,原创 2013-11-16 21:24:38 · 4868 阅读 · 0 评论 -
矩形格路径的个数 Unique Paths
题目源自于leetcode。题目:A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).The robot can only move either down or right at any point in time. The robot is try原创 2013-11-20 19:01:25 · 2738 阅读 · 0 评论