使用队列和堆栈将中缀转换为后缀的运行时间是多少?

2024-01-24

在c++中... 我知道队列和堆栈的各个函数的时间复杂度,但我不知道同时使用队列和堆栈的 infixToPostfix 函数的时间复杂度是多少......我当然是一名初学者程序员,而且我我很困惑。


我认为使用堆栈和队列从中缀转换为后缀是,Dijkstra 的调车场算法 http://en.wikipedia.org/wiki/Shunting-yard_algorithm。衡量复杂性的一种方法是考虑完成了多少次推送和弹出操作:

  • 每个数字都被压入一次并弹出一次。
  • 每个运算符都被推送一次并弹出一次。
  • 每个令牌仅从令牌队列中出队一次。
  • 每个中间结果都只推送一次并弹出一次。

如果字符串的长度为 n,则它有 O(n) 个数字和 O(n) 个运算符,因此前三个组完成的工作量总共为 O(n)。要分析最后一组,请注意每个中间值都来自将两个较早的值组合在一起。如果原始输入中总共有 O(n) 个数字,这意味着可以产生 O(n) 个值作为中介。因此,总运行时间将为 O(n)。

使用像上面这样的参数,从后缀到中缀的转换可以类似地在 O(n) 时间内运行。

希望这可以帮助!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用队列和堆栈将中缀转换为后缀的运行时间是多少? 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • C# 中通过 Process.Kill() 终止的进程的退出代码

    如果在我的 C 应用程序中 我正在创建一个可以正常终止或开始行为异常的子进程 在这种情况下 我通过调用 Process Kill 来终止它 但是 我想知道该进程是否已退出通常情况下 我知道我可以获得终止进程的错误代码 但是正常的退出代码是什
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 如何使我的搜索表单适用于大写和小写

    我希望我的搜索表单可以使用大写和小写 因此 每当我输入小写内容时 它也会在我正在搜索的表中显示大写结果 这是我的 JavaScript function searchFunction var searchText document getE
  • R 项目组合

    我正在使用 R 希望找到消费者之间最常见的配对 consumer c 1 1 1 1 1 2 2 2 2 3 3 4 4 4 4 5 items c apple banana carrot date eggplant apple banan
  • MT5/Metatrader 5 使用python连接不同的MT5终端

    我有多个使用以下代码连接到 Mt5 终端的 python 程序 Establish connection to the MetaTrader 5 terminal if not mt5 initialize C Program Files
  • 无法在 Windows 10 ssh 服务器上使用公钥登录

    我已经安装了 Windows 10 ssh 软件包并设置了 sshd 使用密码登录效果很好 但我无法使用公钥登录 我有同样的authorized keys文件输入 ssh authorized keys正如我在 Linux 机器上所做的那样
  • 在 gevent 应用程序中,如何杀死所有已启动的 greenlet?

    我有一个 gevent 应用程序 可以跨多个模块生成多个 greenlet 我希望能够正常关闭应用程序 无论是内部还是通过捕获SIGTERM 例如 允许 greenlet 通过捕获来很好地终止GreenletExit并执行finally 条
  • 转储整个数组:console.log 和 console.dir 输出“... NUM more items]”

    我正在尝试记录一个长数组 以便可以在终端中快速复制它 但是 如果我尝试记录数组 它看起来像 item item gt gt more items lt lt lt 399 more items 如何记录整个数组以便我可以快速复制它 Sett
  • Tkinter:设置“比例”值而不触发回调?

    我有一个 Tkinter GUI 其中有一个Scale目的 我分配了一个回调 由command构造函数参数 以在用户更改刻度位置时执行操作 然而 也存在一种情况 刻度表示的值被外部修改 所以我使用设置刻度位置Scale set 在这种情况下
  • 如何在 Bitbucket 项目中使用 SSH 密钥?

    我在 Bitbucket 中生成和使用 SSH 密钥的步骤 ssh keygen t rsa C my email cat ssh id rsa pub 复制我的钥匙ssh rsa AAAAB3Nz my email到剪贴板 在 bitbu
  • 在指令模板内如何让 Angular ui-router ui-sref 工作?

    基本上 我正在尝试更改 自定义 ui bootstrap accordion 的行为 除了与 ui router 的集成之外 一切正常 这是我想要使用手风琴的方式
  • Jaxb:为固定值属性生成常量值

    我目前正在开发一个使用以下结构的 xsd
  • Visual Studio 2017 Node.js 异常不起作用

    我刚刚开始使用 VS 2017 Professional 进行 Node js 开发 调试通常可以工作 但是当抛出未捕获的异常时 nodejs 进程会立即停止 并且我没有任何更改来跟踪问题 我还在调试器设置中启用了nodejs exptio
  • 通过安装程序 (MSI) Windows 7 更新 Node.js 时看不到最新版本

    我正在尝试更新 Windows 7 机器上的节点 但在重新安装 更新节点后我没有看到最新版本 我只是出去http nodejs org download http nodejs org download 并获取最新的 Windows 安装程
  • 用户友好且难以猜测的唯一标识符

    我的团队正在开发一个具有旧数据库的应用程序 该数据库使用两个不同的值作为 Group 对象的唯一标识符 Id是一个自动递增的 Identity 列 其值由插入时的数据库确定 GroupCode由应用程序决定after插入 并且是 Group
  • 优化“where date Between”类型查询的 Dax 和模型

    我正在构建一个模型以允许报告两个单独的数据集 在本例中 我们将说学生数据集和员工数据集 数据集非常独立 两者之间唯一真正的联系是日期 因此从模型的角度来看 有一个学生星型模式和一个员工星型模式 显示的数据是快照类型数据 回答如下问题 对于选
  • 将 OpenCV 代码从 C++ 转换为 Java

    我目前正在尝试将一些遗留代码从 iPhone 迁移到 Android 此代码使用 OpenCV 库进行一些图像处理 总的来说 一切进展顺利 但我被一行代码困住了 我不知道如何将其转换为 Java 代码 Scalar dMean Scalar
  • 查明之前是否安装了特定的 Android 应用程序

    我有一个应用程序 它为您提供各种应用程序的列表 您可以从 Play 商店下载并安装这些应用程序来赚取好东西 现在 我不希望用户卸载以前安装的应用程序和再次下载通过我的应用程序并赚取好东西 有没有办法查明用户设备上以前是否安装过特定应用程序
  • 重新实现 ToUpper()

    如果 ToUpper 不存在 你会如何编写它 i18n 和 L10n 的奖励积分 由此引发了好奇心 http thedailywtf com Articles The Long Way toUpper aspx http thedailyw
  • heroku-rails-权限被拒绝(公钥)

    heroku create Creating floating planet 1824 done stack is bamboo mri 1 9 2 http floating planet 1824 heroku com email pr
  • 限制并行/同时下载 - 如何知道下载是否被取消?

    我有一个用 PHP 编写的简单文件上传服务 其中还包括一个脚本 当用户请求从此站点下载时 该脚本通过发送有限大小的数据包来控制下载速度 我想实现一个系统 将每个用户的并行 同时下载限制为 1 如果他们不是高级会员 在上面的下载脚本中 我可以
  • 使用队列和堆栈将中缀转换为后缀的运行时间是多少?

    在c 中 我知道队列和堆栈的各个函数的时间复杂度 但我不知道同时使用队列和堆栈的 infixToPostfix 函数的时间复杂度是多少 我当然是一名初学者程序员 而且我我很困惑 我认为使用堆栈和队列从中缀转换为后缀是 Dijkstra 的调