【python】算法与数据结构例题

目录

 

算法与数据结构实验题 6.33 集合

算法与数据结构实验题 6.34 路径


 

算法与数据结构实验题 6.33 集合

★实验任务

给你一个集合,一开始是个空集,有如下两种操作:

  1. 向集合中插入一个元素。

  2. 询问集合中最接近某个数的数是多少。

★数据输入

输入第一行为一个正整数N,表示共有N个操作。

接下来N行,每行一个操作。

对于第一个操作,输入格式为1 x,表示往集合里插入一个值为x的元素。

对于第二个操作,输入格式为2 x,表示询问集合中最接近x的元素是什么。

1<=N<=100000,1<=x<=1000000000。

★数据输出

对于所有的第二个操作,输出一个或者两个整数,表示最接近x的元素,有两个数的情况,按照升序输出,并用一个空格隔开。

如果集合为空,输出一行“Empty!”

数据保证插入的元素两两不同。

★代码实现

def find(i:int):
    if not my_set:
        print('Empty!')
        return
    if i in my_set:
        print(i)
        return
    for k in my_set:
        my_list.append(abs(i-k))
    k=min(my_list)
    if (i-k) in my_set:
        print(i-k,end=' ')
    if (i+k) in my_set:
        print(i+k)

my_set=set()
num=int (input())
while num:
    num-=1
    my_list=[]
    cont = [int(n) for n in (input().split())]
    if cont[0]==1:
        my_set.add(cont[1])
    else:
        find(cont[1])

 

算法与数据结构实验题 6.34 路径

★实验任务

给你一颗空的 AVL 树,你需要完成两个操作:

  1. 向树中插入一个元素。

  2. 询问某个元素到根的路径。

PS:在任意时刻,这样的 AVL 树是唯一的。

★数据输入

输入第一行为一个正整数 N,表示共有 N 个操作。

接下来 N 行,每行一个操作。

对于第一个操作,输入格式为 1 x,表示往集合里插入一个值为 x 的元素。

对于第二个操作,输入格式为 2 x,表示询问根到 x 这个元素的路径。

1<=N<=100000,1<=x<=1000000000。

★数据输出

对于所有的第二个操作,输出一行若干个整数,表示根到 x 的路径序列,数与数之间用空格隔开。

题目保证每个数最多只会插入一次,并且保证询问的数在之前已经插入过。

输入示例
5
1 2
1 1
1 3
2 1
2 3
输出示例
2 1
2 3

★代码实现

class Node(object):
    def __init__(self, val):
        self.val = val
        self.lchild = None
        self.rchild = None

class tn():
    def __init__(self):
        self.num=0

class TreeNode():
    def height(self, root):
        if root == None:
            return 0
        else:
            return root.height

    def LL(self, root):
        node = root.lchild
        root.lchild = node.rchild
        node.rchild = root
        root.height = max(self.height(root.lchild), self.height(root.rchild)) + 1
        node.height = max(self.height(node.lchild), self.height(root.rchild)) + 1
        return node

    def RR(self, root):
        node = root.rchild
        root.rchild = node.lchild
        node.lchild = root
        root.height = max(self.height(root.rchild), self.height(root.lchild)) + 1
        node.height = max(self.height(node.lchild), self.height(root.rchild)) + 1
        return node

    def LR(self, root):
        root.lchild = self.RR(root.lchild)
        return self.LL(root)

    def RL(self, root):
        root.rchild = self.LL(root.rchild)
        return self.RR(root)

    def insert(self, root, val):
        if root == None:
            root = Node(val)
        else:
            if val < root.val:
                root.lchild = self.insert(root.lchild, val)
                if abs(self.height(root.lchild) - self.height(root.rchild)) > 1:
                    if val < root.lchild.val:
                        root = self.LL(root)
                    else:
                        root = self.LR(root)
            else:
                root.rchild = self.insert(root.rchild, val)
                if abs(self.height(root.lchild) - self.height(root.rchild)) > 1:
                    if val > root.rchild.val:
                        root = self.RR(root)
                    else:
                        root = self.RL(root)
        root.height = max(self.height(root.lchild), self.height(root.rchild)) + 1
        return root

    # 查询
    def find(self, root, val):
        if root.val == val:
            if T.num:
                print("", end=' ')
            print(root.val, end='')
            T.num -= 1
            return True
        else:
            if val < root.val:
                if T.num:
                    print("",end=' ')
                print(root.val,end='')
                T.num-=1
                return self.find(root.lchild, val)
            else:
                if T.num:
                    print("", end=' ')
                print(root.val, end='')
                T.num -= 1
                return self.find(root.rchild, val)

T=tn()
t = TreeNode()
root = None
num=int (input())
while num:
    num-=1
    cont = [int(n) for n in (input().split())]
    if cont[0]==1:
        root = t.insert(root,cont[1])
    else:
        T.num=0
        t.find(root,cont[1])

344cf4e9f2d9495f852795a3fd10811a.png

 

 

回答: 一个经典的Python递归算法例题是计算阶乘。通过递归的方式,可以简洁地实现阶乘的计算。例如,可以使用以下代码来计算阶乘: ```python def factorial(n): if n == 1: return n return n * factorial(n-1) res = factorial(5) print(res) ``` 在这个例子中,我们定义了一个名为`factorial`的函数,它接受一个参数`n`,表示要求的数的阶乘。如果`n`等于1,那么阶乘的结果就是1,直接返回1。否则,我们将`n`乘以`factorial(n-1)`,也就是`n`乘以比它小1的数的阶乘。最后,我们调用`factorial(5)`来计算5的阶乘,并将结果赋给`res`变量,然后打印出结果。 这个例子展示了递归算法的简洁性和效率。通过递归,我们可以将复杂的问简化为更小的子问,并通过不断调用自身来解决这些子问,最终得到整个问的解答。递归算法在解决一些数学数据结构相关的问时非常有用。 #### 引用[.reference_title] - *1* *3* [Python递归的几个经典案例](https://blog.csdn.net/qdPython/article/details/126748787)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [递归算法及经典例题详解](https://blog.csdn.net/weixin_45881074/article/details/120585865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coleak

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值