正如在几个SO问题中所解释的那样,并且在 mathworld处更抽象地解释,加泰罗尼亚数字的序列恰好对应于可以为任何给定数量的运算符生成的括号分组的数量.但我还没有找到生成所有这些分组的算法.

该二进制包围算法对应于Tamari Lattice,并且可以以多种不同方式描述.该算法最明显的实际用途是通过围绕二元运算符和它们运算的数字的每个可能的包围来生成所有可能的表达式.这可以用于穷举测试二叉树上的各种类型的操作.

网络搜索确实揭示了one implementation in C#,但我认为我需要一段时间来理解,因为我不知道C#语法.

那么,什么python代码生成围绕运算符的所有可能的括号分组(因此可以与实际表达式一起使用以生成所有可能性)?对于2,3和4,输出如下所示:

AllBinaryTrees(2)

>(x(xx))
>((xx)x​​)

AllBinaryTrees(3)

>(((xx)x​​)x)
>((x(xx))x)
>((xx)(xx))
>(x((xx)x​​))
>(x(x(xx)))

AllBinaryTrees(4)

>(x(x(x(xx))))
>(x(x((xx)x​​)))
>(x((xx)(xx)))
>(x((x(xx))x))
>(x(((xx)x​​)x))
>((xx)(x(xx)))
>((xx)((xx)x​​))
>((x(xx))(xx))
>(((xx)x​​)(xx))
>((x(x(xx)))x)
>((x((xx)x​​))x)
>(((xx)(xx))x)
>(((x(xx))x)x)
>((((xx)x​​)x)x)

更好的是代码可以执行以下操作:

AllBinaryTrees(“2 3/4”)

输出:

> 2(3/4)
>(2 3)/ 4

解决方法

怎么样
def allbinarytrees(s):
    if len(s) == 1:
        yield s
    else:
        for i in range(1,len(s),2):
            for l in allbinarytrees(s[:i]):
                for r in allbinarytrees(s[i+1:]):
                    yield '({}{}{})'.format(l,s[i],r)

样品用法:

for t in allbinarytrees('1+2-3*4/5'):
    print(t)

输出:

(1+(2-(3*(4/5))))
(1+(2-((3*4)/5)))
(1+((2-3)*(4/5)))
(1+((2-(3*4))/5))
(1+(((2-3)*4)/5))
((1+2)-(3*(4/5)))
((1+2)-((3*4)/5))
((1+(2-3))*(4/5))
(((1+2)-3)*(4/5))
((1+(2-(3*4)))/5)
((1+((2-3)*4))/5)
(((1+2)-(3*4))/5)
(((1+(2-3))*4)/5)
((((1+2)-3)*4)/5)

什么python代码为二元运算符生成所有可能的分组(树)的更多相关文章

  1. iOS 9 LaunchServices:错误:没有注册处理程序的URL scheme itms-services

    我们有一些内部应用程序,在iOS9之前,应用程序将在版本比较后打开“itms-services://”链接,新版本的应用程序将被下载并安装.但是在iOS9测试之后,我们发现这些应用无法打开“itms-services://”链接,出现错误,如“LaunchServices:ERROR:没有注册处理程序的URLschemeitms-services”我们用来更新应用程式的代码:我们测试了将“itms

  2. android – setOutputFormat在无效状态下调用:4(where和why)

    所以看起来调用setoutputFormat一定工作正常,但是setProfile本身必须再次调用setoutputFormat然后失败…

  3. vBulletin Forum 2.3.xx SQL Injection

    theoneyouwant.

  4. 使用NetworkManager和没有GUI工具的CentOS 6 WiFi

    我正在使用CentOS6,拼命想通过ifcfg-wlan0文件获取Wifi并使用/etc/wpa_supplicant/wpa_supplicant.conf进行捏造.我没有X服务器,所以我不想使用GUI工具.如何配置NetworkManager在wlan0上使用ESSID为inet_bridge的WPA2-PSKWiFi.以太网工作正常,所以我知道我的设置并没有完全搞砸.必须在命令行或使用vim

  5. 如何在CentOS 6.x上的DHCPd(isc-dhcpd-4.1.1-P1)中为多个MAC设置一个主机名和IP?

    我试图在CentOS中获取我的DHCP服务器,以便在同一台计算机上为两个不同的MAC地址提供相同的IP和主机名,具体取决于连接的位置.这是我在dhcpd.conf中的条目我尝试添加第二条硬件线并将第二条MAC添加到第一条硬件线.都没有奏效.有没有人知道如何在DHCPd中使用相同的主机名和IP时完成此任务?你正在打开自己的IP地址冲突,但我相信你有一个非常有效的理由做这样的事情.

  6. ubuntu – 无法上传文件FTP

    我通过FTP将每个人限制在他们的主文件夹中.在每个家庭中,我有一个我无法上传到的public_html目录.我已将我的用户源添加到ftp组.public_html文件夹是……drwxrwsr-x2源ftp4096public_html我不知道为什么我无法上传文件.我在权限方面做错了什么?

  7. ubuntu-16.04 – 我是否可以通过DHCP请求特定的IP地址而不拒绝DHCP服务器提供的其他地址?

    任何人都知道我想要的是不可能的,没有写我自己的DHCP客户端?),这将是/32,因为信息不可用.如果需要,在“模板”租约文件中添加其他值.这将是:在这种情况下运行dhclient时:[…

  8. ubuntu – 重启apache时没有运行httpd(没有pid文件)

    我正在研究ubuntu.尝试重新启动apache时收到错误消息.尝试使用netstat-pant时,我收到以下消息使用lsof-i:80{检查参数是否正确).它列出了正在侦听端口80的所有应用程序.还尝试运行apache2{直接执行}来检查发生了什么.

  9. ubuntu – 非堆内存泄漏JVM

    我在oraclejava虚拟机上运行的ubuntu服务器上设置了glassfishv4.0,并且jvm进程驻留内存大小(通过“top”命令获得)长大,直到jvm没有内存来创建新线程.是)我有的:>具有1GbRAM和1.4GHz处理器的VPS服务器(1Core)>UbuntuServer12.04>Java(TM)SE运行时环境(版本1.7.0_51-b13)>JavaHotSpot(TM)64位服

  10. Ubuntu配置ip的方法

    Ubuntu系统进行网络配置有的时候用图形界面不起作用,这种情况下可以直接修改某些启动脚本或配置文件Ubuntu系统进行网络配置涉及到几个配置文件1./etc/network/interfaces2./etc/resolv.conf操纵步骤:1.打开ubuntu的/etc/network/interfaces文件默认的内容如下:autoloifaceloinetloopback动态获取的配置方法:

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部