您的位置:首页 > 其它

算法:计数,编码,解码

2014-08-16 21:43 489 查看


杨辉三角

给定n求出中所有项的系数?

方法一:利用递推,根据规律,可以从第一层开始逐个的推导出系数,但我们只需要第n行的系数,却把n行所有的系数都求出来了,复杂度为O(n2)。

方法二:利用等式,从开始从左往右递推,这样就得到第n行的所有系数。
代码:https://code.csdn.net/snippets/452078

约数个数

给定n,求n的正约数个数?

首先要得到n唯一分解式,每个素因子的选择情况有0,1,2…ak共ak+1种,则根据乘法原理,n的正约数个数为:(a1+1)(a2+1)…(ak+1)= 

其中n的唯一分解式可以通过从2开始逐个除n方法得到,每次找到一个素因子之后就把它“除干净”,即可保证找到的因子都是素数。

小于n且与n互素的整数个数

对于正整数n,求1,2,3…n中与n互素的个数?
容斥原理。首先要得到n唯一分解式,从总数n中减去p1,p2,…,pk倍数的个数,即,然后加上“同时是两个素因子的倍数”的个数,再减去“同时是3个素因子的倍数”。。。得到,传送中的欧拉公式,根据杨辉三角系数,可以变形为。

代码:https://code.csdn.net/snippets/452080

编码与解码
编码:快速写出任意一个字符串的编号,如有a<b<c,两个a,一个b,一个c组成的四位编码,输入acab,则输出5。
可以算出该字符串小的字符串个数,再加一就得到该字符串的编号。例如求f(caba)的编号,则编号为f(cba)+f(caa)+f(b)+1=11。其中设字符一共有k类,个数分别为n1,n2,…,nk,则有多重集的全排列个数为
解码:由编号得出字符串
例如,序号8,求字符串。序号8,有7个比他小的编码,则从高位开始,a,f(cba)=6<7,b,f(caa)=3,6+3=9>7,则最高位为b,ba,f(ca)=2,2+6=8>7,则高两位为ba,则baac为7,baca为8.

代码:https://code.csdn.net/snippets/452082
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息