Tag: 算法

用于查找文本中所有关键字的高效算法

我有很多字符串包含许多不同拼写的文本。 我通过搜索关键字来标记这些字符串,如果找到关键字,我会使用该关键字的关联文本。 假设搜索字符串可以包含文本“schw。”,“schwa”。 和“施瓦茨”。 我有三个关键字都解析为文本“schwarz”。 现在我正在寻找一种有效的方法来查找所有关键字,而无需执行string.Contains(关键字)为每个关键字。 样本数据: H-Fuss ahorn 15 cm/SH48cm Metall-Fuss chrom 9 cm/SH42cm Metall-Kufe alufbg.12 cm/SH45c Metall-Kufe verchr.12 cm/SH45c Metall-Zylind.aluf.12cm/SH45cm Kufe alufarbig Metall-Zylinder hoch alufarbig Kunststoffgl.schw. – hoch Kunststoffgl.schw. – Standard Kunststoffgleiter – schwarz für Sitzhoehe 42 cm 示例关键字(键,值): h-fuss, Holz ahorn, Ahorn metall, Metall chrom, Chrom verchr, Chrom alum, Aluminium aluf, Aluminium […]

如何在不存储卡片的情况下实施经销商类别?

题 即使只有52张牌,我在“ 解释”部分描述的permutationIndex也是一个巨大的数字; 它是52!一个数字52! ,需要29个字节来存储。 因此, 我不知道计算大范围的permutationIndex的简单方法 ,并以最小成本存储索引,或者也可以计算它。 我在想这个问题的解决方案是三种算法: 一种算法,它计算正确的permutationIndex来实现Dealing方法 一种计算正确permutationIndex以实现Collect方法的算法 一种以最小成本存储(或计算) permutationIndex的算法 说明 我最初尝试使用置换实现一个范围从int.MinVale到int.MaxValue的整数句柄生成器 。 因为范围非常大,所以我从实现一个Dealer类开始, 有52张卡,它们并不真正存储像hashset或array这样的卡片组,甚至不需要随机 (初始除外)。 对于给定范围的序数,我认为其中一个完整排列的每个序列都有一个索引,并将其命名为permutationIndex 。 我使用索引来记住它是哪个排列而不是真正存储序列。 序列是卡片组的可能顺序之一。 这里有一个动画图形模拟示例,以显示我的想法。 每次我发卡时,我都会更改permutationIndex并dealt (已发卡的数量),我知道哪些卡是那些卡,哪些卡还在手中。 当我收回已发卡时,我会知道卡号,并将其放在顶部,它也会成为下次交易的卡。 在动画中, colleted是卡号 。 有关更多信息,请按以下方式 代码说明 仅有三个3的概念样本Dealer类如下。 代码是用c#编写的,我也在考虑任何与语言无关的解决方案。 以下是示例代码的一些描述 使用Dealing()方法,我们得到一些处理的卡片。 它总是返回最右边的数字(与数组相关),然后通过更改permutationIndex将其左边的数字(比如下一个可用的数字)滚动到最右边的位置。 方法Collect(int)用于收集并将处理后的卡片放回到牌组中。 它会改变permutationIndex ,根据卡的数量返回给经销商。 dealt的整数表示我们dealt了多少张牌; 从最左边到存储在dealt中的计数都是发牌。 使用permutationIndex ,我们知道卡的顺序。 不使用示例代码中的int[,]数组,只是为了帮助设想排列。 switch语句被认为是用计算permutationIndex算法实现的。 permutationIndex与此答案中描述的内容相同 快速置换 – >数字 – >置换映射算法 示例代码 public static […]

3D中两个矩形之间的交点

为了获得3D中两个矩形之间的交线,我将它们转换为平面,然后使用它们法线的叉积得到交线,然后我尝试使线与矩形的每个线段相交。 问题是线条平行于三个线段,并且只与NAN,NAN,NAN中的一个相交,这是完全错误的。 你能告诉我我的代码有什么问题吗? 我使用此链接中的vector3 http://www.koders.com/csharp/fidCA8558A72AF7D3E654FDAFA402A168B8BC23C22A.aspx 并创建了我的飞机课程如下 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace referenceLineAlgorithm { struct Line { public Vector3 direction; public Vector3 point; } struct lineSegment { public Vector3 firstPoint; public Vector3 secondPoint; } class plane_test { public enum Line3DResult { Line3DResult_Parallel = 0, Line3DResult_SkewNoCross = 1, Line3DResult_SkewCross = 2 }; #region […]

如何获得一系列字母的所有可能模式

可能重复: 有没有更好的方法来排列字符串? 让我们说我有这些信件 A B C D 我希望在一个4个字母长的字符串中得到这些字母的每一个可能的模式/组合。 AAAA 咩咩咩 畜牧业协会 daaa ABAA ACAA ACAD ABBA 等等。 我可以用什么循环或模式列出每种可能的组合? 我在C#中写这个,但是C ++和javascript中的例子也是受欢迎的。 我目前的想法只为每个字母增加一个字母。 然后向右移动一次并重复。 这不包括像这样的模式。 ABBA

这个无锁的.NET队列线程安全吗?

我的问题是,下面包含的类对于单读者单作者队列类线程安全吗? 这种队列称为无锁,即使队列已填满也会阻塞。 数据结构的灵感来自Marc Gravell在StackOverflow 上实现的阻塞队列 。 结构的要点是允许单个线程将数据写入缓冲区,而另一个线程则读取数据。 所有这些都需要尽快发生。 Herb Sutter在DDJ的文章中描述了类似的数据结构,但实现是在C ++中。 另一个区别是我使用了一个vanilla链表,我使用了一个链表的数组。 我不是仅仅包含一段代码,而是将所有内容与允许的开源许可证(MIT许可证1.0)一起包含,以防任何人发现它有用,并且想要使用它(原样或修改)。 这与Stack Overflow上有关如何创建阻塞并发队列的其他问题有关(请参阅在.NET中创建blockinq队列和在.NET中创建 线程安全阻塞队列 )。 这是代码: using System; using System.Collections.Generic; using System.Threading; using System.Diagnostics; namespace CollectionSandbox { /// This is a single reader / singler writer buffered queue implemented /// with (almost) no locks. This implementation will block only if filled /// up. […]

C#:你如何检查列表是否具有相同的大小和相同的元素?

有两个字符串列表 List A; List B; 您建议检查A.Count == B.Count以及B中A的每个元素的最短代码是什么,反之亦然:每个B都在A中(A项和B项可能有不同的顺序)。

什么是以与版本页面上的SO相同的方式对两个字符串进行区分的算法?

我试图逐个区分两个字符串,类似于StackOverflow在版本编辑页面上对两个字符串进行区分的方式。 这样做的算法是什么? 是否有gem或其他标准库可以实现这一目标? 编辑:我已经看到其他差异算法(与Ruby不同),他们似乎导致以下结果: >> o = ‘now is the time when all good men.’ >> p = ‘now some time the men time when all good men.’ >> Differ.diff_by_word(o,p).format_as(:html) => “now someis time the men time when all good men.” 请注意单词基于每个单词的差异? 我希望通过短语进行更多区分,所以上面的代码输出: => “now some time the menis the time when all good men.” […]

找出给定长度的所有可能单词的好方法是什么

我正在尝试在C#中创建一个算法,它产生以下输出字符串: AAAA AAAB AAAC …and so on… ZZZX ZZZY ZZZZ 完成此任务的最佳方法是什么? public static IEnumerable GetWords() { //Perform algorithm yield return word; }

C#中的浮点数是否有良好的radixsort实现?

我有一个带有float类型字段的数据结构。 这些结构的集合需要按浮点数的值进行排序。 是否有基数排序实现。 如果没有,是否有快速访问指数,符号和尾数的方法。 因为如果你最后一次在尾数,指数和指数上对浮点数进行排序。 你在O(n)中排序浮点数。

如何获得最接近给定点的三次贝塞尔曲线?

给出n分: p0,p1,p2,…,pn; 如何得到点c1,c2以便定义的三次贝塞尔曲线 p0,c1,c2,pn 最接近给定点? 我试过最小二乘法。 我在http://www.mathworks.com/matlabcentral/fileexchange/15542-cubic-bezier-least-square-fitting上阅读pdf文档后写了这篇文章。 但我找不到一个好的t(i)function。 using System; using System.Collections.Generic; using System.Linq; using System.Windows; namespace BezierFitting { class CubicBezierFittingCalculator { private List data; public CubicBezierFittingCalculator(List data) { this.data = data; } private double t(int i) { return (double)(i – 1) / (data.Count – 1); // double s = 0.0, d = 0.0; // […]