酷代码 AI
菜单
服务商

Python实现从给定关键字序列构造最优二叉查找树并计算平均搜索结点数

""" 思路: 1. 动态规划解决问题 2. 设root[i][j]: i <= j, 二叉查找树的根节点是k[i]到k[j]的虚拟键 3. 设dp[i][j]: i <= j, 表示二叉查找树的期望代价 所以 dp[i][j] = min(dp[i][k-1] + dp[k+1][j]) + sum[p[i]...p[j]] 其中 k 是根节点 虚拟键可以通过下标在 dp[i][j] 中找到对应位置的代价 """ def optimalBST(p, q): n = len(p) # 初始化dp为0,表示还没有计算过对应位置的二叉查找树的期望代价 dp = [[0] * (n + 1) for _ in range(n + 1)] # 初始化二叉查找树的根节点 root = [[0] * (n + 1) for _ in range(n + 1)] # 初始化dp和root for i in range(1, n + 2): dp[i - 1][i - 1] = q[i - 1] root[i - 1][i - 1] = i - 1 # 计算dp和root for gap in range(1, n + 1): for i in range(n - gap + 1): j = i + gap dp[i][j] = float("inf") for k in range(i, j + 1): temp = dp[i][k - 1] + dp[k + 1][j] + sum(p[i:j+1]) + sum(q[i:j+2]) if temp < dp[i][j]: dp[i][j] = temp root[i][j] = k return dp[0][n], root if __name__ == "__main__": p = [0.15, 0.1, 0.05, 0.1, 0.2, 0.05, 0.1, 0.05, 0.05, 0.05, 0.1] q = [0.1, 0.05, 0.05, 0.05, 0.05, 0.1] avg_cost, root = optimalBST(p, q) print('{:.2f}'.format(avg_cost)) """ ######[AI写代码神器 | 857点数解答 | 2024-06-09 14:30:52]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]