Questions tagged «complexity-theory»

计算复杂度理论是理论计算机科学和数学中计算理论的一个分支,其重点是根据计算问题的内在难度对其进行分类。在编程中特别常见的是对时间或空间的“摊销分析”

26
一个正则表达式,永远不会与任何事物匹配
这听起来像是一个愚蠢的问题,但是我与一些开发人员进行了长时间的交谈,这听起来像是一件有趣的事情。 所以; 您的想法是什么-正则表达式看起来像什么,永远不会被任何字符串匹配! 编辑:为什么我要这个?好吧,首先是因为我觉得思考这样的表达式很有趣,其次是因为我需要用于脚本。 在该脚本中,我将字典定义为Dictionary<string, Regex>。如您所见,它包含一个字符串和一个表达式。 基于该字典,我创建了全部使用此字典作为其工作方式参考的方法,其中一种将正则表达式与已解析的日志文件进行匹配。 如果一个表达式匹配,Dictionary<string, long>则为另一个表达式添加一个由表达式返回的值。因此,为了捕获字典中某个表达式不匹配的所有日志消息,我创建了一个名为“未知”的新组。 在这个组中,添加了其他所有不匹配的内容。但是为了防止“未知”表达式与日志消息不匹配(偶然),我必须创建一个表达式,该表达式无论从我提供的字符串来看,都绝不会匹配。 因此,您有理由提出这个“不是真正的问题” ...

5
LINQ方法的运行时复杂度(Big-O)有什么保证?
我最近已经开始使用LINQ了很多,而且我还没有真正看到任何有关LINQ方法的运行时复杂性的信息。显然,这里有许多因素在起作用,因此让我们将讨论范围限制在普通的IEnumerableLINQ-to-Objects提供程序上。此外,让我们假设任何Func以选择器/增幅器/等形式传入的都是廉价的O(1)操作。 它似乎很明显,所有的单次操作(Select,Where,Count,Take/Skip,Any/All,等)将是O(n)的,因为他们只需要步行的顺序一次; 尽管即使这样也会受到懒惰的影响。 对于更复杂的操作,事情变得更加模糊。集合类运算符(Union,Distinct,Except等)使用工作GetHashCode在默认情况下(据我所知),所以它似乎是合理的假设他们使用一个哈希表内,使这些操作为O(n)为好,一般。那使用的版本IEqualityComparer呢? OrderBy需要排序,因此最有可能我们正在查看O(n log n)。如果已经排序怎么办?如果我说怎么样OrderBy().ThenBy()并为两者提供相同的密钥怎么办? 我可以使用排序或哈希查看GroupBy(和Join)。哪有 Contains在a上为O(n)List,但在a上为O(1)HashSet -LINQ是否检查基础容器以查看其是否可以加快速度? 真正的问题-到目前为止,我一直坚信作业是高效的。但是,我可以依靠吗?例如,STL容器清楚地指定了每个操作的复杂性。.NET库规范中是否对LINQ性能有任何类似的保证? 更多问题(针对评论):并 没有真正考虑开销,但是我没想到简单的Linq-to-Objects会有很多。CodingHorror帖子谈论的是Linq-to-SQL,在这里我可以理解解析查询并使SQL增加成本-对象提供程序是否也有类似成本?如果是这样,使用声明性或函数语法有什么不同?


5
B树与哈希表
在MySQL中,索引类型为b树,访问b树中的元素的时间为对数摊销时间O(log(n))。 另一方面,在中访问哈希表中的元素O(1)。 为什么不使用哈希表而不是b树来访问数据库中的数据?

7
大O(logn)日志是e吗?
对于二进制搜索树类型的数据结构,我看到Big O标记通常记为O(logn)。在日志中使用小写的“ l”,这是否意味着以自然对数描述的对数为e(n)?很抱歉这个简单的问题,但是我一直很难区分不同的隐式对数。





3
python set操作的时间复杂度?
Big O表示法中每个python设置操作的时间复杂度是多少? 我正在将Python的set类型用于对大量项目的操作。我想知道每个操作的性能如何受到集合大小的影响。例如,添加,并测试成员资格: myset = set() myset.add('foo') 'foo' in myset 谷歌搜索并没有占用任何资源,但是合理地考虑了Python的set实现的时间复杂性是合理的。 如果它存在,到一些链接像这将是巨大的。如果那里没有这样的东西,那么也许我们可以解决吗? 用于查找所有设置操作的时间复杂度的额外标记。

7
O(N log N)复杂度-与线性相似吗?
所以我想问这个琐碎的问题会被埋葬,但是我对某些事情有些困惑。 我已经用Java和C实现了quicksort,并且正在做一些基本的比较。该图显示为两条直线,C超过Java对应的100,000个随机整数快4毫秒。 我的测试代码可以在这里找到; android基准测试 我不确定(n log n)行是什么样子,但我不认为这是直线。我只是想检查这是否是预期的结果,并且我不应该尝试在我的代码中发现错误。 我将公式粘贴到excel中,对于以10为底的基数,它似乎是一条直线,一开始就有些扭结。这是因为log(n)和log(n + 1)之差线性增加吗? 谢谢, 加夫

6
.NET控制台应用程序退出事件
在.NET中,是否有一种方法(例如事件)来检测控制台应用程序何时退出?我需要清理一些线程和COM对象。 我正在从控制台应用程序运行没有表单的消息循环。我正在使用的DCOM组件似乎要求应用程序泵送消息。 我尝试将处理程序添加到Process.GetCurrentProcess.Exited和Process.GetCurrentProcess.Disposed。 我也尝试过向Application.ApplicationExit和Application.ThreadExit事件添加处理程序,但是它们没有触发。也许那是因为我没有使用表格。




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.