算法导论有趣题——4-2,6-3

原创 2016年03月05日 09:57:01

4-2:

题目描述:

某数组A[1,2,...n]含有所有从0到n的证书,但其中一个整数不在数组中。通过辅助数组B[0,...n]来记录A中出现的整数

(1)在O(n)时间找到缺失整数

(2)若数组中每个数值是二进制的,不能直接对每个数取出其数值,则如何找到缺失



解答:
(1)遍历数组A,将每个出现的值存储在B中下标对应值,之后遍历一次B即可

eg:

for val in A:
    B[val] = 1

for i in range(len(B)):
    if B[i] == 0:
        return i

(2)使用异或操作来处理。1^0 = 0,1^1 = 0,0^0 = 0,既:两个相等的数异或结果为0,而0与任何数异或得该数本身。因此,将A中的值与0~n异或,得到的结果就是缺失的整数。


6-3:

题目描述:Young 氏矩阵:从左到右递增,从上到下递增。

(1)插入一个新元素的算法及复杂度

(2)对n*n个数使用young氏矩阵排序的复杂度为O(n^3)

(3)在m*n矩阵中找到一个给定数,复杂度O(m + n)


解答:

(1)在矩阵右下角插入新元素。若新元素大于上方与前方的元素,则插入成功。否则, 将新元素往小的方向比较交换过去。最坏情况的复杂度为:走到了左上角O(n+m)

void insert(vec,i,j)
{
    //此处仅提供参考思想,不具体涉及边缘控制
    curr = vec[i][j];
    left = vec[i][j-1];
    up = vec[i-1][j];
    if(curr >= left && curr >= up)
        return;  //找到合适位置
    else if(curr < left)
        insert(v,i,j-1)
    else
        insert(v,i-1,j)
}

2)对 n * n 个元素使用Young矩阵,每个元素插入该矩阵的复杂度是O(n+n),则,总的复杂度为O(2n*n*n) = O(n^3)。对一个Y矩阵,左上角为最小值,最左一列递增,最顶一行递增,则使用合并排序中的摸牌式合并方法,O(m+n)的复杂度就可以排序好第一列与第一行。同样的方法。遍历整个矩阵一次,就可以完成排序


(3) 从左下角起寻找元素。若当前值小于需要值,则往右;若当前值大于需要值,则往上。复杂度为O(m + n)


算法导论思考题6-3:Young氏矩阵

Young氏矩阵,每一行的数据从左到右递增序,从上到下递增序。
  • sinat_16709955
  • sinat_16709955
  • 2017年07月31日 23:47
  • 98

算法导论第三版习题6.3

6.3-1(a) A.length=9A.length=9,故从i=⌊A.length/2⌋=4i=\lfloor A.length/2\rfloor=4开始调用MAX-HEAPIFY(A,i),A[...
  • obguy
  • obguy
  • 2016年02月27日 10:30
  • 477

Java有趣逻辑编程题

题目:有一根27厘米的细木杆,在第3厘米、7厘米、11厘米、17厘米、23厘米这五个位置上各有一只蚂蚁。          木杆很细,不能同时通过一只蚂蚁。          开始时,蚂蚁的头朝左...
  • s373492212
  • s373492212
  • 2017年07月18日 14:45
  • 1003

2016腾讯实习生笔试编程题:有趣的数字

小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢? 输入描述: 输入包含多组测试数据。 对于每组测试数据: N - 本组测试数据有n个数 a1,a2...a...
  • u011086367
  • u011086367
  • 2016年10月21日 10:49
  • 795

算法导论 4-2

1 题目 找出所缺的整数 某数组A[1..n]含有所有从0到n的整数,但其中有一个整数不再数组中。通过利用一个辅助数组B[0..n]来记录A中出现的整数,很容易在O(n)时间内找出所缺的整数。但是在...
  • u010352083
  • u010352083
  • 2013年09月10日 12:24
  • 1144

做java面试题的过程中遇见比较有趣的题

1.关于继承 public class Dervied extends Base { private String name = "dervied"; public Dervied...
  • qq_35561554
  • qq_35561554
  • 2016年09月26日 22:12
  • 823

java有趣的经典题目

l    JBS 1.列举出 10个JAVA语言的优势 a:免费,开源,跨平台(平台独立性),简单易用,功能完善,面向对象,健壮性,多线程,结构中立,企业应用的成熟平台, 无线应用 2.列举出JAVA...
  • cfhacker007
  • cfhacker007
  • 2009年12月16日 13:34
  • 2049

互联网面试题之趣味数学题

1         有1000桶酒,其中一桶有毒。而一旦吃了,毒性会在一周内发生。现在我们用小老鼠做实验,要在1周内找出那桶毒酒,问最少需要多少老鼠? 思路 10只老鼠按顺序排好每桶酒按照编号转换...
  • dongtao1010
  • dongtao1010
  • 2015年10月26日 10:50
  • 701

《算法导论》习题解答 Chapter 22.1-7(关联矩阵的性质)

主对角线:出度+入度 其他:arr[i][j]=-n,则i与j之间有n条边. 证明: (原文点此,索引目录。感谢xiazdong君 && Google酱。这里是偶...
  • hcbbt
  • hcbbt
  • 2013年07月17日 00:55
  • 1965

算法导论有趣题——第二章集合

题目: 有两个各存放在数组A和数组B中的n位二进制整数,考虑其相加问题。将所得结果以二进制形式存放在数组C中,C的维数为[n+1]。写出伪代码 解决: func(A,B,C): carry_...
  • Virtual_Func
  • Virtual_Func
  • 2016年03月04日 09:51
  • 364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论有趣题——4-2,6-3
举报原因:
原因补充:

(最多只允许输入30个字)