热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

给定按键的唯一BST数|动态编程

给定按键的唯一BST数|动态编程原文:https://www

给定按键的唯一 BST 数|动态编程

原文:https://www . geeksforgeeks . org/带有给定密钥的唯一 bst 号动态编程/

给定 N,用 1 到 N 的值求唯一 BST 的总数。
示例:

Input: n = 3
Output: 5
For n = 3, preorder traversal of Unique BSTs are:
1\. 1 2 3
2\. 1 3 2
3\. 2 1 3
4\. 3 1 2
5\. 3 2 1
Input: 4
Output: 14

在之前的帖子中已经讨论了 O(n)解决方案。在这篇文章中,我们将讨论一个基于动态编程的解决方案。对于 I 的所有可能值,将 I 视为根,然后[1…i-1]数字将落在左子树和[i+1…n]数字将落在右边的子树中。所以,在答案中加上(i-1)*(n-i)。产品的总和将是唯一 BST 数量的答案。

以下是上述方法的实现:

C++

// C++ code to find number of unique BSTs
// Dynamic Programming solution
#include
using namespace std;
// Function to find number of unique BST
int numberOfBST(int n)
{
    // DP to store the number of unique BST with key i
    int dp[n + 1];
    fill_n(dp, n + 1, 0);
    // Base case
    dp[0] = 1;
    dp[1] = 1;
    // fill the dp table in top-down approach.
    for (int i = 2; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            // n-i in right * i-1 in left
            dp[i] = dp[i] + (dp[i - j] * dp[j - 1]);
        }
    }
    return dp[n];
}
// Driver Code
int main()
{
    int n = 3;
    cout <<"Number of structurally Unique BST with " << 
    n <<" keys are : " <    return 0;
}

Java 语言(一种计算机语言,尤用于创建网站)

// Java code to find number
// of unique BSTs Dynamic 
// Programming solution
import java.io.*;
import java.util.Arrays;
class GFG
{
    static int numberOfBST(int n)
    {
    // DP to store the number 
    // of unique BST with key i
    int dp[] = new int[n + 1];
    Arrays.fill(dp, 0);
    // Base case
    dp[0] = 1;
    dp[1] = 1;
    // fill the dp table in
    // top-down approach.
    for (int i = 2; i <= n; i++) 
    {
        for (int j = 1; j <= i; j++) 
        {
            // n-i in right * i-1 in left
            dp[i] = dp[i] + (dp[i - j] * 
                             dp[j - 1]);
        }
    }
    return dp[n];
}
// Driver Code
public static void main (String[] args) 
{
    int n = 3;
    System.out.println("Number of structurally " + 
                           "Unique BST with "+ n +
                                  " keys are : " + 
                                  numberOfBST(n));
}
}
// This code is contributed
// by shiv_bhakt.

Python 3

# Python3 code to find number of unique 
# BSTs Dynamic Programming solution 
# Function to find number of unique BST 
def numberOfBST(n): 
    # DP to store the number of unique
    # BST with key i 
    dp = [0] * (n + 1) 
    # Base case 
    dp[0], dp[1] = 1, 1
    # fill the dp table in top-down 
    # approach. 
    for i in range(2, n + 1): 
        for j in range(1, i + 1): 
            # n-i in right * i-1 in left 
            dp[i] = dp[i] + (dp[i - j] *
                             dp[j - 1]) 
    return dp[n] 
# Driver Code 
if __name__ == "__main__": 
    n = 3
    print("Number of structurally Unique BST with", 
                   n, "keys are :", numberOfBST(n)) 
# This code is contributed 
# by Rituraj Jain

C

// C# code to find number
// of unique BSTs Dynamic 
// Programming solution
using System;
class GFG
{
    static int numberOfBST(int n)
    {
    // DP to store the number 
    // of unique BST with key i
    int []dp = new int[n + 1];
    // Base case
    dp[0] = 1;
    dp[1] = 1;
    // fill the dp table in
    // top-down approach.
    for (int i = 2; i <= n; i++) 
    {
        for (int j = 1; j <= i; j++) 
        {
            // n-i in right * i-1 in left
            dp[i] = dp[i] + (dp[i - j] * 
                             dp[j - 1]);
        }
    }
    return dp[n];
}
// Driver Code
public static void Main () 
{
    int n = 3;
    Console.Write("Number of structurally " + 
                      "Unique BST with "+ n +
                             " keys are : " + 
                             numberOfBST(n));
}
}
// This code is contributed
// by shiv_bhakt.

服务器端编程语言(Professional Hypertext Preprocessor 的缩写)

// PHP code to find number 
// of unique BSTs Dynamic
// Programming solution
// Function to find number 
// of unique BST
function numberOfBST($n)
{
    // DP to store the number 
    // of unique BST with key i
    $dp = array($n + 1);
    for($i = 0; $i <= $n + 1; $i++)
    $dp[$i] = 0;
    // Base case
    $dp[0] = 1;
    $dp[1] = 1;
    // fill the dp table 
    // in top-down approach.
    for ($i = 2; $i <= $n; $i++) 
    {
        for ($j = 1; $j <= $i; $j++) 
        {
            // n-i in right * 
            // i-1 in left
            $dp[$i] += (($dp[$i - $j]) * 
                        ($dp[$j - 1]));
        }
    }
    return $dp[$n];
}
// Driver Code
$n = 3;
echo "Number of structurally ". 
           "Unique BST with " , 
          $n , " keys are : " , 
              numberOfBST($n) ;
// This code is contributed
// by shiv_bhakt.
?>

Output:

Number of structurally Unique BST with 3 keys are : 5

时间复杂度: O(n 2


推荐阅读
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 深入解析动态代理模式:23种设计模式之三
    在设计模式中,动态代理模式是应用最为广泛的一种代理模式。它允许我们在运行时动态创建代理对象,并在调用方法时进行增强处理。本文将详细介绍动态代理的实现机制及其应用场景。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文探讨了如何使用pg-promise库在PostgreSQL中高效地批量插入多条记录,包括通过事务和单一查询两种方法。 ... [详细]
  • EasyMock实战指南
    本文介绍了如何使用EasyMock进行单元测试,特别是当测试对象的合作者依赖于外部资源或尚未实现时。通过具体的示例,展示了EasyMock在模拟对象行为方面的强大功能。 ... [详细]
  • 本文详细介绍了如何在Kendo UI for jQuery的数据管理组件中,将行标题字段呈现为锚点(即可点击链接),帮助开发人员更高效地实现这一功能。通过具体的代码示例和解释,即使是新手也能轻松掌握。 ... [详细]
  • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 本文介绍了如何在PHP Magento模型中自定义主键,避免使用默认的自动递增主键,并提供了解决方案和代码示例。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 本文将详细介绍Nose这一非标准库的Python测试框架,它虽然不是Python官方发行版的一部分,但与unittest框架紧密相关,旨在通过简化测试流程来提升开发效率。 ... [详细]
  • Windows 环境下安装 Git 并连接 GitHub 的详细步骤
    本文详细介绍了如何在 Windows 系统中安装 Git 工具,并通过配置 SSH 密钥实现与 GitHub 的安全连接。包括下载、安装、环境配置及验证连接等关键步骤。 ... [详细]
  • 本文介绍了一个项目中如何在Windows平台上实现多声道音频数据的采集,特别是针对DANTE音频接口的8路立体声音频通道。文章详细描述了使用Windows底层音频API进行音频采集的方法,并提供了一个具体的实现示例。 ... [详细]
author-avatar
FF小小女人
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有