Tag: 算法

百分位数计算

我想在C# (或某些伪代码)中模仿Excel等效PERCENTILE函数。 我怎样才能做到这一点? 该函数应该采用两个参数,其中第一个是值列表,第二个是函数应该计算的百分位数。 坦克! 编辑:我很抱歉,如果我的问题发生了,就像我没有尝试过我自己。 我只是无法理解excel函数是如何工作的(是的,我首先尝试了维基百科和wolfram)并且我认为如果有人在代码中提出它我会更好理解。 @CodeInChaos给出了一个似乎就是我所追求的答案。

使用LINQ(灯具列表)形成锦标赛表

我有一系列的玩家(字符串[]),现在我需要得到一组代表游戏(playerN-playerM)的对象来组织锦标赛表,如下图所示: 期望的最终结果是生成具有需要播放的所有游戏的夹具列表。 如何以高效的方式使用LINQ? 更新:AB,AC,AD不正确 – 游戏应该能够并行运行。 我需要的结果与图片中的顺序相同

线光栅化:覆盖所有像素,无论线条渐变?

基本上,我想使用行算法来确定哪些单元格可以检查我的raycaster的碰撞。 Bresenham并不是很好,因为它使用统一厚度的方法,这意味着它忽略了至少半覆盖线的细胞。 根本不是很好,因为这意味着我的线路的某些部分没有被检查与单元格的交叉点,导致错误。 我似乎无法找到任何“粗线”算法,任何人都可以帮我找到一个? 格林:我想要什么。 红色:我目前拥有和不想要的东西。

我需要一个最优算法来找到数字N的最大除数。最好是在C ++或C#中

我目前正在使用以下代码,但它对于大数字来说非常慢 static int divisor(int number) { int i; for (i = number / 2; i >= 1; i–) { if (number % i == 0) { break; } } return i; }

用于比较XML节点的高效算法

我想确定XML文档中的两个不同的子节点是否相等。 如果两个节点具有相同的属性集和子注释,并且所有子注释也相等(即整个子树应该相等),则应认为它们是相等的。 输入文档可能非常大(最多60MB,超过100000个节点需要比较)并且性能是个问题。 检查两个节点是否相等的有效方法是什么? 例: Hello World 此XML片段描述了OpenXML文档中的段落。 该算法将用于确定文档是否包含具有与文档前面的另一段相同属性(w:pPr节点)的段落(w:p节点)。 我有一个想法是将节点的外部XML存储在一个哈希集中(通常我必须首先得到一个规范的字符串表示,其中属性和子注释总是以相同的方式排序,但我可以期望我的节点已经到以这种forms)。 另一个想法是为每个节点创建一个XmlNode对象,并编写一个比较所有属性和子节点的比较器。 我的环境是C#(。Net 2.0); 我们非常欢迎任何反馈和进一步的想法。 也许有人甚至已经有了一个很好的解决方案? 编辑:微软的XmlDiff API实际上可以这样做,但我想知道是否会有一个更轻量级的方法。 XmlDiff似乎总是产生一个diffgram,并且总是先生成一个规范的节点表示,这两件事我都不需要。 EDIT2:我最终根据这里提出的建议实现了我自己的XmlNodeEqualityComparer。 非常感谢!!!! 谢谢,divo

绘制有向非循环图:最小化边缘交叉?

以树forms在DAG中布置顶点(即顶部没有内边的顶点,顶点仅依赖于下一层上的顶点等)相当简单,没有图形绘制算法,如Efficient Sugiyama。 但是,是否有一个简单的算法可以最大限度地减少边缘交叉? (对于某些图形,可能无法完全消除边缘交叉。)图片说千言万语,所以有一种算法会暗示没有交叉边缘的东西 。 ( 与此相比 )。 编辑:结果 我已经接受了Senthil的建议graphviz / dot – 快速浏览文档确认它很容易用作库或外部工具 ,并且输出格式非常容易解析 。 然而,我最终选择使用GraphSharp,因为我已经在使用.NET等(虽然它绝对不像dot那么强大)。 结果是“足够好”,并且通过一点边缘路由和调整可以做得更好(模糊文本是因为3.5 WPF )。 自动布局图http://public.blu.livefilestore.com/y1pEY8I95GtlzcxZzhDMhhKoUyejT_sVVZ4jlsDK2fdl6XAR4WV4-yuSesY6chXokmAZxdJXZ4Bv674TqwpT1-fOg/dag3.gif 这是完整的 C#代码(这是引用QuickGraph或GraphSharp的所有代码 – 是的;就这么简单): internal static class LayoutManager { private const string ALGORITHM_NAME = “EfficientSugiyama”; private const bool MINIMIZE_EDGE_LENGTH = true; private const double VERTEX_DISTANCE = 25; private const double LAYER_DISTANCE = 25; private […]

如何找到给定字符串中最长的回文?

可能重复: 编写一个返回给定字符串中最长回文的函数 我知道如何在O(n ^ 2)中执行此操作。 但似乎存在更好的解决方案。 我发现了这个 ,并且有一个O(n)答案的链接,但它是用Haskell编写的,对我来说并不清楚。 在c#或类似的地方获得答案会很棒。

有效地消除.NET表达式树中的常见子表达式

我编写了一个DSL和一个从中生成.NET表达式树的编译器。 树中的所有表达式都是无副作用的,并且表达式保证是“非语句”表达式(没有本地,循环,块等)。 ( 编辑 :树可能包括文字,属性访问,标准操作符和函数调用 – 这可能正在做内容中的memoization等奇特的事情,但是外部无副作用)。 现在我想对它执行“Common sub-expression elimination”优化。 例如,给定一个对应于C#lambda的树: foo => (foo.Bar * 5 + foo.Baz * 2 > 7) || (foo.Bar * 5 + foo.Baz * 2 < 3) || (foo.Bar * 5 + 3 == foo.Xyz) …我想生成树等价的(忽略一些短路语义被忽略的事实): foo => { var local1 = foo.Bar * 5; // Notice that this local […]

C#:从字符串中删除常见的无效字符:改进此算法

考虑从字符串中删除无效字符的要求。 只需要删除字符并替换为blank或string.Empty 。 char[] BAD_CHARS = new char[] { ‘!’, ‘@’, ‘#’, ‘$’, ‘%’, ‘_’ }; //simple example foreach (char bad in BAD_CHARS) { if (someString.Contains(bad)) someString = someString.Replace(bad.ToString(), string.Empty); } 我真的很喜欢这样做: if (BAD_CHARS.Any(bc => someString.Contains(bc))) someString.Replace(bc,string.Empty); // bc is out of scope 问题:您对重构此算法或任何更简单,易于阅读,高性能,可维护的算法有什么建议吗?

文本的C#Diff算法

我正在寻找一种差异算法,它将产生类似SO的编辑修订页面的结果。 我或多或少刚开始寻找,我不反对自己做,但我不需要重新发明轮子。 我将使用C#4.0。 我基本上有两个字符串,旧字符串和新字符串。 我想通过突出显示和突破来了解新增内容的变化。