<算法导论>第六章思考

本文探讨了堆排序算法的实现,包括建立最大堆和堆提取最大值的过程。同时,介绍了多叉树的相关概念,如节点的父节点和孩子节点下标计算,以及一棵包含n个节点的d叉树的高度。此外,还详细阐述了d叉堆的插入和删除操作。最后,讨论了Young矩阵的性质及其操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6-1
a.不一样。当输入数据为1,2,3时,bulid_max_heap产生的堆为:3,2,1
本题中给出的代码产生的数据为:3,1,2

b.每次插入数据最多耗时 O ( l g n ) O(lgn) O(lgn),一共要执行n次,总的复杂度为 O ( n l g n ) O(nlgn) O(nlgn).

6-2
a.
类似书中的给出求i节点的父节点和第j个孩子节点的下标计算公式,如下:
父节点: i n t ( ( i − 2 ) / d + 1 ) int((i-2)/d+1) int((i2)/d+1)
第j个孩子节点: d ∗ ( i − 1 ) + j + 1 d*(i-1)+j+1 d(i1)+j+1
其中d为每个节点的孩子数。
b.
每个节点有d个孩子,那么n个节点的d叉树高度为 l o g d n log_dn logdn.
c.

def exchange(a,b):
	return b,a
	
def d_heap_extract_max(A):
	if A.heap_size<1:
		return False
	largest=A[1]
	A[1]=A[A.heap_size]
	A.heap_size-=1
	d_max_heapify(A,1)
	return largest

def max_heapify(A,i)
	largest=i
	for k in range(1,d):
		if d_child(k.i)<= A.heap_size and A[d_child(k,i)>A[i]]:
			if A[d_child(k,i)>largest]:
				largest=A[d_child(k,i)]
		if largest !=i:
			A[i],A[largest]=exchange (A[i], A[largest])
			d_max_heapify(A,largest)

	

d.

def d_max_insert(A,key):
	A.heap_size-=1
	A[A.heap_size]=key
	i=A.heap_size
	while i>1 and A[d_parent(i)<A[i]]:
		A[i],A[d_parent(i)]=exchange(A[i],A[d_parent(i)])
		i=d_parent(i)

6-3
a.
2,3,4,5
8,9,12,14
16,inf,inf,inf
inf,inf,inf,inf
b.
根据定义,一个m*n的young矩阵的第一个元素是矩阵中最小的元素,而Y[m,n]是最大的元素,所以得证。
c.
将第一个元素储存下来后,并在矩阵中将其值改为无穷,通过比较周围的元素大小来交换元素,直到它是最小的结束。
d.
算法和前面的类似,从矩阵的右下角开始,向上和向左移动直到正确的位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值