杨氏矩阵

来源:互联网 发布:中国图书馆cip数据查询 编辑:程序博客网 时间:2024/04/30 08:54

杨氏矩阵

参考

操作

条件:一个已经建好的杨氏矩阵(Young Tableau)
操作:
1. 在杨氏矩阵中插入元素x —- Insert(x)
2. 在杨氏矩阵中删除位于 (x, y) 位置的元素—- Delete(x, y)
3. 返回x是否在矩阵中—-Find(x)
4. 返回第k大数

查找算法类似于BST二叉排序树,不过需要在其思想上稍微进行修改,才能满足杨氏矩阵的查找操作,同样利用杨氏矩阵的性质,不过此时应该换一个角度思考问题,因为与BST二叉排序树类比,所以应该从左下角开始看起,该元素的上面的元素比本身小和右面的元素比本身大,这样就与BST二叉排序树具有相同的性质。所以在查找时从左下角不断的比较,从而最终确定所查找元素位置。
更多解法参考:leetcode

4. 杨氏矩阵第K大数

1)小顶堆法

构建一个小顶堆,首先将a[0][0]加入小顶堆,然后每次从小顶堆中取出最小元素,并加入比该元素大且与之相邻的两个元素(对于a[0][0],则需要加入 a[0][1]和a[1][0]),直到取出第k个元素,需要注意的是,需要采用额外空间记录某个元素是否已经加入到小顶堆以防止重复加入。

2)正确性证明

P(n): 按小顶堆法,第n个被取出来的数一定是第n大数。
a)P(1)显然成立,P(2)也成立。
b)假设P(1)&P(2)&…&P(k-1)&P(k)成立,则P(k+1)成立。
证明:第k+1大的数一定位于第1、第2、…、第k大数的右边和下面的两个数之中,而这些数均被加入到了小顶堆中,所以P(k+1)成立。
c)综上,P(n)成立。

应用

  1. 己知一个正整数R ,请写一个程序,找出所有满足 x2+y2=R 的正整数对(x ,y)。
    参考【c语言名题精选百则技巧篇】第四章
0 0
原创粉丝点击