幂集生成函数的时间复杂度

2024-02-29

我试图计算出我编写的函数的时间复杂度(它生成一个电源组 http://en.wikipedia.org/wiki/Power_set对于给定的字符串):

public static HashSet<string> GeneratePowerSet(string input)
{
    HashSet<string> powerSet = new HashSet<string>();

    if (string.IsNullOrEmpty(input))
        return powerSet;

    int powSetSize = (int)Math.Pow(2.0, (double)input.Length);

    // Start at 1 to skip the empty string case
    for (int i = 1; i < powSetSize; i++)
    {
        string str = Convert.ToString(i, 2);
        string pset = str;
        for (int k = str.Length; k < input.Length; k++)
        {
            pset = "0" + pset;
        }

        string set = string.Empty;
        for (int j = 0; j < pset.Length; j++)
        {
            if (pset[j] == '1')
            {
                set = string.Concat(set, input[j].ToString());
            }
        }
        powerSet.Add(set);
    }
    return powerSet;
}

所以我的尝试是这样的:

  • 设输入字符串的大小为n
  • 在外层 for 循环中,必须迭代 2^n 次(因为集合大小为 2^n)。
  • 在内部 for 循环中,我们必须迭代 2*n 次(最坏情况下)。

1. 所以 Big-O 将是 O((2^n)*n) (因为我们删除了常数 2)...这是正确的吗?

并且 n*(2^n) 比 n^2 更差。

如果 n = 4 那么
(4*(2^4)) = 64
(4^2) = 16

如果 n = 100 那么
(10*(2^10)) = 10240
(10^2) = 100

2. 是否有更快的方法来生成幂集,或者这是否是最佳方法?


一条评论:

上面的函数是面试问题的一部分,程序应该接受一个字符串,然后打印出字典中的单词,这些单词的字母是输入字符串的字谜子集(例如输入:tabrcoz 输出:boat, car, cat , ETC。)。面试官声称 n*m 实现很简单(其中 n 是字符串的长度,m 是字典中的单词数),但我认为您无法找到给定字符串的有效子字符串。看来面试官的说法是错误的。

1995 年我在微软面试时也遇到了同样的面试问题。基本上问题是实现一个简单的拼字游戏播放算法。

你用这种产生动力组的想法完全错了。不错的想法,显然太贵了。放弃它并寻找正确的答案。

这是一个提示:对字典进行分析,构建一个新的数据结构,更适合有效地解决您实际需要解决的问题。通过优化的字典,您应该能够实现 O(nm)。通过更巧妙构建的数据结构,您可能可以做得更好。

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

幂集生成函数的时间复杂度 的相关文章

  • 如何在多线程C++ 17程序中交换两个指针?

    我有两个指针 pA 和 pB 它们指向两个大的哈希映射对象 当pB指向的哈希图完全更新后 我想交换pB和pA 在C 17中 如何快速且线程安全地交换它们 原子 我是 c 17 的新手 2个指针的原子无等待交换可以通过以下方式实现 inclu
  • 代码 GetAsyncKeyState(VK_SHIFT) & 0x8000 中的这些数字是什么?它们是必不可少的吗?

    我试图在按下按键的简单动作中找到这些数字及其含义的任何逻辑解释 GetAsyncKeyState VK SHIFT 0x8000 可以使用哪些其他值来代替0x8000它们与按键有什么关系 GetAsyncKeyState 根据文档返回 如果
  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排
  • ComboBox DataBinding 导致 ArgumentException

    我的几个类对象 class Person public string Name get set public string Sex get set public int Age get set public override string
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 将 Long 转换为 DateTime 从 C# 日期到 Java 日期

    我一直尝试用Java读取二进制文件 而二进制文件是用C 编写的 其中一些数据包含日期时间数据 当 DateTime 数据写入文件 以二进制形式 时 它使用DateTime ToBinary on C 为了读取 DateTime 数据 它将首
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • C++ int 前面加 0 会改变整个值

    我有一个非常奇怪的问题 如果我像这样声明一个 int int time 0110 然后将其显示到控制台返回的值为72 但是当我删除前面的 0 时int time 110 然后控制台显示110正如预期的那样 我想知道两件事 首先 为什么它在
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 在屏幕上获取字符

    我浏览了 NCurses 函数列表 似乎找不到返回已打印在屏幕上的字符的函数 每个字符单元格中存储的字符是否有可访问的值 如果没有的话Windows终端有类似的功能吗 我想用它来替换屏幕上某个值的所有字符 例如 所有a s 具有不同的特征
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • OpenGL:仅获取模板缓冲区而没有深度缓冲区?

    我想获取一个模板缓冲区 但如果可能的话 不要承受附加深度缓冲区的开销 因为我不会使用它 我发现的大多数资源表明 虽然模板缓冲区是可选的 例如 排除它以利于获得更高的深度缓冲区精度 但我还没有看到任何请求并成功获取仅 8 位模板缓冲区的代码
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 是否可以在不连接数据库的情况下检索 MetadataWorkspace?

    我正在编写一个需要遍历实体框架的测试库MetadataWorkspace对于给定的DbContext类型 但是 由于这是一个测试库 我宁愿不连接到数据库 它引入了测试环境中可能无法使用的依赖项 当我尝试获取参考时MetadataWorksp

随机推荐

  • Terraform:如何读取地图列表?

    请参阅下面的示例 data aws kms secrets api key count length keys var keys secret name secret name payload element values var keys
  • 显式保存与隐式保存 - 什么时候更喜欢什么?

    我目前正在开发一个 wp7 应用程序 不想透露太多 但我在用户交互方面遇到了一些困难 我不确定的主要问题是 我应该在对话框中提供显式保存按钮并使用手机后退按钮作为取消 还是应该隐式保存用户点击手机后退按钮的时间 我想得越多 我就越不确定什么
  • 如何在 Scala JLine 调用之间保存和加载历史记录

    我在用着Scala JLine http search maven org artifactdetails 7Corg scala lang virtualized 7Cjline 7C2 10 2 RC1 7Cjar在我的 CLI 程序中
  • MySQL 5.5 至 5.7 停止使用索引

    我有 Magento 1 9 2 1 并在Apache2和MySQL 5 5上成功运行 我尝试将其迁移到另一台服务器并使用 NGINX 和 MySQL 5 7 但网站开始变得非常慢 12 秒对 2 秒 经过几个小时的调试 我发现一个查询有问
  • 简单的 PHP 联系表格未发送[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 发完更多帖
  • 如何在Steam WebAPI中通过AppName获取steam AppID

    所以我试图通过输入游戏名称来启动蒸汽游戏 为此我问自己是否可以通过输入的名称找出steam App ID 所以我尝试通过我的 steamApps 文件夹收集 ID 但没有成功 我还找到了一个网站 您可以在其中搜索特定游戏的名称 例如 htt
  • 期间发生内部错误:“更新 Maven 项目

    当我转换为 Maven 项目时 错误是 gt An internal error occurred during Updating Maven Project gt Unsupported IClasspathEntry kind 4 有什
  • 使用 Ajax 下载 JQuery 文件

    当我的用户选择生成报告时 我使用 John Culviner 出色的 fileDownload 插件来生成 请稍候 消息 当用户单击链接时 我向 PHP 发送一个 ajax 请求 该请求在服务器上生成 PDF 此时 我正在尝试更新 file
  • 调用未定义的函数curl_init(),即使它在php7中启用

    我刚刚在我的 Ubuntu 上安装了 php7 起初 没有任何问题 我的网站可以运行 但突然间 它开始返回 Call to undefined function curl init 错误 现在 我的页面包含的curl代码不起作用 在 php
  • 在 SwiftUI 3.0 iOS 15 中调整视图与键盘显示

    我的注册页面有VStack嵌入一 个ScrollView嵌入在VStack 在最里面VStack我有一系列TextField与定制TextFieldStyle 注册页面的 UI 如下所示 VStack ScrollView VStack s
  • Azure Powershell Linux

    除了 Linux Azure Powershell 之外 是否还有更多适用于 Linux Azure Powershell 的 cmdlet 是否有 Azure Powershell 的官方存储库对于Linux 有没有办法让终端在启动时启动
  • android 中的 vimeo 视频为 .mp4 格式

    我想在我的 Android 应用程序中播放 vimeo 视频 要播放我需要 mp4 格式的视频 我在下面的链接中有用户将视频获取为 mp4 格式 当我在浏览器中点击此网址时 它会要求我将文件另存为 mp4 格式 但是当我尝试通过编码获得相同
  • 自定义绘制控件的糟糕性能

    我正在做简单的图形控制wpf 我无法解释也无法解决性能问题 与 winform 相比 它太慢了 也许我做错了什么 我准备了demo来演示这个问题 这是测试控制 public class Graph FrameworkElement priv
  • 如何在 IIS 上使用 ASP.NET Core 3.1 API 部署 Angular SPA?

    我想象应该是简单的场景 有 Angular 8 SPA ASP NET Core 3 1 Web API 想在Windows Server上部署IIS的已通读 使用 IIS 在 Windows 上托管 ASP NET Core https
  • C++ 查找单词中的 Anagrams

    我正在开发一个程序 该程序使用以下命令来检查特定单词是否是字谜词std count但是 我认为我的功能逻辑不正确 而且我似乎无法弄清楚 假设文件中有以下单词 Evil Vile Veil Live 我的代码如下 include
  • PowerMock:模拟私有静态最终变量,具体示例

    要通过此测试必须进行的绝对最小模拟是什么 code class PrivateStaticFinal private static final Integer variable 0 public static Integer method
  • 使用 ODBC 转义包含问号的访问表名称

    我有一个Access数据库要查询如下 id name Print 1 one Yes 2 two No 现在 我在 java 中的查询 使用带有 ODBC 连接器的PreparedStatement 如下所示 select from tab
  • 将 pandas GroupBy 中的列值聚合为字典

    这是我之前面试的时候也问过的问题 我们的输入数据具有以下列 语言 产品 ID 货架 ID 排名 例如 输入将具有以下格式 English 742005 4560 10 2 English 6000075389352 4560 49 Fren
  • 如何左移一位特定位?

    我只想在特定位置左移一位 保留其位置0 所以我不想用 lt lt 运算符 这是一个示例 假设变量具有值1100 1010我想移动第四位那么结果应该是1101 0010 到达那里的步骤 从原始数字中提取位值 将位值左移一位 将位移后的值合并回
  • 幂集生成函数的时间复杂度

    我试图计算出我编写的函数的时间复杂度 它生成一个电源组 http en wikipedia org wiki Power set对于给定的字符串 public static HashSet