请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

猿媛之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
猿媛之家 勘误 查看内容

Python算法宝典勘误

2019-6-20 23:00| 发布者: admin| 查看: 191| 评论: 0

摘要: 以下勘误信息以及在最新一次印刷中勘误过了,如果图书中没有这些错误,请忽略这些勘误内容1.1节(1)方法二的Reserve方法中第一行代码”if head == None or head.next == None“修改为”if head == None or head.nex ...
以下勘误信息以及在最新一次印刷中勘误过了,如果图书中没有这些错误,请忽略这些勘误内容
1.1节
(1)方法二的Reserve方法中第一行代码”if  head == None or head.next == None“修改为”if  head == None or head.next == None or  head.next.next == None:“
(2)方法三的第三行中“后序”修改为“后序”

1.4节
Reorder方法中”if  head == None or head.next == None“修改为”if  head == None or head.next == None or  head.next.next == None:“

1.8节
Reserve方法中倒数第三行代码cur=cur.next可以删除

2.2节
方法二deQueue方法
if  self.pHead == None:
print  "出队列失败,队列已经为空"
修改为:
if  self.pHead == None:
print  "出队列失败,队列已经为空"
return
2.5节
push方法中  if  data < self.minStack.peek():修改为:“   if  data <= self.minStack.peek():”

3.1节
例题2中的
“具有n个结点的完全二叉树的深度为 +1,因此,含有61个结点的完全二叉树的高度为 log2n+1,即应该为6层。所以,答案为6。”
修改为:
“具有n个结点的完全二叉树的深度为 +1,因此,含有61个结点的完全二叉树的高度为 log261+1,即应该为6层。所以,答案为6。”


3.8节
方法二的图中最后一层结点的编号,原图中结点的编号依次为:8,9,10,修改为8,10,12

4.3节
下面代码中的getMin修改为:getMin_1
elif  arr[high] >arr[mid]:
return  getMin(arr, low, mid - 1)
# 最小值一定在数组右半部分
elif  arr[mid]>arr[low]:
return  getMin(arr, mid + 1, high)
# arr[low] == arr[mid] && arr[high] == arr[mid]
# 这种情况下无法确定最小值所在的位置,需要在左右两部分分别进行查找
else:
return  min(getMin(arr, low, mid - 1), getMin(arr, mid + 1, high))

4.6节
引申部分代码
elif  arr[i] > r3  and arr[i] != r2:
r3 = arr[i]
修改为:
elif  arr[i] > r3  and arr[i] < r2:
r3 = arr[i]

5.10节

(1)方法一:如果Si+1 = = Sj+1 :那么P(i+1, j+1)=P(i, j)。修改为:如果Si== Sj:则P(i,j)=P(i+1,j-1)

(2)方法三:

根据以上四种情况可以得出结论:P[i] >= MIN(P[2 * id - i], P[id]-i)。在计算的时候可以先求出P[i] = MIN(P[2 * id - i], P[id]-i),然后在此基础上向两边继续扩展寻找最长的回文子串,根据这个思路的实现代码如下:
修改为:
根据以上四种情况可以得出结论:P[i] >= MIN(P[2 * id - i], P[id]+id-i)。在计算的时候可以先求出P[i] = MIN(P[2 * id - i], P[id]+id-i),然后在此基础上向两边继续扩展寻找最长的回文子串,根据这个思路的实现代码如下:

6.3节
(1)引申三“(3)执行加法操作sum+=a < i;”修改为“(3)执行加法操作sum+=a << i;”
代码:

while  i<32:

    bit_position[1 << i]=i

    i +=1    #这行是新增加的

(2)引申四的代码修改为:

def  divid(a,b):

    neg = (a > 0) ^ (b > 0) #结果是否为负数

               #首先计算它们绝对值的除法

    if a<0:

       a = -a

    if b < 0:

       b = -b

    tmpMulti = 0

    result = 1

    while True:

        tmpMulti = multi(b,result)

        if tmpMulti<=a:

            result +=1 

        else:

            break 

    if  neg:

        return add(~(result-1), 1)

    else:

        return result -1


6.8节
方法二的代码修改为:
def  searth(n):
    a=[0,2,3,4,5,6,8,9,10,12,14,15,16,18,20,21,22,24,25,26,27,28]
    ret=int(n/22)*30+a[n%22]
    return  ret

8.4节

空间复杂度为O(1 )。修改为:空间复杂度为O(n)。


鲜花

握手

雷人

路过

鸡蛋

QQ|Archiver|手机版|小黑屋|猿媛之家    

GMT+8, 2019-10-16 23:28 , Processed in 0.141231 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部