Tag: 算法

计算C#素数的最快方法?

我实际上有一个问题的答案,但它没有并行化,所以我对改进算法的方法感兴趣。 无论如何,它对某些人来说可能是有用的。 int Until = 20000000; BitArray PrimeBits = new BitArray(Until, true); /* * Sieve of Eratosthenes * PrimeBits is a simple BitArray where all bit is an integer * and we mark composite numbers as false */ PrimeBits.Set(0, false); // You don’t actually need this, just PrimeBits.Set(1, false); // remindig you that 2 is […]

Google的“编码折线算法”的C#实现

有没有人在C#中使用Google的编码折线算法实现简洁而强大的实现? 我基本上想要这个签名的实现: public string Encode(IEnumerable points);

自我训练算法

我想针对特定问题开发自我训练算法。 为了简单起见,我将把它归结为简单的例子。 更新:我已经添加了一个工作解决方案作为下面这个问题的答案。 假设我有一个来自数据库的大量实体列表。 每个实体属于同一类型,并具有4个byte类型的属性。 public class Entity { public byte Prop1 { get; set; } public byte Prop2 { get; set; } public byte Prop3 { get; set; } public byte Prop4 { get; set; } } 现在,我想根据一个简单的条件动态测试每个实体的一个或多个属性。 这基本上意味着我想针对这种情况测试所有属性的所有可能组合。 为了完成这项工作,我为属性创建了一个位掩码。 [Flags] public enum EEntityValues { Undefined = 0, Prop1 = 1, Prop2 = 2, […]

在字符串中查找关键字和关键短语的算法

我需要有关如何编写算法的建议或指示,该算法将在字符串中找到关键字或关键字 。 该字符串包含: 用英文写的技术信息(GB) 单词大多由空格分隔 关键字不包含空格,但可能包含连字符,撇号,冒号等。 关键短语可能包含空格,逗号或其他标点符号 如果两个或多个关键字一起出现,则可能是一个关键短语,例如“逆变器驱动” 该文本还包含HTML,但如有必要,可以事先删除 非关键字将是“and”,“the”,“we”,“see”,“look”等字样。 关键字不区分大小写,例如“逆变器”和“逆变器”是相同的关键字 该算法具有以下要求: 在批处理场景中操作,例如每天运行一次或两次 处理字符串的长度从大约200到7000个字符不等 在不到1小时内处理1000个字符串 将在具有中等功率的服务器上执行 写在以下之一: C#,VB.NET或T-SQL甚至可能是F#,Python或Lua等。 不依赖于预定义关键字或关键短语列表 但可以依赖关键字排除列表,例如“和”,“the”,“go”等。 理想情况下可转换为其他语言,例如,不依赖于语言特定的function,例如元编程 输出关键短语列表(频率降序),后跟关键字列表(频率降序) 如果它可以在几秒钟内处理多达8000个字符,那将是非常酷的,因此它可以实时运行,但我已经足够了! 只是寻找建议和方向: 这应该被视为两个独立的算法吗? 有没有我可以遵循的既定算法? 我的要求可行吗? 非常感谢。 PS将从SQL Server 2008 R2数据库中检索字符串,因此理想情况下该语言将支持此function,否则它必须能够读取/写入STDOUT,管道,流或文件等。

我需要在.net中使用称重选项的随机算法

我的.net项目中有一个要求,我需要从集合中选择一个项目,每个项目都有一个权重(整数从1到10)分配给它。 我需要一个随机生成器来考虑这个权重,即权重越高,选择对象的机会就越多。 虽然算法描述也很好,但是.net中的任何代码示例都很受欢迎。 编辑:快速复制/粘贴C#代码,以防有人偶然发现。 class RandomWeightedSelector { private List items = new List(); public void Add(T item, uint weight = 1) { for (int i = 0; i < weight; i++) items.Add(item); } public T GetRandom() { return items[new Random().Next(0, items.Count)]; } }

如何有效地计算移动标准差

下面你可以看到我的C#方法来计算每个点的布林带(移动平均线,上行带,下行带)。 如您所见,此方法使用2 for循环来计算移动平均值的移动标准偏差。 它曾经包含一个额外的循环来计算过去n个时期的移动平均值。 这个我可以通过在循环开始时将新点值添加到total_average并在循环结束时删除i-n点值来删除。 我现在的问题基本上是:我可以用移动平均线管理的类似方式删除剩余的内部循环吗? public static void AddBollingerBands(SortedList<DateTime, Dictionary> data, int period, int factor) { double total_average = 0; for (int i = 0; i = period – 1) { double total_bollinger = 0; double average = total_average / period; for (int x = i; x > (i – period); x–) { total_bollinger […]

在.NET中生成所有整数的随机,非重复序列

在.NET中是否有一种方法可以以随机顺序生成所有 32位整数( Int32 )的序列,而不会重复,并且以内存效率的方式生成? 内存效率意味着最多只能使用几百兆字节的主内存。 理想情况下,序列应该类似于IEnumerable ,并且只有在请求时才会延迟返回序列中的下一个数字。 我做了一些快速的研究,我找到了一些部分解决方案: 使用最大线性反馈移位寄存器 – 如果我理解正确的话,它只会按递增顺序生成数字并且不会覆盖整个范围 在集合上使用Fisher-Yates或其他混洗算法 – 这会在大范围内违反内存限制 保持一个类似集合的集合并继续生成一个随机整数 (可能使用Random ),直到它不重复,即它不在集合中 – 除了可能无法满足内存需求之外,生成最后一个时它会变得非常慢序列中的数字。 超过32位的随机排列,但我想不出一种确保不可重复性的方法。 还有另一种方法来看待这个问题 – 也许利用固定的价值范围 – 这将提供满足内存要求的解决方案吗? 也许.NET类库带有一些有用的东西? 更新1 感谢大家对解决方案的见解和创意建议。 我将尝试尽快实施和测试(正确性和内存效率)这里提出的2或3个最有希望的解决方案,发布结果然后选择“赢家”。 更新2 我试着在下面的评论中实现hvd的建议。 我尝试使用.NET中的BitArray和我的自定义实现,因为.NET只限于int.MaxValue条目,因此不足以覆盖整个整数范围。 我喜欢这个想法的简单性,如果它工作正常,我愿意“牺牲”那512 MB的内存。 不幸的是,运行时间非常慢,花费数十秒来生成我的机器上的下一个随机数,该机器具有3.5 GHz Core i7 CPU。 所以不幸的是,如果要求生成许多随机数,这是不可接受的。 我猜它是可以预测的,如果我没有弄错的话,它是一个O(M x N)算法,其中N是2 ^ 32而M是请求的整数的数量,因此所有这些迭代都需要付出代价。 理想情况下,我想在O(1)时间内生成下一个随机数,同时仍满足内存要求,这里建议的下一个算法可能适用于此。 我会尽快给他们试一试。 更新3 我刚刚测试了线性同余发生器 ,我可以说我对结果非常满意。 对于这个post中的赢家位置来说,它看起来像是一个强有力的竞争者。 正确性 :所有整数只生成一次(我使用了一个位向量来检查)。 随机性 :相当不错。 […]

将“average”参数添加到.NET的Random.Next()以获得曲线结果

我希望能够为Random.Next(Lower, Upper)添加“ average ”参数。 此方法将具有min , max和average参数。 我创建了一个像这样的方法一段时间用于测试(它使用列表并且非常糟糕),所以我想了解如何编写正确的实现。 拥有此function的原因是我游戏中的许多程序/随机事件。 假设你希望大多数时候树木高10单位,但仍然可以低到5或15.一个正常的Random.Next(5,15)会返回结果,但这种方法会有更多的钟声向它的结果曲线。 意义10将是最常见的,并且在每个方向上出去都不太常见。 例如,将平均值降低到7将会产生相对较小的树(或者正在使用的任何树),但是大的树仍然是可能的,但这种情况并不常见。 以前的方法(伪代码) Loop from min to max Closer to average numbers are added to the list more times A random element is selected from the list ,更接近平均值的元素被添加更多,因此更有可能选择它们。 好吧,这就像把一堆糖果放在一个袋子里然后随机挑一个。 是的,慢。 你对改进这个有什么看法? 插图:(不完全准确,但你看到了这个想法) 注意:许多人建议使用钟形曲线,但问题是如何在这种意义上改变曲线的峰值以支持一侧。

如何在C#中以编程方式创建柔和的颜色?

根据所需颜色的数量等间距生成它们。 如果指定的计数为8,则看起来像这样: List GeneratePastelColors (int count)

寻找集体智慧.Net / C#资源

首先,我意识到这是一个非常类似的问题: 哪个是.net / java中集体智能的优秀开源库? …但是那个问题的所有答案都是以Java为中心的,所以我再次提出要求,这次更多地寻找.Net(理想C#)的想法。 一点背景; 我最近阅读了Toby Segran关于CI的优秀书籍 ,我刚刚掌握了Satnam Alag的书 (我相信它也很棒,但我刚刚开了它)。 这些是以Python和Java为中心的,我在阅读代码示例时没有任何问题,但由于我是C#开发人员,以我的母语使用其中一些想法会很有趣。 我已经搜索了网络和SO而没有提出太多。 在某种程度上,这是一个好消息,也许我可以将某些内容移植到.Net(建议欢迎),但我还想在我这样做之前先看一下现有项目。 那么,是否有CI粉丝在.Net与OS项目一起工作,我是否错过了一些明显而有趣的书籍/网站/博客? 我意识到CI是一个相当广泛的领域,所以为了缩小它,我主要对聚类/预测/建议领域感兴趣,但我对其他想法持开放态度。 编辑 :刚刚发现了Manning将要出版的这本书,这本书可能会让CI粉丝感兴趣: 智能网的算法 。 根据穆斯的评论编辑澄清; 我正在寻找的是库,框架或大型项目(idealy OS),它们将CI技术与.Net结合使用。 代码示例很棒,但是正如Moose在他的评论中所说,使用Java示例并移植它们很容易。 例如,有一个用Java编写的有趣的项目称为WEKA ,没有理由我不能使用它并进行实验,我只是想知道.Net中是否有类似的事情发生。 我刚刚浏览了Lucene的信息,我发现有一个C#端口,所以这是一个开始……那里还有什么吗? 编辑这不是C#,但它是.Net; 罗伯特皮克林在这里开始收集F#CI资源。 看起来很有趣,但我仍然在寻找C#信息。