From 3ddb6854787cb43889d71915e4b3601086bba924 Mon Sep 17 00:00:00 2001 From: look Date: Tue, 25 Apr 2023 20:49:57 +0800 Subject: [PATCH] =?UTF-8?q?look=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alg.md | 92 +++++++++++------- alg.py | 17 ++++ gen.py | 4 + test.py | 46 ++------- ...210\252\345\233\276 2023-04-25 203806.png" | Bin 0 -> 23745 bytes 5 files changed, 86 insertions(+), 73 deletions(-) create mode 100644 "\345\261\217\345\271\225\346\210\252\345\233\276 2023-04-25 203806.png" diff --git a/alg.md b/alg.md index 28a2984..610d2b8 100644 --- a/alg.md +++ b/alg.md @@ -1,36 +1,60 @@ -# 算法设计与分析第三次作业 -#### Description -{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**} -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +# 解题报告:不同的二叉搜索树 + +## 题目描述 + +```markdown +给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的二叉搜索树有多少种?返回满足题意的二叉搜索树的种数。 +``` + +## 思路分析 +​ 因为二叉搜索树的定义是左子树的节点值都小于根节点的值,右子树的节点值都大于根节点的值,所以对于任意的一个根节点,它的组成方式就是左子树的组成方式乘以右子树的组成方式。因为左子树和右子树的组成方式不影响对方的形态,所以问题可以使用动态规划来解决。 + +​ 设f(n)为n个节点的可构造二叉搜索树的数量。当n=0或n=1时,f(n)为1。当n>1时,根据上述分析可得出转移方程f(n)=\sum_{i=1}^{i=n} f(i-1)\times f(n-i),其中i为根节点的值,取值范围为[1, n]。最终结果为f(n)。 + +## 代码实现 + +```python +def numTrees(self, n: int) -> int: + # 定义一个数组存储二叉搜索树的数量 + dp = [0] * (n+1) + # 初始化,空树也算一种二叉搜索树 + dp[0] = 1 + dp[1] = 1 + # 遍历节点数从2到n的所有情况 + for i in range(2, n+1): + # 遍历以j为根节点的所有情况 + for j in range(1, i+1): + # 左子树的节点数 + left = j - 1 + # 右子树的节点数 + right = i - j + # 乘法原理,左子树和右子树的数量相乘 + dp[i] += dp[left] * dp[right] + return dp[n] +``` + +## 测试示例 + +​ 下面是一个测试代码的例子: + +gen.py: + +```py +import random +# 生成随机整数序列 +def data(n): + return [random.randint(1, 19) for _ in range(n)] +``` +test.py: + +```python +import gen +import alg +arr = gen.data(1) +n = arr[0] +print(n) +a = alg.numTrees(n) +print(a) +``` diff --git a/alg.py b/alg.py index e69de29..e0251b4 100644 --- a/alg.py +++ b/alg.py @@ -0,0 +1,17 @@ +def numTrees(n: int): + # 定义一个数组存储二叉搜索树的数量 + dp = [0] * (n+1) + # 初始化,空树也算一种二叉搜索树 + dp[0] = 1 + dp[1] = 1 + # 遍历节点数从2到n的所有情况 + for i in range(2, n+1): + # 遍历以j为根节点的所有情况 + for j in range(1, i+1): + # 左子树的节点数 + left = j - 1 + # 右子树的节点数 + right = i - j + # 乘法原理,左子树和右子树的数量相乘 + dp[i] += dp[left] * dp[right] + return dp[n] diff --git a/gen.py b/gen.py index e69de29..74c9aff 100644 --- a/gen.py +++ b/gen.py @@ -0,0 +1,4 @@ +import random +# 生成随机整数序列 +def data(n): + return [random.randint(1, 19) for _ in range(n)] diff --git a/test.py b/test.py index c6e375a..76bd13d 100644 --- a/test.py +++ b/test.py @@ -1,39 +1,7 @@ -# 算法设计与分析第三次作业 - -#### 介绍 -{**以下是 Gitee 平台说明,您可以替换此简介** -Gitee 是 OSCHINA 推出的基于 Git 的代码托管平台(同时支持 SVN)。专为开发者提供稳定、高效、安全的云端软件开发协作平台 -无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 [https://gitee.com/enterprises](https://gitee.com/enterprises)} - -#### 软件架构 -软件架构说明 - - -#### 安装教程 - -1. xxxx -2. xxxx -3. xxxx - -#### 使用说明 - -1. xxxx -2. xxxx -3. xxxx - -#### 参与贡献 - -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +import gen +import alg +arr = gen.data(1) +n = arr[0] +print(n) +a = alg.numTrees(n) +print(a) diff --git "a/\345\261\217\345\271\225\346\210\252\345\233\276 2023-04-25 203806.png" "b/\345\261\217\345\271\225\346\210\252\345\233\276 2023-04-25 203806.png" new file mode 100644 index 0000000000000000000000000000000000000000..5535647eeebd1e43c4a935443371f26309888698 GIT binary patch literal 23745 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 literal 0 HcmV?d00001 -- Gitee