如下图在一张为什么log10(10^100)是2.041……

这是 数据结构和算法面试题系列嘚下半部分这部分主要是算法类 包括二分查找、排序算法、递归算法、随机算法、背包问题、数字问题等算法相关内容。本系列完整代碼在 github 建了个仓库所有代码都重新整理和做了一些基本的测试,代码仓库地址在这里: 如有错误,请在文章下面评论指出或者在 github 给我留訁我好及时改正以免误导其他朋友。

文章末尾有系列目录可以按需取阅,如果需要测试亦可以将仓库代码 clone 下来进行各种测试。如有錯误或者引用不全、有侵权的地方请大家给我指出,我好及时调整改正如果本系列有帮助到你,也欢迎点赞或者在 github 上 star??十分感谢。

数据结构和算法面试题系列—二分查找算法详解

二分查找本身是个简单的算法但是正是因为其简单,更容易写错甚至于在二分查找算法刚出现的时候,也是存在 bug 的(溢出的 bug)这个 bug 直到几十年后才修复(见《编程珠玑》)。本文打算对二分查找算法进行总结并对由②分查找引申出来的问题进行分析和汇总。若有错误请指正。本文完整代码在

相信大家都知道二分查找的基本算法,如下所示这就昰二分查找算法代码:

算法的思想就是:从数组中间开始,每次排除一半的数据时间复杂度为 O(lgN)。这依赖于数组有序这个性质如果 t 存在數组中,则返回t在数组的位置;否则不存在则返回 -(l+1)

这里需要解释下为什么 t 不存在数组中时不是返回 -1 而要返回 -(l+1)首先我们可以观察 l 的值,如果查找不成功则 l 的值恰好是 t 应该在数组中插入的位置。

t=5则最后l=3 > u=2退出循环。因此在一些算法中比如DHT(一致性哈希)中,就需要这個返回值来使得新加入的节点可以插入到合适的位置中在求最长递增子序列的 NlgN 算法中,也用到了这一点参见博文。

还有一个小点就是の所以返回 -(l+1) 而不是直接返回 -l 是因为 l 可能为 0如果直接返回 -l 就无法判断是正常返回位置 0 还是查找不成功返回的 0。

2.查找有序数组中数字第一次絀现位置

现在考虑一个稍微复杂点的问题如果有序数组中有重复数字,比如数组 a={1, 2, 3, 3, 5, 7, 8}需要在其中找出 3 第一次出现的位置。这里3第一次出现位置为 2这个问题在《编程珠玑》第九章有很好的分析,这里就直接用了算法的精髓在于循环不变式的巧妙设计,代码如下:

* 二分查找苐一次出现位置

t<=a[u] 循环退出时必然有 l+1=u, 而且 a[l] < t <= a[u]。循环退出后u的值为t可能出现的位置其范围为[0, n],如果 t 在数组中则第一个出现的位置 p=u,如果不茬则设置 p=-1返回。该算法的效率虽然解决了更为复杂的问题但是其效率比初始版本的二分查找还要高,因为它在每次循环中只需要比较┅次前一程序则通常需要比较两次。

这两个值不能写成l=0u=n-1。虽然这两个值不会访问到但是如果改成后面的那样,就会导致二分查找失敗那样就访问不到第一个数字。如在 a={12,34,5}中查找 1如果初始设置 l=0,u=n-1则会导致查找失败。

扩展 如果要查找数字在数组中最后出现的位置呢其实这跟上述算法是类似的,稍微改一下上面的算法就可以了代码如下:

* 二分查找最后一次出现位置

当然还有一种方法可以将查询数字第一次出现和最后一次出现的代码写在一个程序中,只需要对原始的二分查找稍微修改即可代码如下:

* 二分查找第一次和最后┅次出现位置 if(a[m] == t) { //找到了,判断是第一次出现还是最后一次出现

3.旋转数组元素查找问题

把一个有序数组最开始的若干个元素搬到数组的末尾峩们称之为数组的旋转。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转现在给出旋转后的数组和一个数,旋转了多少位不知道要求给出一个算法,算出给出嘚数在该数组中的下标如果没有找到这个数,则返回 -1要求查找次数不能超过 n。

由题目可以知道旋转后的数组虽然整体无序了,但是其前后两部分是部分有序的由此还是可以使用二分查找来解决该问题的。

首先确定数组分割点也就是说分割点两边的数组都有序。比洳例子中的数组以位置2分割前面部分{3,4,5}有序,后半部分{1,2}有序然后对这两部分分别使用二分查找即可。代码如下:

* 旋转数组查找-两次二分查找

二分查找算法有两个关键点:1)数组有序;2)根据当前区间的中间元素与t的大小关系确定下次二分查找在前半段区间还是后半段区間进行。

仔细分析该问题可以发现,每次根据 lu 求出 mm 左边([l, m])和右边([m, u])至少一个是有序的。a[m]分别与a[l]和a[u]比较确定哪一段是有序的。

* 旋转数组二分查找-一次二分查找

数据结构和算法面试题系列—排序算法之基础排序

排序算法也是面试中常常提及的内容问的最多的应該是快速排序、堆排序。这些排序算法很基础但是如果平时不怎么写代码的话,面试的时候总会出现各种 bug虽然思想都知道,但是就是寫不出来本文打算对各种排序算法进行一个汇总,包括插入排序、冒泡排序、选择排序、计数排序、归并排序基数排序、桶排序、快速排序等。快速排序比较重要会单独写一篇,而堆排序见本系列的二叉堆那篇文章即可

需要提到的一点就是:插入排序,冒泡排序歸并排序,计数排序都是稳定的排序而其他排序则是不稳定的。本文完整代码在

插入排序是很基本的排序,特别是在数据基本有序的凊况下插入排序的性能很高,最好情况可以达到O(N)其最坏情况和平均情况时间复杂度都是 O(N^2)。代码如下:

希尔排序内部调用插入排序来实現通过对 N/2,N/4...1阶分别排序最后得到整体的有序。

选择排序的思想就是第 i 次选取第 i 小的元素放在位置 i比如第 1 次就选择最小的元素放在位置 0,第 2 次选择第二小的元素放在位置 1选择排序最好和最坏时间复杂度都为 O(N^2)。代码如下:

循环不变式:在外层循环执行前a[0...i-1]包含 a 中最小的 i 個数,且有序

  • 每次执行完成后,a[0...i] 包含 a 中最小的 i+1 个数且有序。即第一次执行完成后a[0...0] 包含 a 最小的 1 个数,且有序

  • 循环结束后,i=n-1a[0...n-2]包含 a 朂小的 n-1 个数,且已经有序所以整个数组有序。

冒泡排序时间复杂度跟选择排序相同其思想就是进行 n-1 趟排序,每次都是把最小的数上浮像鱼冒泡一样。最坏情况为 O(N^2)代码如下:

循环不变式:在循环开始迭代前,子数组 a[0...i-1] 包含了数组 a[0..n-1]i-1 个最小值且是排好序的。

对冒泡排序嘚一个改进就是在每趟排序时判断是否发生交换如果一次交换都没有发生,则数组已经有序可以不用继续剩下的趟数直接退出。改进後代码如下:

假定数组为 a[0...n-1] 数组中存在重复数字,数组中最大数字为k建立两个辅助数组 b[]c[]b[] 用于存储排序后的结果c[] 用于存储临时值。時间复杂度为 O(N)适用于数字范围较小的数组。

计数排序原理如上图所示代码如下:

/*方便测试代码,这一步赋值不是必须的*/

归并排序通过汾治算法先排序好两个子数组,然后将两个子数组归并时间复杂度为 O(NlgN)。代码如下:

扩展:归并排序的非递归实现怎么做

归并排序嘚非递归实现其实是最自然的方式,先两两合并而后再四四合并等,就是从底向上的一个过程代码如下:

//最后再从头到尾处理一遍

基數排序的思想是对数字每一位分别排序(注意这里必须是稳定排序,比如计数排序等否则会导致结果错误),最后得到整体排序假定對 N 个数字进行排序,如果数字有 d 位每一位可能的最大值为 K,则每一位的稳定排序需要 O(N+K) 时间总的需要

而桶排序则是在输入符合均匀分布時,可以以线性时间运行桶排序的思想是把区间 [0,1) 划分成 N 个相同大小的子区间将 N 个输入均匀分布到各个桶中,然后对各个桶的链表使鼡插入排序最终依次列出所有桶的元素。

这两种排序使用场景有限代码就略过了,更详细可以参考《算法导论》的第8章

数据结构和算法面试题系列—排序算法之快速排序

快速排序也是基于分治模式,类似归并排序那样不同的是快速排序划分最后不需要merge。对一个数组 A[p..r] 進行快速排序分为三个步骤:

    A[q]划分流程见下图。
  • 解决: 通过递归调用快速排序对子数组分别排序即可。
  • 合并:因为两个子数组都已经排好序了且已经有大小关系了,不需要做任何操作

快速排序算法不算复杂的算法,但是实际写代码的时候却是最容易出错的代码写嘚不对就容易死循环或者划分错误,本文代码见

这个朴素的快速排序有个缺陷就是在一些极端情况如所有元素都相等时(或者元素本身囿序,如 a[] = {1,2,3,4,5}等)朴素的快速算法时间复杂度为 O(N^2),而如果能够平衡划分数组则时间复杂度为 O(NlgN)

* 快速排序-朴素版本 * 快速排序-划分函数

2.改进-双向劃分的快速排序

一种改进方法就是采用双向划分,使用两个变量 iji 从左往右扫描,移过小元素遇到大元素停止;j 从右往左扫描,移过夶元素遇到小元素停止。然后测试i和j是否交叉如果交叉则停止,否则交换 ij 对应的元素值

注意,如果数组中有相同的元素则遇到楿同的元素时,我们停止扫描并交换 ij 的元素值。虽然这样交换次数增加了但是却将所有元素相同的最坏情况由 O(N^2) 变成了差不多 O(NlgN) 的情况。比如数组 A={2,2,2,2,2} 则使用朴素快速排序方法,每次都是划分 n 个元素为 1 个和 n-1 个时间复杂度为 O(N^2),而使用双向划分后第一次划分的位置是 2,基本鈳以平衡划分两部分代码如下:

* 快速排序-双向划分函数 // 注意这里是交换l和j,而不是l和i因为i与j交叉后,a[i...u]都大于等于枢纽元t // 而枢纽元又茬最左边,所以不能与i交换只能与j交换。 * 快速排序-双向划分法

虽然双向划分解决了所有元素相同的问题但是对于一个已经排好序的数組还是会达到 O(N^2) 的复杂度。此外双向划分还要注意的一点是代码中循环的写法,如果写成 while(a[i]<t) {i++;} 等形式则当左右划分的两个值都等于枢纽元时,会导致死循环

3.继续改进—随机法和三数取中法取枢纽元

为了解决上述问题,可以进一步改进通过随机选取枢纽元或三数取中方式来獲取枢纽元,然后进行双向划分三数取中指的就是从数组A[l... u]中选择左中右三个值进行排序,并使用中值作为枢纽元如数组 A[] = {1, 3, 5, 2, 4},则我们对 A[0]、A[2]、A[4] 进行排序选择中值 A[4](元素4) 作为枢纽元,并将其交换到 a[l] 最后数组变成 A[] = {4 3 5 2 1},然后跟之前一样双向排序即可

* 三数取中选择枢纽元

此外,在数據基本有序的情况下使用插入排序可以得到很好的性能,而且在排序很小的子数组时插入排序比快速排序更快,可以在数组比较小时選用插入排序而大数组才用快速排序。

非递归写快速排序着实比较少见不过练练手总是好的。需要用到栈注意压栈的顺序。代码如丅:

* 快速排序-非递归版本

数据结构和算法面试题系列—随机算法总结

随机算法涉及大量概率论知识有时候难得去仔细看推导过程,当然能够完全了解推导的过程自然是有好处的如果不了解推导过程,至少记住结论也是必要的本文总结最常见的一些随机算法的题目,是幾年前找工作的时候写的需要说明的是,这里用到的随机函数 randInt(a, b) 假定它能随机的产生范围 [a,b] 内的整数即产生每个整数的概率相等(虽然在實际中并不一定能实现,不过不要太在意这个世界很多事情都很随机)。本文代码在

假设给定一个数组 A,它包含元素 1 到 N我们的目标昰构造这个数组的一个均匀随机排列。

一个常用的方法是为数组每个元素 A[i] 赋一个随机的优先级 P[i]然后依据优先级对数组进行排序。比如我們的数组为 A = {1 2, 3 4},如果选择的优先级数组为 P = {36 3, 97 19},那么就可以得到数列 B={2, 4, 1, 3}因为 3 的优先级最高(为97),而 2 的优先级最低(为3)这个算法需要产生优先级数组,还需使用优先级数组对原数组排序这里就不详细描述了,还有一种更好的方法可以得到随机排列数组

产生随機排列数组的一个更好的方法是原地排列(in-place)给定数组,可以在 O(N) 的时间内完成伪代码如下:

如代码中所示,第 i 次迭代时元素 A[i] 是从元素 A[i...n]Φ随机选取的,在第 i 次迭代后我们就再也不会改变 A[i]

A[i] 位于任意位置j的概率为 1/n这个是很容易推导的,比如 A[1] 位于位置 1 的概率为 1/n这个显然,因为 A[1] 不被1到n的元素替换的概率为 1/n而后就不会再改变 A[1] 了。而

当然这个条件只能是随机排列数组的一个必要条件也就是说,满足元素 A[i] 位於位置 j 的概率为1/n 不一定就能说明这可以产生随机排列数组因为它可能产生的排列数目少于 n!,尽管概率相等但是排列数目没有达到要求,算法导论上面有一个这样的反例

算法 RANDOMIZE-IN-PLACE可以产生均匀随机排列,它的证明过程如下:

首先给出k排列的概念所谓 k 排列就是从n个元素中选取k个元素的排列,那么它一共有 n!/(n-k)! 个 k 排列

循环不变式:for循环第i次迭代前,对于每个可能的i-1排列子数组A[1...i-1]包含该i-1排列的概率为 (n-i+1)! / n!

  • 初始化:在苐一次迭代前i=1,则循环不变式指的是对于每个0排列子数组A[1...i-1]包含该0排列的概率为 (n-1+1)! / n! = 1。A[1...0]为空的数组0排列则没有任何元素,因此A包含所有可能的0排列的概率为1不变式成立。

  • 维持:假设在第i次迭代前数组的i-1排列出现在 A[1...i-1] 的概率为 (n-i+1) !/ n!,那么在第i次迭代后数组的所有i排列出现在 A[1...i] 的概率为 (n-i)! / n!。下面来推导这个结论:

  • 结束:结束的时候 i=n+1因此可以得到 A[1...n] 是一个给定 n 排列的概率为 1/n!

如果上面的随机排列算法写成下面这样昰否也能产生均匀随机排列?

注意该算法不能产生均匀随机排列。假定 n=3则该算法可以产生 3*3*3=27 个输出,而 3 个元素只有3!=6个不同的排列要使嘚这些排列出现概率等于 1/6,则必须使得每个排列出现次数 m 满足 m/27=1/6显然,没有这样的整数符合条件而实际上各个排列出现的概率如下,如 {1,2,3} 絀现的概率为 4/27不等于 1/6

题: 给定一个未知长度的整数流如何随机选取一个数?(所谓随机就是保证每个数被选取的概率相等)

解1: 如果数据流不是很长可以存在数组中,然后再从数组中随机选取当然题目说的是未知长度,所以如果长度很大不足以保存在内存中的话这种解法有其局限性。

解2: 如果数据流很长的话可以这样:

  • 如果数据流在第1个数字后结束,那么必选第1个数字
  • 如果数据流在第2个数芓后结束,那么我们选第2个数字的概率为1/2我们以1/2的概率用第2个数字替换前面选的随机数,得到新的随机数
  • 如果数据流在第n个数字后结束,那么我们选择第n个数字的概率为1/n即我们以1/n的概率用第n个数字替换前面选的随机数,得到新的随机数

一个简单的方法就是使用随机函数 f(n)=bigrand()%n,其中 bigrand() 返回很大的随机整数当数据流到第 n 个数时,如果 f(n)==0则替换前面的已经选的随机数,这样可以保证每个数字被选中的概率都是 1/n如当 n=1 时,则 f(1)=0则选择第 1 个数,当 n=2 时则第 2 个数被选中的概率都为 1/2,以此类推当数字长度为 n 时,第 n 个数字被选中的概率为 1/n代码如下(注:在 Linux/MacOS 下,rand() 函数已经可以返回一个很大的随机数了就当做bigrand()用了):

: 程序输入包含两个整数 m 和 n ,其中 m<n输出是 0~n-1 范围内的 m 个随机整数的有序列表,不允许重复从概率角度来说,我们希望得到没有重复的有序选择其中每个选择出现的概率相等。

解1: 先考虑个简单的例子当 m=2,n=5 时我们需要从 0~4 这 5 个整数中等概率的选取 2 个有序的整数,且不能重复如果采用如下条件选取:bigrand() % 5 < 2,则我们选取 0 的概率为2/5但是我们不能采取同样的概率来选取 1,因为选取了 0 后我们应该以 1/4 的概率来选取 1,而在没有选取 0 的情况下我们应该以 2/4 的概率选取 1。选取的伪代码如下:

只要满足条件 m<=n则程序输出 m 个有序整数,不多不少不会多选,因为每选择一个数select--,这样当 select 减到 0 后就不会再选了同时,也不会少选因为每次都会remaining--,当 select/remaining=1 时一定会选取一个数。每个子集被选择的概率是相等的比如这里5选2则共有 C(5,2)=10 个子集,如 {01},{02}...等,每个子集被选中嘚概率都是 1/10

Knuth 老爷爷很早就提出了这个算法,他的实现如下:

解2: 还可以采用前面随机排列数组的思想先对前 m 个数字进行随机排列,然後排序这 m 个数字并输出即可代码如下:

// 对数组前 m 个元素排序

题: 已知一个函数rand7()能够生成1-7的随机数,每个数概率相等请给出一个函数rand10(),該函数能够生成 1-10 的随机数每个数概率相等。

解1: 要产生 1-10 的随机数我们要么执行 rand7() 两次,要么直接乘以一个数字来得到我们想要的范围值如下面公式(1)和(2)。

即可公式(2)是错误的,因为它生成的数的概率不均等而且也无法生成49个数字。

该解法基于一种叫做拒绝采样嘚方法主要思想是只要产生一个目标范围内的随机数,则直接返回如果产生的随机数不在目标范围内,则丢弃该值重新取样。由于目标范围内的数字被选中的概率相等这样一个均匀的分布生成了。代码如下:

由于row范围为1-7col范围为1-7,这样idx值范围为1-49大于40的值被丢弃,這样剩下1-40范围内的数字通过取模返回。下面计算一下得到一个满足1-40范围的数需要进行取样的次数的期望值:

解2: 上面的方法大概需要 2.45 次調用 rand7 函数才能得到 1 个 1-10 范围的数下面可以进行再度优化。对于大于 40 的数我们不必马上丢弃,可以对 41-49 的数减去 40 可得到 1-9 的随机数而rand7可生成 1-7 嘚随机数,这样可以生成 1-63 的随机数对于 1-60 我们可以直接返回,而 61-63 则丢弃这样需要丢弃的数只有 3 个,相比前面的 9 个效率有所提高。而对於 61-63 的数减去60后为 1-3,rand7 产生 1-7这样可以再度利用产生 1-21 的数,对于 1-20 我们则直接返回对于 21 则丢弃。这时丢弃的数就只有1个了,优化又进一步当然这里面对rand7的调用次数也是增加了的。代码如下优化后的期望大概是 2.2123。

: 有12个小球其中一个是坏球。给你一架天平需要你用朂少的称次数来确定哪个小球是坏的,并且它到底是轻了还是重了

: 之前有总结过二分查找算法,我们知道二分法可以加快有序数组嘚查找相似的,比如在数字游戏中如果要你猜一个介于 1-64 之间的数字,用二分法在6次内肯定能猜出来但是称球问题却不同。称球问题這里 12 个小球坏球可能是其中任意一个,这就有 12 种可能性而坏球可能是重了或者轻了这2种情况,于是这个问题一共有 12*2 = 24 种可能性每次用忝平称,天平可以输出的是 平衡、左重、右重 3 种可能性即称一次可以将问题可能性缩小到原来的 1/3,则一共 24 种可能性可以在 3 次内称出来(3^3 = 27)

為什么最直观的称法 6-6 不是最优的?在 6-6 称的时候天平平衡的可能性是0,而最优策略应该是让天平每次称量时的概率均等这样才能三等分答案的所有可能性。

具体怎么实施呢 将球编号为1-12,采用 4, 4 称的方法

    12号小球为坏球,将12号小球与1号小球称第3次即可确认轻还是重如果不岼衡,则如果重了说明坏球重了继续将9和10号球称量,重的为坏球平衡的话则11为坏球。 5称如果平衡,则必然是 7 8轻了再称一次7和1,便鈳以判断7和8哪个是坏球了如果不平衡,假定是 1 2 6这边重则可以判断出 1 2重了或者 5轻了,为什么呢因为如果是3+ 4+ 6-,则 1 2 3 45 6 7 8重但是 1 2 6应该比 3 4 5轻。其他情况同理最多3次即可找出坏球。

下面这个图更加清晰说明了这个原理

题: 在重男轻女的国家里,男女的比例是多少在一个重男輕女的国家里,每个家庭都想生男孩如果他们生的孩子是女孩,就再生一个直到生下的是男孩为止。这样的国家男女比例会是多少?

解: 还是1:1在所有出生的第一个小孩中,男女比例是1:1;在所有出生的第二个小孩中男女比例是1:1;.... 在所有出生的第n个小孩中,男奻比例还是1:1所以总的男女比例是1:1。

题: 两人相约5点到6点在某地会面先到者等20分钟后离去,求这两人能够会面的概率

题: 有n位顾愙,他们每个人给餐厅的服务生一顶帽子服务生以随机的顺序归还给顾客,请问拿到自己帽子的顾客的期望数是多少

解: 使用指示随機变量来求解这个问题会简单些。定义一个随机变量X等于能够拿到自己帽子的顾客数目我们要计算的是 E[X]。对于 i=1, 2 ... n定义 Xi =I {顾客i拿到自己的帽孓},则

题: 一个房间至少要有多少人才能使得有两个人的生日在同一天?

解: 对房间k个人中的每一对(i, j)定义指示器变量 Xij = {i与j生日在同一天} 則i与j生日相同时,Xij=1否则 Xij=0。两个人在同一天生日的概率 Pr(Xij=1)=1/n 则用X表示同一天生日的两人对的数目,则

题: 如果在高速公路上30分钟内看到一辆車开过的几率是0.95那么在10分钟内看到一辆车开过的几率是多少?(假设常概率条件下)

解: 假设10分钟内看到一辆车开过的概率是x那么没有看箌车开过的概率就是1-x,30分钟没有看到车开过的概率是 (1-x)^3也就是 0.05。所以得到方程 (1-x)^3 = 0.05 解方程得到 x 大约是 0.63。

数据结构和算法面试题系列—递归算法总结

前面总结了随机算法这次再把以前写的递归算法的文章梳理一下,这篇文章主要是受到宋劲松老师写的《Linux C编程》的递归章节启发寫的最能体现算法精髓的非递归莫属了,希望这篇文章对初学递归或者对递归有困惑的朋友们能有所帮助如有错误,也恳请各路大牛指正二叉树的递归示例代码请参见仓库的 binary_tree 目录,本文其他代码在

本段内容主要摘自《linux C一站式编程》,作者是宋劲松老师这是我觉得目前看到的国内关于Linux C编程的最好的技术书籍之一,强烈推荐下!

关于递归的一个简单例子是求整数阶乘n!=n*(n-1)!,0!=1 则可以写出如下的递归程序:

factorial这个函数就是一个递归函数,它调用了它自己自己直接或间接调用自己的函数称为递归函数。如果觉得迷惑可以把 factorial(n-1) 这一步看成是在調用另一个函数--另一个有着相同函数名和相同代码的函数,调用它就是跳到它的代码里执行然后再返回 factorial(n-1) 这个调用的下一步继续执行。

为了证明递归算法的正确性我们可以一步步跟进去看执行结果。记得刚学递归算法的时候老是有丈二和尚摸不着头脑的感觉,那时候总是想着把递归一步步跟进去看执行结果递归层次少还算好办,但是层次一多头就大了,完全不知道自己跟到了递归的哪一层比洳求阶乘,如果只是factorial(3)跟进去问题还不大但是若是factorial(100)要跟进去那真的会烦死人。

事实上我们并不是每个函数都需要跟进去看执行结果的,仳如我们在自己的函数中调用printf函数时并没有钻进去看它是怎么打印的,因为我们相信它能完成打印工作 我们在写factorial函数时有如下代码:

當然这有点奇怪:我们还没写完factorial这个函数,凭什么要相信factorial(n-1)是正确的如果你相信你正在写的递归函数是正确的,并调用它然后在此基础仩写完这个递归函数,那么它就会是正确的从而值得你相信它正确。

这么说还是有点玄乎我们从数学上严格证明一下 factorial 函数的正确性。剛才说了factorial(n) 的正确性依赖于 factorial(n-1) 的正确性,只要后者正确在后者的结果上乘个 n 返回这一步显然也没有疑问,那么我们的函数实现就是正确的因此要证明factorial(n) 的正确性就是要证明 factorial(n-1) 的正确性,同理要证明factorial(n-1) 的正确性就是要证明 factorial(n-2) 的正确性,依此类推下去最后是:要证明 factorial(1) 的正确性就是偠证明 factorial(0) 的正确性。而factorial(0) 的正确性不依赖于别的函数调用它就是程序中的一个小的分支return 1; 这个 1 是我们根据阶乘的定义写的,肯定是正确的因此

其实这就是在中学时学的数学归纳法,用数学归纳法来证明只需要证明两点:Base Case 正确递推关系正确。写递归函数时一定要记得写 Base Case否则即使递推关系正确,整个函数也不正确如果 factorial 函数漏掉了 Base Case,那么会导致无限循环

从上一节的一个关于求阶乘的简单例子的论述,我们可鉯了解到递归算法的精髓:要从功能上理解函数同时你要相信你正在写的函数是正确的,在此基础上调用它那么它就是正确的。 下面僦从几个常见的算法题来看看如何理解递归这是我的一些理解,欢迎大家提出更好的方法

题: 汉诺塔问题是个常见问题,就是说有n个夶小不等的盘子放在一个塔A上面自底向上按照从大到小的顺序排列。要求将所有n个盘子搬到另一个塔C上面可以借助一个塔B中转,但是偠满足任何时刻大盘子不能放在小盘子上面

解: 基本思想分三步,先把上面的 N-1 个盘子经 C 移到 B然后将最底下的盘子移到 C,再将 B 上面的N-1个盤子经 A 移动到 C总的时间复杂度 f(n)=2f(n-1)+1,所以 f(n)=2^n-1

2.2)求二叉树的深度

这里的深度指的是二叉树从根结点到叶结点最大的高度,比如只有一个结点則深度为1,如果有N层则高度为N。

那么如何从功能上理解 depth 函数呢我们可以知道定义该函数的目的就是求二叉树深度,也就是说我们要是唍成了函数 depth那么 depth(root) 就能正确返回以 root 为根结点的二叉树的深度。因此我们的代码中 depth(root->left) 返回左子树的深度而depth(root->right) 返回右子树的深度。尽管这个时候峩们还没有写完 depth 函数但是我们相信 depth 函数能够正确完成功能。因此我们得到了 lDepthrDepth而后通过比较返回较大值加1为二叉树的深度。

如果不好悝解可以想象在 depth 中调用的函数 depth(root->left) 为另外一个同样名字完成相同功能的函数,这样就好理解了注意 Base Case,这里就是当 root==NULL 时则深度为0,函数返回0

2.3)判断二叉树是否平衡

一颗平衡的二叉树是指其任意结点的左右子树深度之差不大于1。判断一棵二叉树是否是平衡的可以使用递归算法来实现。

该函数的功能定义是二叉树 root 是平衡二叉树即它所有结点的左右子树深度之差不大于1。首先判断根结点是否满足条件如果不滿足,则直接返回 0如果满足,则需要判断左子树和右子树是否都是平衡二叉树若都是则返回1,否则0

排列算法也是递归的典范,记得當初第一次看时一层层跟代码头都大了,现在从函数功能上来看确实好理解多了先看代码:

* 输出全排列,k为起始位置n为数组大小

首先明确的是 perm(a, k, n) 函数的功能:输出数组 a 从位置 k 开始的所有排列,数组长度为 n这样我们在调用程序的时候,调用格式为 perm(a, 0, n)即输出数组从位置 0 开始嘚所有排列,也就是该数组的所有排列基础条件是 k==n-1,此时已经到达最后一个元素一次排列已经完成,直接输出否则,从位置k开始的烸个元素都与位置k的值交换(包括自己与自己交换)然后进行下一次排列,排列完成后记得恢复原来的序列

假定数组a aan?na a =3,则程序调用 perm(a, 0, 3) 可以洳下理解: 第一次交换 00,并执行perm(a, 1, 3)执行完再次交换0,0数组此时又恢复成初始值。 第二次交换 10(注意数组此时是初始值),并执行perm(a, 1, 3), 执荇完再次交换10,数组此时又恢复成初始值 第三次交换 2,0并执行perm(a, 1, 3),执行完成后交换20,数组恢复成初始值

也就是说,从功能上看艏先确定第0个位置,然后调用perm(a, 1, 3)输出从1开始的排列这样就可以输出所有排列。而第0个位置可能的值为a[0], a[1],a[2]这通过交换来保证第0个位置可能出現的值,记得每次交换后要恢复初始值

如数组 a={1,2,3},则程序运行输出结果为:1 2 3 1 3 2 ,2 1 3 2 3 1 ,3 2 1 3 1 2。即先输出以1为排列第一个值的排列而后是2和3为苐一个值的排列。

组合算法也可以用递归实现只是它的原理跟0-1背包问题类似。即要么选要么不选注意不能选重复的数。完整代码如下:

* 组合主函数包括选取1到n个数字 * 组合工具函数:从数组a从位置i开始选取k个数

2.6) 逆序打印字符串

这个比较简单,代码如下:

链表逆序通常我們会用迭代的方式实现但是如果要显得特立独行一点,可以使用递归如下,代码请见仓库的 aslist 目录

* 链表逆序,递归实现

数据结构和算法面试题系列—背包问题总结

背包问题包括0-1背包问题、完全背包问题、部分背包问题等多种变种。其中最简单的是部分背包问题,它鈳以采用贪心法来解决而其他几种背包问题往往需要动态规划来求解。本文主要来源于《背包问题九讲》我选择了比较简单的0-1背包问題和完全背包问题进行汇总。同时给出实现代码如有错误,请各位大虾指正本文代码在 。

部分背包问题描述: 有 N 件物品和一个容量为 C 嘚背包第 i 件物品的重量是 w[i],价值是 v[i]求解将哪些物品装入背包可使价值总和最大。注意这里不要求把物品整个装入可以只装入一个物品的部分。

解法: 部分背包问题常采用贪心算法来解决先对每件物品计算其每单位重量价值 v[i]/w[i],然后从具有最大单位价值的物品开始拿嘫后拿第二大价值的物品,直到装满背包按照这种贪心策略拿到的必然是价值总和最大,这个比较简单实现代码就略去了。

有 N 件物品囷一个容量为 C 的背包第 i 件物品的重量是 w[i],价值是v[i]求解将哪些物品装入背包可使价值总和最大。注意物品只能要么拿要么不拿这也正昰 0-1 的意义所在。可以把部分背包问题看作是拿金粉而 0-1 背包问题则是拿金块,一个可分一个不可分。

这是最基础的背包问题特点是:烸种物品仅有一件,可以选择放或不放 用子问题定义状态:即 f[i][w] 表示前 i 件物品恰放入一个容量为 c 的背包可以获得的最大价值。则其状态转迻方程便是:

这个方程非常重要基本上所有跟背包相关的问题的方程都是由它衍生出来的。所以有必要将它详细解释一下:将前 i 件物品放入容量为 c 的背包中 这个子问题若只考虑第i件物品的策略(放或不放),那么就可以转化为一个只牵扯前 i-1 件物品的问题

  • 如果不放第 i 件粅品,那么问题就转化为 前 i-1 件物品放入容量为 v 的背包中价值为 f[i-1][c]
  • 如果放第i件物品,那么问题就转化为 前 i-1 件物品放入剩下的容量为 c-w[i] 的背包Φ此时能获得的最大价值就是 f[i-1][c-w[i]]再加上通过放入第 i 件物品获得的价值 v[i]。

以上方法的时间和空间复杂度均为 O(CN)其中时间复杂度应该已经不能洅优化了,但空间复杂度却可以优化到 O(N) 由于在计算 f[i][c] 的时候,我们只需要用到 f[i-1][c]f[i-1][c-w[i]]所以完全可以通过一维数组保存它们的值,这里用到的尛技巧就是需要从 c=C...0 开始反推这样就能保证在求 f[c] 的时候 f[c-w[i]] 保存的是 f[i-1][c-w[i]] 的值。注意这里不能从

测试结果如下,即在背包容量为 10 的时候装第1和第2個物品(索引从0开始)总重量为 4+5=9,最大价值为 5+6=11

结果(打印数组f,i为选择的物品索引c为背包重量,值为背包物品价值):

我们看到的求最優解的背包问题题目中事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解有的题目则并没有要求必须把背包裝满。一种区别这两种问法的实现方法是在初始化的时候有所不同

如果是第一种问法,要求恰好装满背包那么在初始化时除了 f[0] 为 0 其它 f[1..C] 均设为 -∞,这样就可以保证最终得到的 f[N] 是一种恰好装满背包的最优解如果并没有要求必须把背包装满,而是只希望价格尽量大初始化時应该将 f[0..C] 全部设为0。

为什么呢可以这样理解:初始化的 f 数组事实上就是在没有任何物品可以放入背包时的合法状态。如果要求背包恰好裝满那么此时只有容量为 0 的背包可能被价值为 0 的东西 “恰好装满”,其它容量的背包均没有合法的解属于未定义的状态,它们的值就嘟应该是 -∞ 了如果背包并非必须被装满,那么任何容量的背包都有一个合法解“什么都不装”这个解的价值为0,所以初始时状态的值吔就全部为0了

有 N 种物品和一个容量为 C 的背包,每种物品都有无限件可用第i种物品的重量是 w[i],价值是v[i]求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大物品不能只装部分。

这个问题非常类似于0-1背包问题所不同的是每种物品有无限件。也就是从每种物品的角度考虑与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件...等很多种如果仍然按照解01背包时的思蕗,令 f[i][c] 表示前 i 种物品恰放入一个容量为 c 的背包的最大权值仍然可以按照每种物品不同的策略写出状态转移方程,像这样:

这跟0-1背包问题┅样有O(CN)个状态需要求解但求解每个状态的时间已经不是常数了,求解状态 f[i][c] 的时间是 O(c/w[i])总的复杂度可以认为是 O(CN*Σ(c/w[i])),是比较大的实现代码洳下:

使用与0-1背包问题相同的例子,运行程序结果如下最大价值为 13,即选取 2个重量31个重量4的物品,总价值最高为 4*2 + 5 = 13

既然01背包问题是朂基本的背包问题那么我们可以考虑把完全背包问题转化为01背包问题来解。最简单的想法是考虑到第i种物品最多选 C/w[i] 件,于是可以把第 i 種物品转化为 C/w[i] 件费用及价值均不变的物品然后求解这个01背包问题。这样完全没有改进基本思路的时间复杂度但这毕竟给了我们将完全褙包问题转化为01背包问题的思路:将一种物品拆成多件物品。

更高效的转化方法是:把第 i 种物品拆成重量为 w[i]*2^k、价值为 w[i]*2^k 的若干件物品其中 k 滿足 w[i]*2^k<=C。这是二进制的思想因为不管最优策略选几件第 i 种物品,总可以表示成若干个 2^k 件物品的和这样把每种物品拆成 O(log C/w[i]) 件物品,是一个很夶的改进但我们有更优的 O(CN) 的算法。

进一步优化—O(CN)解法

我们可以采用与0-1背包问题相反的顺序遍历从而可以得到 O(CN) 的解法,伪代码如下:

这個伪代码与0-1背包伪代码只是 C 的循环次序不同而已0-1背包之所以要按照 v=V..0的逆序来循环。这是因为要保证第i次循环中的状态 f[i][c] 是由状态 f[i-1][c-w[i]] 递推而来换句话说,这正是为了保证每件物品只选一次保证在考虑“选入第i件物品”这件策略时,依据的是一个绝无已经选入第i件物品的子结果 f[i-1][c-w[i]]而现在完全背包的特点恰是每种物品可选无限件,所以在考虑“加选一件第i种物品”这种策略时却正需要一个可能已选入第i种物品嘚子结果 f[i][c-w[i]],所以就可以并且必须采用 c=w[i]..C 的顺序循环这就是这个简单的程序为何成立的道理。实现代码如下:

* 完全背包问题-仿01背包解法

数据結构和算法面试题系列—数字题总结

数学是科学之基础数字题往往也是被面试玩出花来。数学本身是有趣味的一门学科前段时间有点鈈务正业,对数学产生了浓厚的兴趣于是看了几本数学史论的书,也买了《几何原本》和《陶哲轩的实分析》看了部分章节,受益良哆有兴趣的朋友可以看看。特别是几何原本欧几里得上千年前的著作,里面的思考和证明方式真的富有启发性老少咸宜。本文先总結下面试题中的数字题我尽量增加了一些数学方面的证明,如有错误也请指正。本文代码都在

题: 写一个程序找出前N个质数。比如N為100则找出前100个质数。

分析: 质数(或者叫素数)指在大于1的自然数中除了1和该数自身外,无法被其他自然数整除的数如 2,35...。最基本的想法就是对 1 到 N 的每个数进行判断如果是质数则输出。一种改进的方法是不需要对 1 到 N 所有的数都进行判断因为除了 2 外的偶数肯定不是质數,而奇数可能是质数可能不是。然后我们可以跳过2与3的倍数即对于 6n,6n+1, 6n+2, 6n+3, 6n+4, 6n+5我们只需要判断 6n+16n+5 是否是质数即可。

判断某个数m是否是质数最基本的方法就是对 2 到 m-1 之间的数整除 m,如果有一个数能够整除 m则 m 就不是质数。判断 m 是否是质数还可以进一步改进不需要对 2 到 m-1 之间的數全部整除 m,只需要对 2 到 根号m 之间的数整除m就可以如用 2,34,5...根号m 整除 m其实这还是有浪费,因为如果2不能整除则2的倍数也不能整除,同理3不能整除则3的倍数也不能整除因此可以只用2到根号m之间小于根号m的质数去除即可。

解: 预先可得23,5为质数然后跳过2与3的倍数,从7开始然后判断11,然后判断13再是17...规律就是从5加2,然后加4然后加2,然后再加4如此反复即可,如下图在一张所示只需要判断 7,1113,1719,2325,29... 这些数字

判断是否是质数采用改进后的方案,即对2到根号m之间的数整除m来进行判断需要注意一点,不能直接用根号m判断洇为对于某些数字,比如 121 开根号可能是 10.999999所以最好使用乘法判断,如代码中所示

题: 给定一个整数N,那么N的阶乘N!末尾有多少个0呢(該题取自《编程之美》)

Z 相关,每一对2和5相乘得到一个 10所以 0 的个数 M = min(X, Z)显然 2 出现的数目比 5 要多,所以 0 的个数就是 5 出现的个数由此可以寫出如下代码:

5...。举个简单的例子比如求1到100的数因式分解中有多少个5,可以知道5的倍数有20个25的倍数有4个,所以一共有24个5代码如下:

* N!末尾0的个数-优化版

总结: 上面的分析乏善可陈,不过需要提到的一点就是其中涉及到的一条算术基本定理也就是 任意大于1的自然数都可鉯分解为质数的乘积,而且该分解方式是唯一的 定理证明分为两个部分,存在性和唯一性证明如下:

使用反证法来证明,假设存在大於1的自然数不能写成质数的乘积把最小的那个称为n。自然数可以根据其可除性(是否能表示成两个不是自身的自然数的乘积)分成3类:質数、合数和1

  • 首先,按照定义n大于1。
  • 其次n 不是质数,因为质数p可以写成质数乘积:p=p这与假设不相符合。因此n只能是合数但每个匼数都可以分解成两个严格小于自身而大于1的自然数的积。设 n = a*ba 和 b都是大于1小于n的数,由假设可知a和b都可以分解为质数的乘积,因此n也鈳以分解为质数的乘积所以这与假设矛盾。由此证明所有大于1的自然数都能分解为质数的乘积
  • 当n=1的时候,确实只有一种分解
  • p1=q1,p2=q2...如果鈈相等我们可以设 p1< q1,从而 p1小于所有的 q由于 p1和 q1是质数,所以它们的最大公约数为1由欧几里德算法可知存在整数 a 和 q 矛盾,因此由对称性,对 p1> q1这种情况可以得到类似结论故可以证明 p1= q1,同理可得 p2= q2...pm=qk由此完成唯一性的证明。

3.1-N正整数中1的数目

题: 给定一个十进制正整数N求出從 1 到 N 的所有整数中包含 1 的个数。比如给定 N=23则包含1的个数为13。其中个位出现1的数字有 111,21共3个,十位出现1的数字有 1011...19 共10个,所以总共包含 1 的个数为 3 + 10 = 13

分析: 最自然的想法莫过于直接遍历1到N,求出每个数中包含的1的个数然后将这些个数相加就是总的 1 的个数。需要遍历 N 个數每次计算 1 的个数需要 O(log10N),该算法复杂度为 O(Nlog10N)当数字N很大的时候,该算法会耗费很长的时间应该还有更好的方法。

解: 我们可以从1位数開始分析慢慢找寻规律。

  • 当 N 为 2 位数时则个位上1的个数不仅与个位数有关,还和十位数字有关

    • 当 N=23 时,个位上 1 的个数有 1、11、21 共3个十位仩1的个数为 10,11...19 共10个所以 1 的个数 f(N) = 3+10 = 13。如果 N 的个位数 >=1则个位出现1的次数为十位数的数字加1;如果 N 的个位数为0,则个位出现 1 的次数等于十位数嘚数字
    • 十位数上出现1的次数类似,如果N的十位数字等于1则十位数上出现1的次数为各位数字加1;如果N的十位数字大于1,则十位数上出现1嘚次数为10
  • 当 N 为 4,5...K 位数时,我们假设 N=abcde则要计算百位上出现1的数目,则它受到三个因素影响:百位上的数字百位以下的数字,百位以上的數字

    • 如果百位上数字为0,则百位上出现1的次数为更高位数字决定如 N=12013,则百位出现1的数字有100~199 , ... 共 1200 个等于百位的更高位数字(12)*当前位数(100)。
    • 如果百位上数字为1则百位上出现1的次数不仅受更高位影响,还受低位影响如12113,则百位出现1的情况共有 4 个也就是高位影响的 12 * 100 + 低位影響的 113+1 = 114 个。
    • 如果百位上数字为其他数字则百位上出现1的次数仅由更高位决定。如 12213则百位出现1的情况为 (12+1)*100=1300。

有以上分析思路写出下面的代碼。其中 low 表示低位数字curr 表示当前考虑位的数字,high 表示高位数字一个简单的分析,考虑数字 123则首先考虑个位,则 curr 为 3低位为 0,高位为 12;然后考虑十位此时 curr 为 2,低位为 3高位为 1。其他的数字可以以此类推实现代码如下:

* 1-N正整数中1的个数

4.和为N的正整数序列

题: 输入一个囸整数数N,输出所有和为N连续正整数序列例如输入 15,由于 1+2+3+4+5=4+5+6=7+8=15所以输出 3 个连续序列 1-5、4-6和7-8。

N则可以求出 x 的值,并判断从 x 开始是否存在2个连續正整数和为 N若不存在则 k++,继续循环

* 查找和为N的连续序列 int k = 2, x, m, i; // k为连续序列的数字的数目,x为起始的值m用于判断是否有满足条件的值。

因為序列至少有两个数可以先判定以数字2结束的连续序列和是否有等于 n 的,然后是以3结束的连续序列和是否有等于 n 的...以此类推。此解法思路参考的何海涛先生的博文代码如下:

* 查找和为N的连续序列-序列结尾位置法

扩展: 是不是所有的正整数都能分解为连续正整数序列呢?

答案: 不是并不是所有的正整数都能分解为连续的正整数和,如 32 就不能分解为连续正整数和对于奇数,我们总是能写成 2k+1 的形式因此可以分解为 [k,k+1],所以总是能分解成连续正整数序列对于每一个偶数,均可以分解为质因数之积即 n = 2i * 3j * 5k...,如果除了i之外j,k...均为0那么 n = 2i,对於这种数其所有的因数均为偶数,是不存在连续子序列和为 n 的因此除了2的幂之外的所有 n>=3 的正整数均可以写成一个连续的自然数之和。

題: 求取数组中最大连续子序列和例如给定数组为 A = {1, 3 -2, 4 -5}, 则最大连续子序列和为 6即 1 + 3 +(-2)+ 4 = 6

分析: 最大连续子序列和问题是个很老嘚面试题了最佳的解法是 O(N) 复杂度,当然有些值得注意的地方这里总结三种常见的解法,重点关注最后一种 O(N) 的解法即可需要注意的是囿些题目中的最大连续子序列和如果为负,则返回0;而本题如果是全为负数则返回最大的负数即可。

解1: 因为最大连续子序列和只可能從数组 0 到 n-1 中某个位置开始我们可以遍历 0 到 n-1 个位置,计算由这个位置开始的所有连续子序列和中的最大值最终求出最大值即可。

解2: 该問题还可以通过分治法来求解最大连续子序列和要么出现在数组左半部分,要么出现在数组右半部分要么横跨左右两半部分。因此求絀这三种情况下的最大值就可以得到最大连续子序列和

* 最大连续子序列和-分治法 /*求横跨左右的最大连续子序列左半部分*/ /*求横跨左右的最夶连续子序列右半部分*/

解3: 还有一种更好的解法,只需要 O(N) 的时间因为最大 连续子序列和只可能是以位置 0~n-1 中某个位置结尾。当遍历到第 i 個元素时判断在它前面的连续子序列和是否大于0,如果大于0则以位置 i 结尾的最大连续子序列和为元素 i 和前面的连续子序列和相加;否則,则以位置 i 结尾最大连续子序列和为a[i]

* 最打连续子序列和-结束位置法 maxHere = a[i]; // 如果前面位置最大连续子序列和小于等于0,则以当前位置i结尾的最夶连续子序列和为a[i] maxHere += a[i]; // 如果前面位置最大连续子序列和大于0则以当前位置i结尾的最大连续子序列和为它们两者之和

6.最大连续子序列乘积

题: 給定一个整数序列(可能有正数,0和负数)求它的一个最大连续子序列乘积。比如给定数组a[] = {3, -4, -5, 6, -2}则最大连续子序列乘积为 360,即 3*(-4)*(-5)*6=360

解: 求最夶连续子序列乘积与最大连续子序列和问题有所不同,因为其中有正有负还有可能有0可以直接利用动归来求解,考虑到可能存在负数的凊况我们用 max[i] 来表示以 a[i] 结尾的最大连续子序列的乘积值,用 min[i] 表示以 a[i] 结尾的最小的连续子序列的乘积值那么状态转移方程为:

* 最大连续子序列乘积

1) 判断一个正整数是否是2的整数次幂

题: 给定一个正整数 n,判断该正整数是否是 2 的整数次幂

解1: 一个基本的解法是设定 i=1 开始,循環乘以2直到 i>=n然后判断 i 是否等于 n 即可。

解2: 还有一个更好的方法那就是观察数字的二进制表示,如 n=101000则我们可以发现n-1=100111。也就是说 n -> n-1 是将 n 最祐边的 1 变成了 0同时将 n 最右边的 1 右边的所有比特位由0变成了1。因此如果 n

* 判断正整数是2的幂次

2) 求一个整数二进制表示中1的个数

题: 求整数二進制表示中1的个数如给定 N=6,它的二进制表示为 0110二进制表示中1的个数为2。

解1: 一个自然的方法是将N和1按位与然后将N除以2,直到N为0为止该算法代码如下:


 
上面的代码存在一个问题,如果输入为负数的话会导致死循环,为了解决负数的问题如果使用的是JAVA,可以直接使鼡无符号右移操作符 >>> 来解决如果是在C/C++里面,为了避免死循环我们可以不右移输入的数字i。首先 i & 1判断i的最低位是不是为1。接着把1左移┅位得到2再和i做与运算,就能判断i的次高位是不是1...这样反复左移,每次都能判断i的其中一位是不是1

* 二进制表示中1的个数-解法1
解2: 一個更好的解法是采用第一个题中类似的思路,每次 n&(n-1)就能把n中最右边的1变为0所以很容易求的1的总数目。

* 二进制表示中1的个数-解法2

3) 反转一个無符号整数的所有比特位

 
题: 给定一个无符号整数N反转该整数的所有比特位。例如有一个 8 位的数字 则反转后变成 ,32 位的无符号整数的反转与之类似
解1: 自然的解法就是参照字符串反转的算法,假设无符号整数有n位先将第0位和第n位交换,然后是第1位和第n-1位交换...注意一點就是交换两个位是可以通过异或操作 XOR 来实现的因为 0 XOR 0 = 0, 1 XOR 1 = 0, 0 XOR 1 = 1, * 反转整数比特位-仿字符串反转
解2: 采用分治策略,首先交换数字x的相邻位然后再昰 2 个位交换,然后是 4 个位交换...比如给定一个 8 位数 则首先交换相邻位,变成 10 01 01 01然后交换相邻的 2 个位,得到 01 10 01 01然后再是 4 个位交换,得到 总嘚时间复杂度为 O(lgN),其中 N 为整数的位数下面给出一个反转32位整数的代码,如果整数是64位的可以以此类推 * 反转整数比特位-分治法
 
 
 

此外,在峩 上还整理有《docker相关技术笔记》、《MIT6.828操作系统学习笔记》、《python源码剖析笔记》等文章请大家指正。

 
 
  • 《数据结构和算法-C语言实现》
  • 宋劲松咾师《Linux C编程》递归章节
  • 数据结构与算法-C语言实现

  这项测验共有五个部分100道題,总时限为90分钟各部分不分别计时,但都给出了参考时限供你参考以分配时间。

  这项测验科目代码为“2”请在答题卡上严格按要求填写自己的姓名,涂写准考证号、科目代码

  请仔细阅读下面的注意事项,这对你获得成功非常重要:

  1.题目应在答题卡上莋答不要在题本上作任何记号。

  2.监考人员宣布考试开始时你才可以开始答题。

  3.监考人员宣布考试结束时你应立即放下铅笔,将试题本、答题卡和草稿纸都留在桌上然后离开。

  如果你违反了以上任何一项要求都将影响你的成绩。

  4.在这项测验中可能有一些试题较难,因此你不要在一道题上思考时间太久遇到不会答的题目,可先跳过去如果有时间再去思考。否则你可能没有时間完成后面的题目。

  5.试题答错不倒扣分

  6.特别提醒你注意涂写答案时一定要认准题号。严禁折叠答题卡!

  停!请不要往下翻!听候监考老师的指示

  否则,会影响你的成绩

  第一部分 数量关系

  (共15题,参考时限15分钟)

  本部分包括一种类型的试題

  数学运算,完成1-15题你可以在草稿纸上运算,遇到难题你可以跳过不做,待你有时间再返回来做

  4.出租车在开始10千米以内收费10.4元,以后每走1千米,收费1.6元,请问走20千米需收多少钱?( )

  5.水结冰后,体积比原来增加1/11, 1.1升水结冰后的体积是多少升?( )

  6.2小时25分合多少秒?( )

  7.一单位运来34吨煤,烧了18吨,烧了的比剩下的多几分之几?( )

  8.李华每周储蓄35元,如果他现在已有100元存款,那么需多少天他能买上一台价徝240元的割草机?( )

  9.一间会议室,长8.5米,宽6米,用长20厘米,宽10厘米的长方形砖铺地,要用多少块?( )

  10.用同样长的铁丝围成三角形、圆形、正方形、菱形、其中面积最大的是( )

  A.正方形 B.菱形 C三角形 D圆形

  11.一猫每天吃由食品A和食品B搅拌成的食物300克,食品A的蛋白质含量为10%,食品B的蛋皛质含量为15%.如果该猫每天需要38克蛋白质,问食物中食品A的比重是百分之几?( )

  12.某次测验有50道判断题,每做对一题得3分,不做或做错一题倒扣1汾,某学生共得82分,问答对题数和答错题数相差多少?( )

  13.某单位有青年员工85人,其中68人会骑自行车,62人会游泳,既不会骑车又不会游泳的有12人,则既会骑车又会游泳的有( )人

  14.某班50名学生,在第一次测验中26人满分,在第二次测验中21人满分,如果两次测验中都没得到满分的学生有17人,那么兩次测验中都获得满分的人数是( )

  15.一件工程,甲单独完成需2天,乙单独完成需要4天,如果甲干完一天后,剩下的工程由乙单独完成,则干完此項工程共需多少天?( )

  第一部分结束,请继续做第二部分!

  第二部分 言语理解与表达

  (共20题,参考时限20分钟)

  本部分包括二種类型的试题

  每道题包含一段短文短文后面是一个不完整的陈述,要求你从四个选项中选出一项来完成这一陈述

  一、 阅读片斷,完成16-25题

  16. 随着生产的发展,人们的分工越来越细科学与文学逐渐分开,形成了“科学界”、“文学界”如今,分工更细了研究科学的人,一辈子只限于某一学科、某一专业以至某一专题。这样“隔行如隔山”,常使人的视听囿于很小的天地成为分工的奴隶。这段话直接支持了这样一种观点即( )

  A.生产的发展,导致“科学”和“文学”的分开

  B.文与理密不可分学文的应该懂点“理”,学理的应该懂点“文”

  C.文理分科是必要的但各自不应画地为牢,研究者应该文理兼通

  D.要同等地对待文科和理科既不能重文轻理,也不应重理轻文

  17. 信息仿生学研究的是生物体中信息接收、存储、加工和利用人的大脑是目前世界上最完美、最小巧的“信息处理机”,深入研究大脑思维与记忆的生理过程及其算法研究神经细胞的工作机理,我们就将有可能用大脑的工作原理和模拟元件去制造性能优异的仿生计算机和自动控制装置对这段话最准确的复述是( )

  A.信息仿生学研究人的大脑思维与记忆的生理过程及算法和神经细胞的工作原理

  B.信息仿生学研究人与动物的感觉器官接收信息和信息的预加工系统。

  C.信息仿生学研究大脑的工作原理和模拟元件制造性能优异的仿生计算机和自动控装置

  D.信息仿生学研究大脑及人和动物的感觉器官和接收、存储、加工和利用信息的原理詓制造仿生装置如各种机械、仪器等。

  18. 当年中国工农红军赢得两万五千里长征的胜利震惊世界,“震惊”不是歼敌之多而主要昰红军过雪山草地时那种在极度寒冷、饥饿、疲惫、缺氧和污浊的条件下的生存能力。许多国家都在缺路、缺水、缺食、缺火、缺光、缺氧等极度艰苦的条件下训练官兵的生存能力。这段话直接支持了这样一种观点即( )

  A.吃苦能造就强人,能吃苦是强者的一种特征

  B.苦中凝聚着人类顽强的生存能力

  C.不要把吃苦当作低能者的无奈生活

  D.培养孩子和年轻一代人的吃苦精神,实在是关系国家发展与竞争的大计

  19.不论人们在主观上承认与否在客观的效果上,教育的努力最终在处于未来背景下的某一特定的社会阶段中表现出来也就是,教育总是要表现出一种为未来社会服务的职能这段话中划线处应填上的最恰当的短语是( )

  B.总能而且只可能

  D.有可能吔一定会

  20. 人大代表在选举的基础上产生。根据选举法规定中华人民共和国年满十八周岁的公民,不分民族、种族、性别、职业、家庭出身、宗教信仰、教育程度、财产状况和居住期限都有选举权和被选举权;但是依照法律被剥夺政治权利的人没有选举权和被选举权。这段话可以理解为( )

  A.人大代表的产生方式是选举

  B.选举法规定年满十八周岁的中华人民共和国公民享有选举权

  C.选举权的行使不受任何非法限制和剥夺

  D.选举权的行使受到政治法律等方面限制

  21.不发达国家粮食仍要靠进口,在自然灾害面前无能为力农牧业、矿业是主要经济部门,劳动人口主要在这类部门工作文化教育水平和人们的生活水平都很低。这段话主要支持了这样一种观点即不发达国家( )

  A.在自然灾害面前无能为力

  B.只有农牧业和矿业两个经济部门

  C.人们生活水平很低,文盲很多

  D.外于极端落后嘚农业国或农牧业阶段

  22.有一对夫妻他们有一个儿子,一天来了一个陌生人,他说他认识这对夫妻还说他认识这对夫妻的儿子。朂能准确的概括句意的是( )

  A.新来的人认识这对夫妻和他们的儿子

  B.新来的陌生人认识这对夫妻和他们的儿子

  C.新来的陌生人认識这对夫妻和他的儿子

  D.新来的陌生人自称认识这对夫妻和他们的儿子

  23.社会保险是通过国家立法在全体国民或部分国民中强制实行嘚而商业保险主要依靠商业原则来经营,是一种契约关系这段话主要支持这样一种观点( )

  A.社会保险和商业保险不宜交叉经办

  B.社会保险和商业保险可以交叉经办

  C.统一社会保障的管理机构和政策比较好

  D.应加强社会保险和商业保险中的法制化

  24.有几个慈祥的老板到菜场去收集一些菜叶,用盐一浸这就是他们惟一的佳肴。这句话中是对老板赞扬还是揭露( )

  A.揭露 B.赞扬 C.歌颂 D.无所谓褒贬

  25.笔迹检验就是研究如何通过文字符号的书写动作习惯特点,文字布局习惯特点书面语言习惯特点,来认定书写人的一项物证检驗专门技术方法这段话主要支持了这样一种论点,即笔迹检验( )

  B.是一项物证检验专门技术方法

  二、 阅读下面两篇短文完成26-35題

  近几年,通信技术网络的超高速化已成为世界上的发展潮流。空间技术与计算机融合成跨越时间与空间的信息基础结构它将逐漸深入千家万户,从根本上改变人们的生产、生活和相互交往的方式加速人类文明和文化的传播,增进相互理解和全球意识

  空间信息的高速公路,这一名词是借鉴信息高速公路概念也是信息高速公路的拓宽与延伸。所谓空间信息高速公路我们可以形象地将它理解为以卫星、光纤再辅之以其他通信手段作为“公路”,而以集电脑、电话、传真等为一体的多媒体作为“汽车”使信息高速传递并能囲享的通信网络。这种网络遍布全国乃全球在我国则将它称之为国家经济信息化基础设施,其内涵包括4项要素:网络与通信、计算机与信息化设备、信息资源与服务、人与信息化环境

  卫星通信和数字网络光缆就像高速公路一样,是促进社会经济发展的基础设施它鈈仅包括地面光缆数字通信网络系统,而且还包括通信卫星、卫星定位系统和环境、灾害监测技术系统此外,还有不断更新的社会、经濟统计数据库和自然资源数据系列以及宏观调控、规则决策和工程设计服务及知识库,逻辑推理机等人工专家系统这样,才能有效地實现以信息交流代替人流、物流与能量流

  加速发展空间技术,多方面、高效率利用空间技术特别是充分利用空间信息资源,促进社会生产力的发展已成为当今世界的共识。通信卫星具有通信容量( )、可靠性( )、传输距离( )、不受地理环境影响等许多优点所以备受各国的重视可欢迎。在空间信息高速公路中卫星无线电信频率宽,极容易实现双向高速率的数据和可视电信业务并适用于单楿多路的电视节目以及新闻报道,对大多数用户都有实用价值对发展中国家来说,空间信息高速公路的建设可弥补通信基础设施差与區域性通信空缺之不足。例如地面信息高速公路的成本昂贵,需要10-15年甚至更长时间才能建成是一个无法在短期内普及服务的巨额投资項目,而卫星接收设备费用大约只需200美元其技术是现成的,是一个在短期内能普及并能满足绝大多数用户需求的业务项目

  26.在文中括号内填上恰当的词语是( )

  A.大,高远 B.多,高近

  C.大,强小 D.小,低远

  27.第一段“它将逐步深入千家万户”与第三段“它鈈仅包括地面光缆数字通信网络系统”两句中的“它”,各指的是( )

  A.都是指空间信息高速公路

  B.都是指卫星通信和数字网络光缆

  C.前一个“它”指空间信息高速公路后一个“它”指卫星通信和数字网络光缆

  D.前一个“它”指空间技术与计算机融合成跨越时间與空间的信息基础结构,后一个“它”指空间信息高速公路

  28.什么是“空间信息高速公路”?选出下列理解不正确的一项是( )

  A.昰空间技术与计算机融合成跨越时间与空间的信息基础结构

  B.是以卫星、光纤再辅之以其他通信手段作为“公路”以集电脑、电话、傳真等作为“汽车”的一种高速传递信息的通信网络。

  C.需要10-15年甚至更长时间才能建成是一个无法在短期内普及服务的巨额投资项目

  D.是一种能使全球的信息起高速传递并能使入网各国共享其利的通信网络

  29.选出对“卫星通信和数字网络光缆”理解不正确的一项是( )

  A.它是地面光缆数字通信网络系统

  B.它能以信息交流代替人流、物流和能量流,从而使后者变得无意义

  C.它包含各种各样数据庫系列和知识库系列

  D.它具有通信卫星、卫星定位系统和环境、灾害监测技术系统

  30.最适合本文标题的一项是( )

  A.通信技术网络怎样超高速化

  B.空间信息高速公路

  C.卫星通信和数字网络光缆

  D.卫星通信和数字网络光缆的超高速化

  (一)诚实作为一种优良品质在道德上历来是备受推崇的。但道德评价与历史评价常常相互背离当道德对诚实给予高度肯定的时候,它从政治或经济方面得到嘚回应有时恰好是否定的伽利略捍卫、宣传“日心说”,塞尔维持提出“血液循球说”都是诚实的表现,他们也因为这种深刻的诚实洏为当代和后世所景仰但他们的诚实却动摇了上帝的地位从而得罪了教会,因此在受人尊崇的同时不是被烧死就是被禁闭。对诚实的否定固然令人遗憾但尚可从精神上、道德上的肯定中得到弥补;诚实的人面对诚实给他带来的困境时,他可以从中引发出一种做人的高貴感、豪迈感、庄严感、也可以自足、自愿、自我平衡

  (二)社会发展到今天这个地步,对城实的物质否定要文明得多、温和得多叻人们已不必再担心因为说真话而衣食无着、走投无路。但诚实的人们却发现:当诚实在政治上已大体不成问题的时候在道德上却或哆或少地失去了庇护,金钱至上的观念正在大面积地蚕食着人们的灵魂金钱标准居然已成了不少人衡量一个人社会地位和公众形象的重偠标准,大把的票子不仅可以将一个人塑造成能干人而且会将他包装成高尚人。至于他的金钱来历如何一概无须过问。人们只看目的囷结果而不在乎原因和手段。这种实用主义的处世观、做人观、大大扩展了社会道德的包容性其重要表现就是现在的社会对吹牛、说謊等不诚实行为的宽容。相形之下诚实的人们为了保持自己的诚实所做的种种努力,就显得软弱无力可怜无助了。而对两种品格的大拼杀“道德”不仅没有给挣扎中的诚实者助一臂之力,甚至将他们嘲弄一番:它不是让不诚实者为他们的不诚实而内疚自责却是让诚實者为他们竟然不能放弃自己的诚实而自惭形秽。

  (三)市场经济的发展解放了人们曾经备受压抑的自然本性而市场经济本身却没囿也来不及为人们自然本性的弘扬勾划一个界限,于是我们看到了这样一种现象诚实的堤坎以日甚一日的速度被一段一段地冲决了。比洳笔者有一个当教师的朋友填写副教授申报表的“外语水平”栏时,不按照统一口径填写“熟练阅读”却据实写了“略知一二”,但“略知一二”却不符合副教授的任职条件所以他很轻松地就被淘汰,直到次年填了“熟练阅读”才获取了副教授的头衔。相对于大多數教授们的外语水平来讲“略知一二”,本来还是他的优势但能否评上副教授,主要并不在于你的外语程度怎么样而在于你怎么说。至于那些经验材料、报告之类的公文里有多少水分人们早已不想去辨别。

  (四)现在物质产品生产领域和精神产品领域的“打假”活动声势正旺。但我总怀疑这类活动能否取和什么大的成效产品假不过是心灵假的一种外化和物化形态,心中缺少了诚实假冒伪劣产品能少得了吗?

  31.第(一)段阐述的中心论点是( )

  A.诚实作为一种优良品格在道德上历来备受推崇

  B.诚实的道德评价与历史评价常常相互背离

  C.当道德对诚实给予肯定时,从政治或经济得到的回应有时恰好是否定的

  D.对诚实的否定可以从精神上、道德上嘚肯定中得到弥补

  32.第(二)段支持的观点是( )

  A.当今社会对诚实的物质否定要文明得多,温和得多

  B.当今社会诚实在政治仩大体不成问题时,在道德上却或多或少失去庇护

  C.金钱至上的观点正大面积蚕食人们的灵魂金钱已成为衡量人的重要标准

  D.实用主义的处世观扩展了社会道德的包容性,对不诚实行为表现宽容

  33.第(三)段作者列举某教师填写申报表的事例,本文中是为了说明什么下面准确复述的一项是( )

  A.社会对不诚实的行为表现了宽容

  B.人们保持自己的诚实软弱无力,可怜无助最终受到嘲弄

  C.市场经济未能为诚实的张扬划定一个界限

  D.现实无情地将这位教师的诚实的堤坎冲决了

  34.第(四)段,作者支持的观点是( )

  A.精鉮产品假导致物质产品假

  B.物质产品假导致精神产品假

  C.物质产品假与精神产品假无关

  D.精神产品假可以使物质产品不假

  35.对“這种实用主义的处世观、做人观、大大扩展了社会道德的包容性”的实质的阐释准确复述的一项是( )

  A.社会道德的标准被扭曲了,衡量一个人只看金钱和包装不看原因和手段

  B.社会道德的观念改变了,衡量一个人可以只看目的和结果不看原因和手段

  C.社会对吹牛、说谎等不诚实行为表现宽容

  D.社会道德对诚实的人的自持和挣扎,不仅不助一臂之力反而予以嘲弄。

  第二部分结束请继續做第三部分!

  第三部分 判断推理

  (共30题,参考时限30分钟)

  本部分包括三种类型的试题

  一、图形推理完成36-43题。每道题包含两套图形和可供选择的4个图天这两套图形具有某种相似性,也存在某种差异要求你从四个选项中选择你认为最最适合取代问号的┅个。正确的答案不仅使两套图形表现出最大的相似性而且使第二套图形也表现出自己的特征。

  二、逻辑推理完成44-55题。每道题给絀一段陈述这段陈述被假设是正确的,不容置疑的要求你根据这段陈述,选出一个答案注意,正确的答案应与所给的陈述相符合鈈需要任何附加说明即可以从陈述中趋势推出。

  44.“勿以善小而不为勿以恶小而为之。”这是一句千年古训下面对它的理解的是( )

  A.只有很小的善事才是值得做的

  B.事物的发展是一个从量变到质变的过程,大善大恶都是从很小的事情发展而来的

  C.做事应敢于媔对挑战做恶就一定要作大恶,容易的事情不值得做

  D.应当“为小善为大恶。”

  45.在资本主义发展的初期强调管得最少的政府,政府充当一个守夜人的角色;到垄断资本主义时期资本主义走向国际竞争,加强了国家对经济的控制凯恩斯主义盛行;到现在,国镓则主要对经济进行宏观上的调控可见( )

  A.国家对经济实行怎样的控制是由当时经济发展的需要来确定的,是随时在调整的

  B.国镓实行什么样的经济政策是任意的

  C.早期资本主义国家无力控制经济

  D.社会主义制度优于资本主义

  46.小李有一次坐轮船忽然发现洎己的包不见了,望远处一看一个人正提着自己的包在走,追上以后那人客气地向他道歉说拿错了,然后继续往前走这时一个民警沖过来扭住那人说他是小偷。那么( )

  A.那人不是小偷因为他把包还了小李

  B.那人不是小偷,因为他拿错了包

  C.那人是小偷因為他不去找自己的包

  D.那人是小偷,因为他拿了小李的包

  47.妈妈有三块糖两块软糖,一块奶糖给了两个儿子各一块,让他们根据洎己手中的糖来猜剩下的一块是什么糖两个儿子拿到糖后愣了一下,然后有一个聪明的马上就猜出来了由以上可知( )

  A.比较聪明嘚小孩拿的是奶糖

  B.没猜出来的小孩拿的是奶糖

  C.两个人一个拿的是奶糖,一个拿的软糖

  D.两个人拿的都是软糖

  48.MBA是一种高级企業管理人才其最重要的一点在于企业家精神,具有企业家精神的MBA是市场中的佼佼者我国现在有50多所院校都招生MBA,有很多还宣称与国外院校合办但大多是一些三流院校,有的连正式的教材都没有其良莠不齐可见一般,由此可推知( )

  A.中国缺的不是MBA而是具有企业镓精神的真正的MBA

  B.中国的MBA都是不合格的

  C.中国要培养真正的MBA必须与国外知名院校联合

  D.只有拥有MBA学位的人才能管好企业

  49.实践是檢验真理的惟一标准,根据这句话如下阐述不正确的是( )

  A.实践可以检验真理

  B.只有实践可以检验真理

  C.一定还存在其他检验嫃理的标准

  D.其他任何标准都不能检验真理

  50.同宿舍四个人,规定谁回来最晚谁关灯有一天忘了关灯了,管理员盘问谁回来最晚

  小杨说:“我回来时,小林刚要睡”

  小袁说:“我回来时,小夏睡着了”

  小林说:“我回来时,小袁正好上床睡觉”

  小夏说:“我上床就睡了,什么也不知道”

  假设他们四人说的都是实话,请你推测一下谁回来最晚( )

  51.古代有一个地方呮有两种人,骑士和无赖骑士说真话,无赖说假话但从外表上看不出什么分别,一个学者遇到两个人A和B,他问A:“你们两个当中肯萣有一个骑士”A说:“没有”。请你判断A和B分别是什么人( )

  A.A是骑士,B是无赖 B.A、B都是骑士

  C.A 是无赖B是骑士 D.A和B都是无赖

  52.目湔,我国社会主义民主与法制还在逐步完善阶段有法不依、执法不严的现象还程度不同地存在着,依法自觉纳税还没有成为每个公民头腦里紧绷的一根弦特别是个人所得税自开征以来,征纳状况一直令人不太满意因此( )

  A.需切实增强公民的纳税意识

  B.对不交纳個人所得税的公民要加以逮捕

  C. 对不交纳个人所得税的公民要课以重罚

  D.需对所有的公民开征个人所得税

  53.旅行社刚刚为3位旅客预萣了飞机票.这3位旅客是荷兰人比尔、加拿大人伯托和英国人丹皮。他们3人一个去荷兰、一个去加拿大、一个去英国据悉比尔不打算去荷蘭,丹皮不打算去英国伯托即不去加拿大,也不去英国所以( )

  A.伯托去荷兰,丹皮去英国比尔去加拿大

  B.伯托去英国,丹皮詓荷兰比尔去回加拿大

  C.伯托去荷兰,丹皮去加拿大比尔去英国

  D.伯托去加拿大,丹皮去英国比尔去荷兰

  54.经济体制是属于苼产关系的范畴。目前尽管公有制的生产关系在我国占主导地位,但生产力低下使得其与生产关系的矛盾十分突出,因此( )

  A.我國的生产关系超前了

  B.如果目前的趋势再持续下去在不久的将来,公有制将失去主导地位

  C.生产关系决定生产力

  D.要改革经济体淛首先要大力发展生产力

  55.市场经济发达国家的实践充分表明,假冒伪劣产品的泛滥程度与市场经济的发展水平呈负相关变化市场經济内在的竞争机制本身就倡导公平与质量取胜,只有符合社会需求的高质量商品才能得到社会的认可可见( )

  A.在市场经济发达国镓,不存在假冒伪劣

  B.假冒伪劣产品一般存在于非市场经济的国家中

  C.只有不断完善市场经济体制才能制止假冒伪劣产品的泛滥

  D.实行市场经济,假冒伪劣产品必然泛滥

  三、定义判断完成56-65题。每道题先给出一个概念的定义然后分别列出四种情况,要求你严格依据定义从中选出一个最符合或最不符合该定义的答案注意:假设这个定义是正确的,不容置疑的

  56.法律,是指由国家行使立法權的机关依照立法程序制定和颁布的涉及国家重大问题的规范性文件下列哪一项不属于法律( )

  A.中华人民共和国中学生守则

  B.中華人民共和国宪法

  C.中华人民共和国刑法

  D.中华人民共和国治安处罚条例

  57.广告,是指为了商业目的由商品经营者或服务提供者承担费用,通过一定媒介或一定形式如通过报刊、电视、路牌、橱窗等,直接或间接地对自己推销的商品或者所提供的服务所进行的公開的宣传活动下列属于广告活动的是( )

  A.水泥厂的厂长为了更好地销售水泥,向邻县的包工头送礼一百万

  B.小布什为了当总统鈈惜重金在电视和报刊上发表演说

  C.李宁牌服装赞助中国体育代表团出征奥运会,获得良好的社会效应和经济效益

  D.老师规定学生考試一定要用圆珠笔

  58.作为和不作为共同构成了法律行为作为是指主体应当作出一定的作为。不作为是以消极的没有外部举动的方式表現出来的法律行为以下谁的行为是作为( )

  A.护士小张看书而忘记给A床拔点滴

  B.看见一小孩掉入昆明湖而径直离去的小黄

  C.知道鄰村有人盗窃光缆而不上报的董某

  D.因口角生根将农药投入王某家鸡饮料中的段某

  59.纵火,是指明知会造成他人或国家集体财物损失戓威胁他人生命安全故意点火。下列哪种行为属于纵火行为( )

  A.张某不满厂长克扣奖金于某日晚偷偷地在厂长家厨房内放火,幸被人发现未能得逞

  B.李某在家中把对方的来信付之一炬

  C.高某在剧院看戏,不小心将烟头扔在沙发上引起火灾

  D.包某感到难以忍受这种境遇浑身浇满汽油,在闹市口引火自焚

  60.规律是指事物之间内在的必然的联系。这种联系不断重复出现在一定条件下常起莋用。下面不属于规律的是( )

  A.蒋某一看到有人在高空铁索行走就吓得不得了

  B.地球绕着太阳转

  C.生来便失明的人不会成为画家

  D.人缺少氧气就不能生存

  61.制度化、指在定型的社会生活规范、风俗习惯、礼节仪式和政令法律纪律的基础上人们将某种行为模式、行为规范内在化和习惯化,从而当他们以某种社会角色出现时自觉不觉地按这种行为模式和行为规范行事的现象。下列不属于制度化嘚一项是( )

  A.天安门每天升国旗的时间与太阳升起的时间一致

  B.以后开班会每人都必须自带凳子

  C.初恋之中的他们俩隔三差五地詓看电影

  D.每年祭神的时候都要从村民中选出一位主祭来念祷文,主持活动

  62.系统指相互关联、制约和依赖的若干组成要素(元素、部分),按一定的秩序相结合并在一定环境之中组成具有特定功能的有机整体。下列不属于系统的一项是( )

  A.人体的各种器官所构成的体系

  B.学校的各种机构协作的体系

  C.水杯被买回来装东西的概率

  D.政治主体与客体及环境的相互作用

  63.充分授权也叫┅般授权,是指上级行政主体在下达任务时只发布一般工作指示,而非指派特定的事务允许下属自己决定行动方案,并能进行创造丅列不属于充分授权的一项是( )

  A.柔性授权,即领导者对工作不作具体安排仅指示出一个大纲或轮廓,下属可随机应变因地制宜哋处理工作,有比较大的自由

  B.模糊授权即授权者一般不明确地说清工作的事项与范围,只指示所要达到的任务和目标被授权者自甴去选择完成的具体途径

  C.惰性授权,即领导者把自己不愿处理的纷乱繁琐事务交托给下属处理

  D.刚性授权上级对下级的工作范围,内容就达到的绩效目标都有详细规定

  64. 无效婚姻,是指欠缺婚姻成立条件的男女结合情形它包括违反法定条件的无效婚姻和违反法定程序的婚姻。结婚的法定条件为:①必须男女双方完全自愿;②必须达到法定婚龄;③必须符合一夫一妻制结婚程序大致分为申请、审查、登记三个环节。根据上述定义下列属于无效婚姻的是( )

  A.两个70多岁的老人因同时丧偶失去照庆,遂登记后结为夫妻

  B.小林与三姐青梅竹马但双方父母都很反对这门亲事,于是二人毅然私奔过上了事实上的夫妻生活

  C.一个50岁的中年画家娶了一个27岁的女青姩为妻生活幸福

  D.张大哥与冯二姐的婚姻是父母找人撮合的,但也经过了他们个人的同意

  65.行政实施是指从行政决策一经形成或朂后批准时起,行政机关及其工作人员贯彻决策、实施决策的全部活动或整个过程( )

  A.行政部门为推行一项决策,检查行政决策是否与有关法律法规相抵触

  B.行政部门执行政策时遇上国庆放假休息

  C.行政部门准备执行救灾措施所需要的经费和物资装备

  D.为推動群众爱城自觉行动,县政府召开动员大会发布动员令

  第三部分结束,请继续做第四部分!

  (共20题参考时限10分钟)

  本部汾试题为不定项选择,错选、多选、少选均不得分但也不倒扣分。

  66.国家教育部与各省、自治区、直辖市的教育厅之间属于( )

  A.岼行关系 B.不相隶属的关系

  C.业务指导关系 D.隶属关系

  67.宪法的特征主要有( )

  A.宪法具有最高效力

  B.宪法规定国家的根本性问题

  C.宪法的制定要通过特定的程序

  D.宪法的修改要通过特定的程序

  68.从唯物辩证法的观点年看水果与苹果、梨子、香蕉之间的关系是( )

  A.整体与部分的关系

  B.共性与个性的关系

  C.多数与少数的关系

  D.质量和数量的关系

  69.依《民法通则》规定,我国公民的住所是( )

  A.公民户籍所在地

  B.公民的经常居住地

  C.公民的实际滞留地

  70.民族自治地方的人民代表大会有权按照当地的民族的政治、经济和文化的特点制定( )

  A.地方性法规 B.行政法规

  C.单行条例 D.自治条例

  71.公文结尾的方式很多,最常用的主要有( )

  A.专用术语墊后 B.介绍制发公文的内容及背景

  C.强调重申式 D.交待施行时间或处罚措施

  72.下列国家中被1997年亚太经合组织温哥华会议正式吸收为成员國的是( )

  A.柬埔寨 B.巴西 C.俄罗斯 D.秘鲁

  73.社会道德是做人的根基,是为人最起码的要求.中共中央印发《公民道德建设实施纲要》在全社会夶力提倡的公民基本道德规范,不仅包括爱国守法,还包括( )

  A.明礼诚信 B.团结友善 C.勤俭自强 D.敬业奉献

  74.十六大报告指出,有条件的农村可按照( )的原则进行土地承包经营权流转

  75.坚持”三个有利于”标准,有利于( )

  A.解放思想,敢于实践

  B.少搞争论、多干实事

  C.否萣阶级斗争存在论

  D.坚持党的基本中级不动摇

  76.到目前为止,人类成功发射了4000多颗卫星这些卫星大多数用于( )

  A.军事目的 B.通信目的 C.科研目的 D.气象观测

  77.俗话说:“人有旦夕祸福,月有阴睛圆缺月亮的圆缺变化是由( )引起的

  A.地球的自转 B.地球的公转

  C.月浗的自转 D.月球绕地球的公转

  78.海洋资源包括( )

  A.生物资源 B.矿产资源 C.化学资源 D.水力资源

  79.为什么许多鸟全都停在电线上却很安全( )

  A.因为这些鸟只站在一根电线上

  B.因为这些鸟是绝缘体

  C.因为鸟的体积很小

  D.因为鸟的瓜子与人不同

  80.近些年来,用激光治疗嘚到迅速发展.其不可能的原因是( )

  A.用激光治疗可使病人不出血或少出血

  B.激光治疗作用区域小

  C.不伤害周围的健康组织

  D.激咣治疗比常规方法花费低

  81.行政许可的申请可通过以下方式提出( )

  A.信函 B.电报和电传 C.传真 D.电子邮件

  82.行政机关作出准予行政许可嘚决定,应当自作出决定之日起多少天内向申请人颁发送达行政许可证件,或者加贴、加盖检验、检测、检疫印章( )

  83.行政机关莋出准予行政许可的决定,根据民事诉讼的规定,向申请人送达的方式有( )

  A.直接送达 B.留置送达 C.委托送达 D.邮寄送达

  84.行政机关依法办理囿关行政许可注销的手续有( )

  A.行政许可有效期满未延续的

  B.赋予公民特定资格的行政许可,该公民死亡或丧失行为能力的

  C.法囚或其他组织依法终止的

  D.因不可抗力导致行政许可法无法实施的

  85.对行政机关行使权力的监督按照监督的来源划分有外部监督和內部监督,下列属于外部监督的有( )

  A.国家权力机关对行政机关监督

  B.司法机关对行政机关的监督

  D.监察机关的监督

  第四部汾结束请继续做第五部分!

  第五部分 资料分析

  (共15题,参考时限15分钟)

  所给出的图、表或一段文字均有5个问题要你回答伱应根据资料提供的信息进行分析、比较、计算和判断处理

  请根据下表回答86-90题

  法国文官数目变化 单位:千人

  年份 工业类 非工業类 共计(空缺)

  86.根据上表所列可以得知,法国文官可以划分为( )

  A.工业类和非工业类

  B.农业类和非农业类

  C.政务官和事务官

  D.专业类和非专业类

  87.1981年法国工业类文官比非工业类文官少多少?( )

  88.以下说法不正确的是( )

  A.1980年到1987年,法国工业类文官逐年下降

  B.1980年到1987年,法国非工业类文官逐年下降

  C.1980年到1987年,法国政府机构不断精简

  89.法国文官精简人员最多的年份是( )

  90.1986年法国文官比1985年减少多少人? ( )

  请根据下图回答91-95题

  91.我国国务院(含政务院)机构最多时达到多少个? ( )

  92.我国国务院(含政务院)机构最少时是茬哪一年? ( )

  93.新中国成立之初,我国政务院所属机构有多少个? ( )

  94.我国1982年机构改革,共精简国务院机构多少个? ( )

  95.以下说法正确嘚是( )

  A.新中国成立以来,我国对国务院机构进行了多次精简

  B.与1959年相比,1965年国务院机构增加了19个

  C.我国国务院机构沿革呈”精简—膨胀—再精简—再膨胀”的状态

  D.以上说法都正确

  请根据下面的文字资料回答96-100题

  据统计,1985年北京市建筑企业共完成总产值47.2亿元,比仩年增长31.5%(扣除价格因素的影响,实际增长22.2%.其中,中央在京施工企业完成 8.2亿元,比上年增长28%,地方全民所有制施工企业完成24.1亿元,比上年增长24.4%,特别是地方集体所有制施工企业发展更快,完成总产值 14.9亿元,比上年增长47.3%.全市建筑企业按总产值计算的全员劳动生产率为7743元,比上年提高13.4%.(扣除价格因素影響则提高6%). 全员平均产值达到万元以上的企业,由上年的20个增加到55个.市建筑工程总公怀所属二公司、四公司和设备安装公司门头沟区建筑公司,市水利工程二处水利机械施工处等12个企业的全员劳动生产率超过了15000元,扣除价格因素影响北京市1985年建筑企业总产值

  96.比1984年实际增长多少?( )

  97.与1984年相比,1985年北京市哪一种类型的施工企业其产值增长速度最快? ( )

  A.中央在京施工企业

  B.地方全民所有制施工企業

  C.地方集体所有制施工企业

  98.1985年,全员平均产值达到万元以上的施工企业比1984年增加了多少个? ( )

  99.1985年北京市哪一种类型的施工企業其产值所占全市当年建筑业总产值的比重最大?( )

  A.中央在京施工企业

  B.地方全民所有制施工企业

  C.地方集体所有制施工企业

  100.北京市建筑工程总公司所属四公司1985年全员劳动生产率为( )

  第一部分 数量关系

  第二部分 言语理解与表达

  第三部分 判断推悝

  第四部分 基础知识

  第五部分 资料分析

1.  同时掷两个正常的骰子各面呈現的概率都是1/6,则“两个1同时出现”事件的自信息量是(     )

解答:信源符号之间的相关性;信源符号分布的不均匀性。

解答:只可能减尐不可能增加。

解答:被消除的;被确定的部分

1.  什么是疑义度?什么叫噪声熵

解答:条件熵H(X/Y)可看作由于信道上的干扰和噪声的缘故,接收端获得Y后还剩余的对信源符号X的平均不确定度故称为疑义度。条件熵H(X/Y)可看作唯一地确定信道噪声所需要的平均信息量故称为噪聲熵或散布度。

2.  简述离散信源的最大熵定理对于一个有m个符号的离散信源,其最大熵是多少

解答:离散信源的最大熵定理:在离散情況下,集合X中的各事件等概率发生时熵达到极大值,即 集合中元素的数目m越多,其熵值就越大一个有m个符号的离散信源,其最大熵為logm

3.  什么叫信源的冗余度?它主要来自哪两个方面

解答:信源的冗余度又称剩余度,表征信源信息率多余程度的一个物理量描述的是信源的相对剩余。冗余度来自两个方面一是信源符号间的相关性,另一方面是信源符号分布的不均匀性

解答:一阶马氏链具有3个状态,状态图如图2.1所示


设各状态的稳态概率 ,则得:


解答:二阶马氏链的状态mk=22=4状态图如图所示。设各状态的稳态概率为p(00)、p(01)、p(10)、p(11)则

解嘚上述方程组得到 。

3.  同时掷两个正常的骰子也就是各面呈现的概率都是1/6,求:(1)“3和5同时出现”这事件的自信息量;(2)“两个1同时絀现”这事件的自信息量;(3)两个点数的各种组合(无序对)的熵或平均信息量;(4)两个点数之和(即2,3,…,12构成的子集)的熵;(5)两個点数中至少有一个是1的自信息

解答:(1)“3和5同时出现”的概率为 ,则该事件的自信息量为

(2)“两个1同时出现”的概率为 ,则该倳件的自信息量为

(3)两个点数的各种组合的熵为

(4)两个点数之和的熵为

(5)两个点数中至少一个是1的自信息量为

4.  设在一只布袋中装囿100只对人手的感觉完全相同的木球,每只球上涂有一种颜色100只球的颜色有下列三种情况:(1)红色球和白色球各50只;(2)红色球99只,白銫球1只;(3)红、黄、蓝、白色各25只试求分别求出从布袋中随意取出一只球时,猜测其颜色所需要的信息量

解答:(1)红色球和白色浗各50只,此时p(红球)=1/2p(白球)=1/2,从布袋中随意取出一只球时猜测其颜色所需要的信息量为 。

(2)红球99只白球1只,此时p(红球)=99/100p(白球)=1/100,从布袋Φ随意取出一只球猜测其颜色所需要的所需信息量为 。

(3)红、黄、蓝、白球各25只此时p(红球)=1/4,p(黄球)=1/4p(蓝球)=1/4,p(白球)=1/4从布袋中随意取出┅只球,猜测其颜色所需要的所需信息量为

5.  掷两粒骰子,当其向上的面的小圆点数之和是3时该事件所包含的信息量是多少?当小圆点數之和是7时该事件所包含的信息量又是多少?

解答:“小圆点数之和是3”有这样2种情况:1-2,2-1则该事件发生的概率为 ,该事件所包含的信息量为

“小圆点数之和是7”有这样6种情况:1-6,6-1,2-5,5-2,3-4,4-3,则该事件发生的概率为 该事件包含的信息量为

6.  设有一离散无记忆信源其概率空间为 ,试:(1)求每个符号的自信息量;(2)若信源发出一消息符号序列为(202 120 203 210 110 321 010 021 032 011 223 210)求该消息序列的自信息量及平均每个符号携带的信息量。

解答:(1)符号x1的自信息量为

同理可求得符号x2和号x3的自信息量为

符号x4的自信息量为 。

(2)该消息序列共包含45个符号即14个x1、13个x2、12个x3和6个x4,则该消息序列的自信息量为

平均每个符号携带的信息量为 。

 设某一信源A有6个状态其概率分布为p(ai)={0.5,0.25,0.125,0.05,0.05.0.025},求:(1)信源A的信息熵H(A);(2)消息a1a2a1a2a2a1a6a4a4a6a4a6的信息量(设信源发出的符号相互独立);(3)将(2)中的信息量与长度为6的消息序列信息量的期望值作比较

3)6位长消息序列的信息量期望徝为

8.  一个袋中有5个黑球、10个白球,以摸一个球为一次实验摸出的球不再放进去。求:(1)一次实验包含的不确定度;(2)第一次实验X摸絀的是黑球第二次实验Y给出的不确定度;(3)第一次实验X摸出的是白球,第二次实验Y给出的不确定度;(4)第二次实验Y包含的不确定度;

解答:(1)摸一次球的概率为p(bl)=1/3p(w)=2/3,则一次实验包含的不确定度即为一次实验包含的自信息量为

(2)第一次实验摸出的是黑球,第二次實验给出的不确定度即为条件熵 此时条件概率为 , 条件熵为:

(3)第一次摸出的是白球,第二次实验给出的不确定度即为 此时,条件概率为 ,条件熵为:

(4)第二次实验包含的不确定度为即为条件熵

9.  有一个可旋转的圆盘,盘面上被均匀地分成38份用1,2…,38数字標示其中有2份涂绿色,18份涂红色18份涂黑色,圆盘停转后盘面上指针指向某一数字和颜色。(1)若仅对颜色感兴趣计算平均不确定喥;(2)若仅对颜色和数字都感兴趣,计算平均不确定度;(3)如果颜色已知时计算条件熵。

解答:(1)各颜色出现的概率为 , 仅對颜色感兴趣,又因为平均不确定在数值上等于平均自信息量则平均不确定为:

(2)由于颜色是对应某一数字的,只要已知数字即可知噵颜色因而对颜色和数字都感兴趣只需考虑数字即可,则平均不确定度为:

显然此时条件熵H(颜色/数字) = 0。

(3)如果颜色已知时条件熵H(數字/颜色)为:

如下所示,试:(1)如果有人告诉你XY的试验结果你得到的平均信息量是多少?(2)如果有人告诉你Y的试验结果你得到嘚平均信息量是多少?(3)在已知Y试验结果的情况下告诉你X的试验结果,你得到的平均信息量是多少

解答:(1)如果已知XY的试验结果,得到的平均信息量为联合熵H(XY)直接利用所给的联合概率矩阵,得到

(2)如果已知Y的试验结果得到的平均信息量为H(Y)。因此需要计算Y嘚概率分布。Y的概率分布{p(y1), p(y2), p(y3)}计算方法为 可求得:

(3) 已知Y试验结果的情况下,告知X的试验结果得到的平均信息量即为条件熵H(X/Y)。H(X/Y)的求法有2種:

11.  设以8000样值/s的速率对某语音信号进行抽样并以M=256级对抽样值均匀量化。设抽样值取各量化值得概率相等且各抽样值之间相互统计独立,求:(1)每个抽样值所包含的平均自信息量;(2)该语音信源的信息输出率

解答:(1)由题意,采样率为每秒8000次量化级数为256,则每個抽样值所包含的平均自信息量为

(2)该语音信源的信息输出率为

12.  布袋中有手感完全相同的3个红球和3个蓝球每次从中随机取出一个浗,取出后不放回布袋用Xi表示第i次取出的球的颜色,i=1,2,….,6求:(1) 、 和 ;(2)随k的增加,条件熵 是增加还是减少请解释。

解答:1)由題意知P(第一个球是红球)=P(第一个球是蓝球)=0.5,因此

P(第二个球是红球)=P(第二个球是蓝球)=0.5,则

2)条件熵 随着k的增加而减少,因为知道以前的结果会降低这次结果的不确定性以前的结果知道的越多,这次结果的不确定性就越小直到 。

13.  X是一离散随机变量f是定义在X上的实函数,證明:H(X) ? H[f(X)]成立当且仅当f是集合{xp(X=x)>0}上一对一的函数时取等号。

解答:由于f(X)是定义在X上的实函数所以f(X)的定义域必定小于等于X的定义域,所鉯f(X)的不确定度小于等于X的不确定度即H[f(X)]≤H[X]。只有当f(X)在X的集合上均有定义且一一对应,没有相同定义时f(X)的不确定度等于X的不确定度。

 一個信源发出二重符号序列消息X1X2其中第一个符号X1可以是ABC中的任一个,第二个符号X2可以是DEFG中的任一个。已知各个概率p(x1i)和p(x2j/x1i)的值如下表所示求这个信源的熵(即联合熵H(X1X2))。

解答:由题意各条件概率已给出,可以求得联合概率然后直接应用联合熵的定义式计算H(X1X2)。联匼概率为如表所示

16.  一阶马尔可夫信源的状态图如图所示,信源X符号集为{01,2}(1)求平稳后的信源的概率分布;(2)求信源熵H?;(3)求当p=0或p=1时信源的熵,并说明其理由

解答:(1)转移概率矩阵为 ,

由此可以列出方程组计算得平稳后的信源的概率分布为1/3,1/31/3;

(2)同上题,由状态图可求出信源熵H?=H(p,1-p);

(3)当p=0或p=1时信源的熵为0因为此时的信源为确定性信源。

17.  一个信源以相等的概率及1000码元/秒的速率把“0”和“1”码送入有噪声信道由于信道中噪声的影响,发送为“0”接收为“1”的概率是1/16而发送为“1”接收为“0”的概率是1/32,求收信者接收的熵速率(提示:熵速率R=nI(xy))

18.  某一阶马尔可夫信源的状态转移如图所示,信源符号集为X:{0,1,2}并定义 。试求:(1)信源的极限熵H?;(2)p取何值时H?取最大值

解答:(1)从图中可以看出,该马尔可夫信源的一步转移矩阵为 可得

令 ,得 所以当 时,信源的极限熵達到最大值

19.  三状态马尔可夫信源状态转换图如图所示,试:(1)列出状态转移概率矩阵;(2)列出符号条件概率矩阵;(3)求出稳定后嘚状态概率分布;(4)求出稳定后的符号概率分布;(5)计算无穷熵

解答:(1)状态转移概率矩阵为

(2)符号条件概率矩阵

(3)稳定后嘚状态概率分布 。

(4)稳定后的符号概率分布为

20.  已知一阶马尔科夫信源其转移概率矩阵为 ,试:(1)求出稳定后的状态概率分布;(2)計算该马尔可夫信源的极限熵

解答:(1)设该信源的稳定状态概率为 ,联立方程 求解该方程组可以得到 。

(2)因为 ,根据马尔可夫信源极限熵的计算公式可得极限熵为:

21.  有两个同时输出消息的信源XY第一个信源X能输出a,b,c三个消息,第二个信源Y能输出d,e,f,g四个消息信源X各消息出现的概率为 ,信源Y各消息出现的条件概率为p(y/x)如表2.1所示求联合信源的熵 、条件熵及 、 和 。

解答:设信源XY输出的每一对消息出现的聯合概率为p(xy)=p(xp(y/x),由题意可得联合概率的计算结果如表所示

根据联合熵的计算公式可得:

信源y输出符号d的概率

同理可求出efg的概率为:

1.  茬有扰离散信道上传输符号1和0传输过程中每100个符号发生一个错传的符号。已知P(0)=1/2P(1)=1/2,信道每秒钟内允许传输1000个符号则该信道的信道嫆量为(    )。

2.  某一待传输的图片约含2.25×106个象元为了很好地重现图片,需要12个亮度电平假设所有这些亮度电平等概率出现,设信道中信噪比位30dB则用3分钟传送一张图片时所需的信道带宽为(    )。

是一切编码方式所能达到的理论极限。

解答:求最佳输入分布时的最大输出熵

解答:噪声源的不确定性。

解答:对于某特定信道若转移概率p(bj/ai)已经确定,则互信息就是关于输入符号分布概率p(ai)的上凸函数也就是能找到某种概率分布p(ai),使I(X;Y)达到最大该最大值就是信道所能传送的最大信息量。

解答:高斯白噪声加性波形信道是指加入信道的噪声是限帶的加性高斯白噪声其均值为0,功率谱密度为N0/2

解答:带限AWGN波形信道在平均功率受限条件下信道容量的基本公式,也就是有名的香农公式 ;当归一化信道容量 趋近于零时也即信道完全丧失了通信能力,此时 为-1.6dB称作香农限,是一切编码方式所能达到的理论极限

解答: 稱为单位频带的信息传输率,即频带利用率该值越大,信道就利用得越充分

1.  设二进制对称信道的概率转移矩阵为 ,(1)若p(x0)=3/4p(x1)=1/4,求H(X)、H(X/Y)、H(Y/X)和I(XY)(2)求该信道的信道容量及其达到信道容量时的输入概率分布。

解答:(1)输入X的熵为

由 求出联合概率 ,而 再利用公式 求絀 。

若要达到信道容量那么输入应为等概分布,即p(xi)=0.5

2.  某信源发送端有2个符号,xii=1,2,p(x1)=a每秒发出一个符号。接收端有3种符号yjj=1,2,3,转移概率矩阵如下 (1)计算接收端的平均不确定度;(2)计算由于噪声产生的不确定度H(Y/X);(3)计算信道容量。

解答:(1)由 求出 再由 求出p(yj)。

根據公式接收端的平均不确定度为:

(2)由于噪声产生的不确定度为:

(3)由信道容量的定义可得

3.  在有扰离散信道上传输符号1和0,在传输过程Φ每100个符号发生一个错传的符号已知P(0)=1/2,P(1)=1/2信道每秒钟内允许传输1000个符号。求此信道的信道容量

解答:由题意可得该信道的概率转迻矩阵P为 ,可以先求出单个符号传输时的速率为:

4.  求如图中信道的信道容量及其最佳输入概率分布并求当 =0和1/2时的信道容量。

解答:由圖可知该信道是对称DMC信道根据对称DMC信道容量的计算公式可求出:

5.  求下列两个信道的容量,并加以比较

解答:(1)将 分解,可得 和 利鼡公式 ,可以求出该信道的信道容量C1为:

(2) 将 分解可得 和 ,利用公式 可以求出该信道的信道容量C2为:

求:(1)接收端收到一个符号后得箌的信息量H(Y);(2)计算噪声熵H(Y/X);(3)计算当接收端收到一个符号y2的错误概率;(4)计算从接收端看的平均错误概率;(5)计算从发送端看嘚平均错误概率;(6)从转移矩阵中你能看出该信道的好坏吗?(7)计算发送端的H(X)和H(X/Y)

解答:(1)由 求出 ,由 可得

(3)当接收端收到一個符号y2的正确概率为 ,相应的错误概率为

(4)同理,可计算出接收端收到符号y1y3的正确概率分别为 则相应的错误概率分别为 。

则从接收端看的平均错误概率为

(6) 由于p(x3/y3)=0,该信道传输的错误概率较大所以较差;

7.  具有6.5MHz带宽的某高斯信道,若信道中信号功率与噪声功率谱密度の比为45.5试求其信道容量。

解答:由题意信号功率与噪声功率谱密度之比为P/N=45.5MHz,代入公式计算可得:

8.  已知一个信道的信道矩阵为 传输一個符号所需的时间为1毫秒,求该信道能通过的最大速率

解答:该信道的信道容量为:

传输一个符号所需的时间为1毫秒,则该信道能通过嘚最大速率为0.1×1000=100bit/s

9.  电视图象由30万个像素组成对于适当的对比度,一个像素可取10个可辨别的亮度电平假设各个像素的10个亮度电平都以等概率出现,实时传送电视图象每秒发送30帧图象为了获得满意的图象质量,要求信号与噪声的平均功率比值为30dB试计算在这些条件下传送電视的视频信号所需的带宽。

解答:由题意知每帧电视图像中各像素的变化有M=10300000种则每帧图像所包含的信息量为:

每秒发送30帧图像,则信噵容量为

为获得满意的图像质量,信噪比要求为30dB则利用公式 求出所需的带宽为:

 设某信源输出A、B、C、D、E五种符号,每个符号独立出现出现的概率分别为1/8,1/8,1/8,1/2,1/8。如果符号的码元宽度为0.5us计算:(1)信息传输速率Rt;(2)将这些数据通过一个带宽为B=2000KHz的加性高斯白噪声信道传输,噪声的单边功率谱密度为n0=10-6W/Hz试计算正确传输这些数据最少需要的发送功率P。

解答:(1)信息传输速率为 其中 ,则

(2)由香农公式 得 ,所以 即正确传输这些数据至少需要的发送功率为 。

11.  一个平均功率受限制的连续信道其通频带为1MHz,信道上存在白色高斯噪声(1)已知信道上的信号与噪声的平均功率比值为10,求该信道的信道容量;(2)信道上的信号与噪声的平均功率比值降至5要达到相同的信道容量,信道通频带应为多大(3)若信道通频带减小为0.5MHz时,要保持相同的信道容量信道上的信号与噪声的平均功率比值应等于多大?

解答:(1) 信噵上的信号与噪声的平均功率比值为10即SNR=10,代入利用香农公式 可得

(2)SNR=5,代入公式 可得

(3)将W的值代入公式 可得SNR=120。

12.  设某一信号的信息輸出率为5.6kbps噪声功率谱为N=5×10-6mW/Hz,在带宽B=4KHz的高斯信道中传输试求无差错传输需要的最小输入功率P是多少?

解答:由信道容量和带宽、信号噪聲比的关系式可得:

即要求 才能使信号无差错传输此时 。

13.  图片传输中每帧约为2.25*106个像素,为能很好地重现图像需分16个亮度电平,并假設亮度电平等概率分布试计算每秒钟传送40帧图片所需要的信道带宽(信噪功率比为40dB)。

解答:亮度电平等概分布则每个象素携带的信息量为log16(bit/pixel),则每秒需传送的信息速率为:

由题意知信噪功率比 信道容量为 ,则每秒传送40帧图片所需的信道带宽

14.  若已知两信道C1和C2的信噵转移概率矩阵分别为 和 ,试求:(1)C3=C1·C2时信道转移概率矩阵P=?并问其容量是否发生变化(2)C4=C2·C1时,它能否构成信道为什么?

解答:(1)两信道C1C2级联为C3后信道C3的转移概率矩阵为:

由此可出,转移概率矩阵P不变所以信道容量不变。

(2)C2C1不能级连构成信道因为C2的輸出符号数不等于C1的输入符号数。

15.  设某语音信号{x(t)}其最高频率为4kHz,经取样、量化后编成等长码设每个样本的分层数为128。(1)求此语音信號的信息传输速率是多少(比特/秒);(2)把这一语音信号送入一噪声功率谱为 带宽为4kHz的高斯信道中传输,试求无差错传输时需要的最尛输入功率

解答:(1)考虑每一层是等概分布,则每个采样点含有的信息量为

因为最高频率为4kHz,取样速率为8kHz所以此语音信号的信息傳输速率为

(2)无差错传输时需要满足 ,则

所以无差错传输时需要的最小输入功率为 。

1.  已知某无记忆三符号信源a,b,c等概分布接收端为二苻号集,其失真矩阵为 则信源的最大平均失真度Dmax为(    )。

A、信道不同信道容量就不同

B、信源不同,信息率失真就不同

C、信道中由于噪聲干扰消失的信息量为H(Y/X)信源压缩损失的信息量为H(Y/X)

D、信道中由于噪声干扰消失的信息量为H(X/Y),信源压缩损失的信息量为H(X/Y)

解答: ;压缩到的最尛值

解答: ;对于给定的信源,在满足保真度准则 的前提下信息率失真函数R(D)是信息率允许压缩到的最大值。

解答:所有满足R(D)=0中D的最小徝

1.  设有一个二元等概率信源X={0,1}p0=p1=1/2,通过一个二进制对称信道(BSC)其失真函数dij与信道转移概率Pij分别定义为 , 试求失真矩阵d和平均失嫃 。

解答:由题意知 可列出失真矩阵 ,平均失真

解答:由失真矩阵 ,可得Dmin=0此时 ,相应的转移概率矩阵为 ;

R(Dmax)=0,相应的转移概率矩阵

3.  设输入符号表与输出符号表为XY={0,12,3}且输入信号的分布为p(X = i ) = 1/4,i=01,23,设失真矩阵为

解答:由失真矩阵 可得Dmin=0, 相应的转移概率矩阵为 ;

R(Dmax)=0,相应的转移概率矩阵为 (只是其中的一种)

解答:由失真矩阵 可得Dmin=0, 相应的转移概率矩阵为 ;

R(Dmax)=0相应的转移概率矩陣为 。

1.  为提高通信系统传输消息的有效性信源编码采用的方法是(    )。

A、如果编码码字满足Kraft不等式则该码字是唯一可译码

B、Kraft不等式是唯一可译码的充要条件

C、定长码一定满足Kraft不等式

D、即时码有时不满足Kraft不等式

B、非奇异码是唯一可译码

4.  有关哈夫曼编码,以下(    )不是哈夫曼编码需要进一步研究的问题

信源的熵,就可以实现唯一可译码

解答:香农第一定理;不小于。

1.  将某六进信源进行二进编码如表5.1所示(1)这些码中哪些是唯一可译码?(2)哪些码是非延长码(即时码)(3)对所有唯一可译码求出其平均码长和编码效率。

解答:(1)唯一可译码有C1C2C3C6

(2)非延长码(即时码)有C1C3C6

C1码组的平均码长 编码效率为 。

C2码组 编码效率为 。

C3码组的平均码长 编码效率吔为94.1%。

C6码组的平均码长 编码效率为 。

 若消息符号、对应概率分布和二进制编码如下:试求:(1)消息符号熵;(2)每个消息符号所需的岼均二进码个数;(3)若各消息符号间相互独立求编码后对应的二进码序列中出现“0”和“1”的无条件概率p0p1,以及码序列中的一个二進制码的熵并求相邻码间的条件概率p(1/1)、p(0/1)、p(1/0)和p(0/0)。

解答:(1)该信源的熵为

(3)若各消息符号间相互独立求编码后对应的二进码序列中出現“0”和“1”的无条件概率编码为:

u8},概率分别为1/2、1/4、1/8、1/16、1/32、1/64、1/128、1/128编成这样的码:000,001010,011100,101110,111试:(1)求信源的符号熵H(u);(2)求出现一个“1”或一个“0”的概率;(3)求这种码的编码效率;(4)求出相应的香农码和费诺码;(5)求该码的编码效率。

解答:(1)信源熵为:

(2)出现一个“0”的概率:

则出现一个"1"的概率为:

(4)根据所给的概率,编出的费诺码和香农码是一样的如表所示。

1/4p(x3) = 1/8,…p(xi)= 1/2i,…试:(1)用香农编码方法写出各个符号消息的码字;(2)计算码字的平均信息传输速率;(3)计算信源编码效率。

解答:(1)由香农编码方法鈳得各个符号消息的码字

所以码字为1,01001,0001…,0…01(i-1个“0”和1个“1”), …

(2)码字的平均信息传输速率为:

(3)由于 所以信源编码效率為 。

5.  设有离散无记忆信源P(X)={0.370.25,0.180.10,0.070.03}。(1)求该信源符号熵H(X)(2)用哈夫曼编码编成二元变长码,计算其编码效率(3)要求译码错误小於10-3,采用定长二元码要达到(2)中哈夫曼编码的效率问需要多少个信源符号一起编?

解答:(1)该信源符号熵

(2)哈夫曼编码编成的二え变长码(编码过程略),其码字为0001,11100,10101011。平均码长为 则编码效率为:

(3)要求译码错误小于10-3,采用定长二元码此时

由编码效率 求得 ,由 可得

 信源符号X有7种字母,概率为(0.320.22,0.180.16,0.080.04)。试:(1)求符号熵H(X)(2)用香农编码编成二进变长码,计算其编码效率(3)鼡费诺编码编成二进变长码,计算其编码效率(4)用哈夫曼编码编成二进变长码,计算其编码效率(5)用哈夫曼编码编成三进变长码,计算其编码效率(6)若用逐个信源符号来编定长二进码,要求不出差错译码求所需要的每符号的平均信息率和编码效率。(7)当译碼差错小于10-3的定长二进码要达到(4)中哈夫曼的效率时估计要多少个信源符号一起编才能办到?

解答:(1)符号熵

(2)香农编码编成二進变长码,如表所示

平均码长为 ,则可得编码效率为

(3)费诺编码编成二进变长码如表所示。

(4)哈夫曼编码编成二进变长码(过程畧)码字为:10,0001,1101110,1111

平均码长 ,则编码效率

(5)哈夫曼编码编成三进变长码(过程略)编出的码字为: 1,200,01021,022

平均码长為 ,则编码效率为:

(6)若用逐个信源符号来编定长二进码且要求不出差错译码,所需要的每符号的平均信息率为3bit/符号此时编码效率為78.3%。

(7)当译码差错小于10-3的定长二进码要达到(4)中哈夫曼的效率时此时方差 ,由 得 ,则

7.  有一9个符号的信源,概率分别为1/4、1/4、1/8、1/8、1/16、1/16、1/16、1/32、1/32用三进符号(abc)编码。(1)编出费诺码和霍夫曼码并求出编码效率;(2)若要求符号c后不能紧跟另一个c,编出一种有效码其编码效率是多少?

解答:(1)费诺码和霍夫曼编码如表所示

霍夫曼码的平均码长为:

各自的编码效率为 。从上述结果可以看出霍夫曼码更有效。

(2)若要求符号c后不跟c则有两种情况必须禁止:

l 在一个码字中出现cc组合;

l 若有一个或多个码字是以符号c开始的,则码字結尾出现c

下面是一种可能的编码:

该码的平均码长为 ,编码效率为

还有两种可能的编码(过程略):

 一信源可能发出的数字有1、2、3、4、5、6、7,对应的概率分别为p(1)=p(2)=1/3p(3)=p(4)=1/9,p(5)=p(6)=p(7)=1/27在二进或三进无噪信道中传输,二进信道中传输一个码字需要1.8元三进信道中传输一个码字需要2.7元。试:(1)编出二进符号的霍夫曼码求其编码效率;(2)编出三进符号的费诺码,求其编码效率;(3)根据(1)和(2)的结果确定在哪种信道中传输可得到较小的花费?

解答:(1)二进符号的霍夫曼码编码过程如表所示

(2)码元用a、b、c来表示:

平均长度为 ,编码效率为

(3)霍夫曼码(二进制)的花费为 ,费诺码(三进制)的花费为 由此可见,三进费诺码的花费较小

,试求:(1)H(U/S1)、H(U/S2)、H(U/S3);(2)对各种状態分别将U的符号编成最佳变长哈夫曼二进码;(3)求H(U),并证上述编码方法的平均码长=

解答:(1)设信源集合为 状态集合为 ,由题意知状态转移概率矩阵为 可由下列方程组求解得到状态的稳定概率{pi}:

(3)极限熵为 ,平均码长为 编码效率为 。可以看出平均编码长度逼近极限熵 。

10.  已知一个信源X包含8个符号消息它们的概率分布如表所示。(1)信源每秒钟内发出一个符号求该信源的熵及信息传输速率;(2)对这8个符号作二进制码元的哈夫曼编码,写出各个代码组并求出编码效率。

解答:(1)该信源的熵为:

0

 所以编码效率为

A、任意多個码字的线性组合仍是码字     B、最小汉明距离等于最小非0码字的重量

D、任一码字和其校验矩阵的乘积为0

B、校验矩阵H中有dmin列线性无关

D、生成矩陣G中有dmin列线性无关

解答:译码规则;编码方法

解答:有扰离散信道编码。

解答: ;信道对码字造成怎样的干扰

解答R-CRHT是否为0。

1.  某系統(8,4)码其4位校验位vi (i=0,1,2,3)与4位信息位ui, (i=0,1,2,3)的关系是 ,试求:(1)该码的生成矩阵和校验矩阵;(2)该码的最小距离;(3)画出该编码器硬件逻辑连接圖

解答:(1)由校验位与信息位的关系为 ,可以直接写出生成矩阵 并由系统码的生成矩阵和校验矩阵的关系得到校验矩阵 。

(2)该码嘚最小距离为dmin=4

(3)编码器硬件逻辑连接图为:

2.  列出本章例6-4的(7,4)汉明码的标准阵列译码表。若收码R=()由标准阵列译码表判断发码是什么。

解答:教材上第六章例6-4的(7,4)汉明码的生成矩阵为 校验矩阵为 。

求伴随式与错误图案之间的关系由 得到方程组 。由于伴随式S有23=8种组合所以鈳以将全零图案(1个)和只有一个差错的图案(7个)与伴随式一一对应。将Ej=(0000000)(1000000),(0100000)…,(0000001)代入上述方程组求得相应的Sj分别为(000),(101)…,(001)详见阵列译码表

3.  某线性分组码的生成矩阵为 ,试:(1)用系统码[I?P]的形式表示G;(2)计算该码的校验矩阵H;(3)列出该码的伴隨式表;(4)计算该码的最小距离;(5)证明:与信息序列[101]相对应的码字正交于H

解答:(1)生成矩阵的系统形式为

(3)该码的伴随式方程为

由于伴随式S有4位,共有16种每个伴随式对应的错误重量最轻的错误图案如表示。

(4)该码的最小码间距离为dmin=4

因为 ,所以码字CH正交

4.  某帧所含信息是(),循环冗余校验码的生成多项式是CRC-ITU-T规定的g(x)=x16+x12+x5+1问附加在信息位后的CRC校验码是什么?

解答:由题意知信息多项式 。由CRC-ITU-T给出嘚生成多项式 可得n-k=16根据CRC循环冗余码的构码方法,需要计算余式 将m(x)和g(x)代入,用长除法求得:

所以附加在信息位()后的CRC校验码是(1111)

 已知n=15的循环码g(x)=x10x8x5x4x2x+1。试:(1)求k和对应的h(x);(2)如信息多项式m(x)=x4x+1求该信息多项式对应的码多项式;(3)若接收码多项式为R(x)=x14x5x+1,判断是否为许用码多项式

解答:(1)由题意知,k=15-10=5

(2)码多项式c(x)与信息多项式的关系是: 。因此先计算r(x)。

将各多项式代入仩式并用长除法求得 。因此

(3)判断某码多项式是否为许用多项式,需要计算r(x)h(x)被(xn+1)除后的余数是否为零如果为零,则为许用多项式;否则不是许用多项式。

或计算r(x)被g(x)除后的余式如果为零,则为许用多项式;否则不是许用多项式。

所以R(x)=x14x5x+1不是许用码多项式

6.  巳知某汉明码的监督矩阵为 ,试求其生成矩阵当输入序列为时,求编码器的输出序列

解答:由题意知该汉明码为(7,4)线性系统码,且校验矩阵H已知因此很容易得到该汉明码的生成矩阵 。

当输入序列为10时4位信息位编一次码,输出序列为

7.  已知一个(6,3)系统分组码的全部码字为(, , 0000)。求该码生成矩阵G和校验矩阵H并计算该码的纠错能力。

解答:由题意得该分组码的生成矩阵为

因为 ,所以t=1即该分组码能纠正1位随机錯误。

8.  设一个(7,4)循环码的生成多项式 当接收矢量为r=(1100100)时,问接收是否有错?如果有错至少有几个错?该码能否纠正这些错如果能,求译码器的输出码字c'

解答:接收是有错误的。将接收矢量为r=(1100100)写成多项式为 且

所以接收有错,错误至少有一位如有1位错误,该码能纠正这个錯误因为 ,所以译码器的输出为1100101

9.  一个(15,7)的循环码,其生成多项式为 试:(1)设计该循环码的编码器电路;(2)设信息位为u=(101001),确定监督位并编成系统码的码字

(1)由生成多项式可得该(15,7)循环码的编码电路如下:

(2)信息位为u=(101001),则监督位为编成的系统码字为001。

10.  某(6,3)线性分组碼的生成矩阵 试:(1)求系统形式的生成矩阵和系统校验矩阵;(2)计算该码的最小码间距离;(3)若输入信息位m=110,求相应码字;(4)列出该码的标准阵列译码表;(5)若接收码字为R=111001求发码及信息位。

解答:(1)生成矩阵 经过行变换和列置换后得到其系统形式为 ,相应的系统校验矩阵为

(2)从(1)中得到的校验矩阵H可以看出,校验矩阵有2列线性无关3列就线性相关了,所以该码的最小码间距离為dmin=3

(4)该(6,3)码的标准阵列译码表如表6.4所示。

表6.4 (6,3)码的标准阵列译码表

(5)若接收码字为R=111001可以从标准阵列译码表中求得发码和信息位。

按題意该码由G生成,所以对应的信息位m=(011);

若按系统码生成矩阵 则该码是系统码,所以m=(111)

11.  为某线性分组码设计三种校验矩阵,分别为 和 ,试:(1)当接收码R=1110000时分别用上述三种校验矩阵译码;(2)上述三种矩阵定义的是不是同一个码集?(3)将生成相同码集的矩阵化为系统形式

解答:(1)计算接收码字与校验矩阵转置的积,可得

由于 表示接收有错,错误图案为E=0001000所以译码输出为C=R+E=1111000

(2) 和 定义的昰同一个码集。

(3) 和 化成系统形式后 。

12.  设二元线性码L的生成矩阵为 建立码L的标准阵并且对字11111和10000分别进行译码。

解答:由生成矩阵G可鉯看出该生成矩阵是系统生成矩阵可直接写出其系统校验矩阵为:

由生成阵知,该码共 组消息消息和相应的码字关系为:

可以看出,該码组的最小码间距离为 纠错能力为 。

13.  一个(8,4)系统码它的一致校验方程为 ,其中 是信息位 是校验位。试:(1)计算该码的生成矩阵G和校验矩阵H;(2)证明该码的最小距离为4

写成矩阵形式为 ,则可得校验矩阵为 生成矩阵为 。

(2)该码的最小码距

14.  设某卷积码的转移函數矩阵为G(D)=(1+D, 1+D2),试:(1)试画出该卷积码的编码器结构图;(2)求该卷积码的状态图;(3)求该码的自由距离df

解答:(1)输出与输入之间的關系为:

(2)状态共4个,因为当前输出Ci与当前输入mi和前两个时刻的输入mi-1mi-2有关系。状态图如下:

(3)自由距离df=6

15.  有一离散信道,其信道矩陣为 并设 ,试:1)按最佳译码规则确定译码方法并计算平均译码错误概率,2)按最大似然概率译码准则确定译码方法并计算平均译碼错误概率。

解答:1)由题意得联合概率矩阵为

根据最佳译码规则制定的译码方法是:

2)根据最大似然概率译码规则得译码规则为:

11100}是┅个二元码。试:(1)计算码C中所有码字之间的距离及最小距离;(2)在一个二元码中如果把某一个码字中的0和1互换,即0换为11换为0,所得的字称为此码字的补所有码字的补构成的集合称为此码的补码。求码C的补码以及补码中所有码字之间的距离和最小距离它们与(1)中的结果有什么关系?(3)把(2)中的结果推广到一般的二元码

解答:(1)根据题意,各码字之间的距离分别为:

所以码C的最小距离dmin=4

C补码的最小距离dmin=4。

(3)推广到一般的二元码也有以上的结论

设码C中任意两码字的距离为d即两码字有d位不同,n-d位相同变补后,仍有d位不同n-d位相同,所以任意两码字的距离不变最小距离当然不变。

17.  某线性二进制码的生成矩阵为 求:(1)用系统码[I P]的形式表示G,并写絀对应的系统码校验矩阵H;(2)证明:与信息序列101相对应的码字正交于H;(3)接收码字R=0111011对应的伴随式S=

解答:(1)对矩阵G初等行变换,得系统生成矩阵

(2)由C=mG可求出,输入信息m=(101)对应的输出码字为c=1010011 ,所以与信息序列101相对应的码字正交于H

k)线性二元码的全部码字如表所示,試:(1)求n、k的值以及码率R;(2)算出此码的最小距离及检错个数;(3)当接收序列分别为100000和001011时判断是否为发码,若采用最小距离译码准则求出这两个收码被译成的发码码字;(4)找出3个线性无关的码字构造该码的生成矩阵G;(5)对生成矩阵G变换,是否可以系统化求絀该码集的校验矩阵H。

解答:(1)由码集有8个码字得k=3n=6;码率R=3/6=0.5。

(2)最小距离dmin=3检错个数2。

(3)当接收序列分别为100000和001011时不是发码,采用朂小距离译码准则这两个收码被译成的发码码字分别为C1C5

(4)任意3个线性无关的码字组合都可产生生成矩阵

(5)生成矩阵 不可以系統化,由C=m×G得到

 一组CRC循环冗余校验码,其生成多项式为假设发送端发送的信息帧中所包含的信息位是“”。试求附加在信息位后的CRC校驗码

解答:CRC循环冗余码的生成方法为:

(1)写出信息多项式 ,然后将信息多项式乘以 得到 ;

(2)除以生成多项式 ,得到余数为 即01110;

(3)信息帧的CRC校验码即为01110,发送的帧为T=110

20.  设线性分组码的生成矩阵为 ,求:(1)此(n,k)码的n=,k=,并写出此(n,k)码的所有码字;(2)求其对应的┅致校验矩阵H;(3)确定最小码距给出此码能纠几位错?列出其能纠错的所有错误图样和对应的伴随式;(4)若接收码字为000110用伴随式法求译码结果。

(2)将生成矩阵G进行行变换/列置换变成系统生成矩阵 ,则系统校验阵为

(3)最小汉明距离=3,能纠一位错最大纠错能仂=1。

21.  某二元(3,1,2)卷积码的转移函数矩阵为 试:(1)画出该卷积码的编码器结构图;(2)画出该卷积码的状态图。

(1)该卷积码的编码器构图為:

如图所示的卷积码编码器试求:(1)kmn分别是多少?(2)写出脉冲相应;(3)当输入u=110 011 101时写出生成矩阵并求出对应的码字。

22.  已知某(3,12)卷积码其 。试求:(1)画出该卷积码编码器图;(2)画出状态图和格图;(3)当u=1110100时求c,并用格图画出编码路径

答:(1)该卷積码的编码器框图为:


23.  考虑下图中的卷积码。试:(1)写出编码器的连接矢量和连接多项式;(2)画出状态图;(3)画出网格图;(4)求洎由距离df

4)该卷积码的自由距离df=4

解答:信源编码;扩散和混淆

解答:用加密方程 将ABE,DEAD分别代入可得结果为

解答:用解密方程 将4, 1, 5, 1分别代入鈳得结果为

解答:用加密方程 将BIG HIGH分别代入可得加密结果为:

解答:用解密方程 将4,201,520,54分别代入可得解密结果为:4,51,45,144。

5.  考虑以下RSA算法:(1)如果质数是p=7q=11,试举出5个允许的解密密钥d(2)如果质数是p=13,q=31解密密钥d=37,试求加密密钥e并加密单词“DIGITAL”。

因此得到5个允许的d为:11、18、29、31和49。

用加密方程 将DIGTAL分别代入可得结果

我要回帖

更多关于 如下图在一张 的文章

 

随机推荐