关闭编译器优化功能?我的C#代码用于评估算法的顺序,对于简单的循环,返回logN或N^3而不是N
作为学习练习,我正在编写一个库来评估算法的复杂性.我这样做是通过查看给定输入n的Algorithm需要多长时间的时间,然后进行多项式回归,以查看该算法是否最好由N,N^2,Log(n)等拟合.似乎适用于n^2和logn.这是最简单的情况,n使我感到悲伤.对于订单n算法,我正在使用以下内容: uint LinearAlgorithm2(uint n) { uint returnValue = 7; for (uint i = 0; i
12 2024-04-26
编程技术问答社区
将数组转换为集合的时间复杂度 (Big-O)
因此,有多种方法可以将Array转换为js. 中的Set 示例#2 肯定是 o(n),因为在数组的所有元素中迭代.这是示例#1 的情况吗?或JS在我们的背景中对我们进行一些优化? 如果是,使用示例#1 ? 是否有缺点 示例1 const arr = [ 1, 3, 2, 3, 5 ]; const set = new Set(arr); console.log(set); /* Output: Set { 1, 3, 2, 5 } */ 示例2 const arr = [ 1, 3, 2, 3, 5 ]; const set = new Set(); arr.map(item => set.add(item)); console.log(set); /* Output: Set { 1, 3, 2, 5 } */ 解决方案 它仍然是O(n); JS没有神奇的方法将所有n元素放入Set>中,而不会实际迭代所有n元素.少于O
20 2024-04-22
编程技术问答社区
当基于某些(不是全部)属性值比较列表内容时,嵌套foreach的替代品
作为这个问题,反复指出我使用O(n^2)问题,与此类似的代码... public class Foo { public string IdentityValue {get;set;} public string Prop1 {get;set;} public string Prop2 {get;set;} } List itemSet1 = GenerateLargeItemSet(); //makes a large list, > 5000 items for example List itemSet2 = GenerateLargeItemSet(); foreach (var itemFromSet1 in itemSet1) { //does a corresponding item exist in itemSet2? var itemSet2Item = itemSet2.FirstOrDefault(i => i.
26 2024-04-21
编程技术问答社区
如何解决质数函数的Big-O记数法?
我试图理解big-o符号.很抱歉,如果我问的是太明显的事情,但我似乎无法将我的头缠绕. 我具有以下我要计算的big-o符号的C#代码函数. for (i = 2; i (i / j)) Console.WriteLine("{0} is prime", i); } 现在我到目前为止得到的是,我认为if条款都被认为是恒定的o(1),而没有考虑到该算法的计算?而且,如果我正确理解了一个循环 的单个 for(i = 0; i
20 2024-04-18
编程技术问答社区
.NET System.String.length属性采用什么时间顺序?
我有人建议我避免反复打电话String.Length,因为每次我打电话时都会重新计算.我以为String.Length在o(1)时间内运行. String.Length比这更复杂吗? 解决方案 这是不好的建议 - String.Length确实是O(1).这不像strlen在c. 中 诚然,在据我所知,这些文档弦的不变性使得使O(1)的不变性不是. (不仅是o(1),而且也很快也很恒定时间.) 坦率地说,如果有人给出这种建议,我会对他们也可能提供的其他建议更加怀疑... 其他解决方案 string.LENGTH为o(1).人们告诉您不要在循环中调用它的原因是因为它是属性访问,这与方法调用相同.实际上,一个额外的方法很少会带来任何显着差异. 一如既往,不要开始浏览您的代码缓存到string.string.gength.除非您的参考器说这是性能问题的根源. 其他解决方案 回想一下字符串是不变的. System.String.Length永远不会改变.
10 2024-04-18
编程技术问答社区
一个嵌套的for循环里面有一个Any()的大O会是什么?
这个问题基本上是我的在这里回答的后续.我真的很想说这种算法是什么,但是我不确定我的主张是否完全合理. 所以给定两个数组: B = [ "Hello World!", "Hello Stack Overflow!", "Foo Bar!", "Food is nice...", "Hej" ] A = [ "World", "Foo" ] 什么是: 的大o List results = new List(); foreach (string test in B) { if (A.Any(a => test.Contains(a)) results.Add(test); } 我相信它在O(n)和O(n^2)之间,因为这取决于Any()匹配的结果... 解决方案 令A的长度为N,B的长度为M.我们有两个极端情况: worst 一个: a => test.Contains(a) 返回false在每
22 2024-04-18
编程技术问答社区
Linq OrderBy().ThenBy()方法序列的时间复杂性是多少?
我在项目中使用Linq和Lambda操作,我需要根据类的两个属性对列表进行排序.因此,我使用了orderby().thenby()方法如下: class ValueWithIndex{ public long Value; public int Index; } ... List valuesWithIndex = new List(); for (int i = 0; i v.Value).ThenBy(v => v.Index); .
16 2024-04-17
编程技术问答社区
带有自定义IEqualityComparer的Distinct()方法的大O
任何人都知道Distinct()方法中使用的算法的大o,并使用自定义IEqualityComparer? 解决方案 这里有一个相同的问题,关于" 请参阅有关不同的答案中的此部分: 独特的,Groupby加入,我相信 还有设定聚集方法 (联合,相交和除外)使用 哈希,所以它们应该接近 o(n)而不是o(n²).
8 2024-04-15
编程技术问答社区
C# List remove from end, really O(n)?
我已经阅读了几篇文章,说明了list.removeat()在o(n)时间中. 如果我做类似: 的事情 var myList = new List(); /* Add many ints to the list here. */ // Remove item at end of list: myList.RemoveAt(myList.Count - 1); // Does this line run in O(n) time? 从列表的末尾删除应该是o(1),因为它只需要减少列表计数. 我需要写自己的课程以具有此行为,还是在o(1)时间已经执行的c#列表末尾删除项目? 解决方案 在一般List::RemoveAt中为o(n),因为需要在数组中的一个插槽上移动元素后移动元素.但是,对于从列表末尾删除的具体情况,不需要换移,因此o(1) 其他解决方案 删除最后一项实际上是O(1)操作,因为仅在这种情况下List不会在数组中移动下一个项目
14 2024-04-14
编程技术问答社区
为什么按键访问字典中的一个元素是O(1),即使散列函数可能不是O(1)?
我看到如何通过键访问您的收藏.但是,哈希功能本身在幕后有很多操作,不是吗? 假设您的哈希功能非常有效,那么它仍然可能需要许多操作. 可以解释吗? 解决方案 HashFunc本身在幕后有很多操作 当然是事实.但是,这些操作的数量取决于键的大小,而不取决于插入键的 hash表的大小:要计算的操作数量对于具有10或一万个条目的表中的键,哈希功能是相同的. 这就是为什么通常将哈希函数的调用被视为o(1)的原因.这适用于固定尺寸键(积分值和固定长度字符串).它还为具有实际上限的可变大小键提供了一个不错的近似值. 通常,哈希表的访问时间为o(k),其中k是哈希键大小的上限. 其他解决方案 O(1)并不意味着即时. O(1)表示恒定,而无需考虑数据的大小.哈希功能需要一定时间,但是随着集合的大小,该时间的量不会扩大. 其他解决方案 这意味着无论您的收藏量如何,它仍然需要几乎相同的时间来检索其任何成员. 因此,换句话说,有5个成员的字典将比
14 2024-04-13
编程技术问答社区
通过删除子数组使数组的左右两边之和相等
c程序找到了删除子阵列的启动和结束索引以使给定数组的左侧和右侧相等.如果它不可能打印-1.我需要它用于任何数组,这只是用于测试.这是一个找到平衡的代码. #include int equilibrium(int arr[], int n) { int i, j; int leftsum, rightsum; /* Check for indexes one by one until an equilibrium index is found */ for (i = 0; i
8 2024-04-09
编程技术问答社区
这个乘法算法的时间复杂度是多少?
对于经典的采访问题"您如何在没有乘法操作员的情况下执行整数乘法?",最简单的答案当然是C: 中的以下线性时间算法 int mult(int multiplicand, int multiplier) { for (int i = 1; i int log2( double n ) { return log(n) / log(2); } int mult(int multiplicand, int multiplier) { int n
22 2024-04-09
编程技术问答社区
统一的散列函数
哈希表基础知识: - 进行了重大测试.所有的帮助将不胜感激. 我基本上对钥匙的均匀散列有些困惑. ---------------------- | X X X
14 2024-04-08
编程技术问答社区