Tag: algorithm

序列比对算法使用一组字符而不是一个字符

我从关于对齐算法的一些细节开始,最后,我问我的问题。 如果你知道对齐算法通过开头。 考虑我们有两个字符串: ACCGAATCGA ACCGGTATTAAC 有一些算法如: Smith-Waterman或Needleman-Wunsch ,它们对齐这两个序列并创建一个矩阵。 看看以下部分的结果: Smith-Waterman Matrix § § ACCGAATCGA § 0 0 0 0 0 0 0 0 0 0 0 A 0 4 0 0 0 4 4 0 0 0 4 C 0 0 13 9 4 0 4 3 9 4 0 C 0 0 9 22 […]

在字符串中查找重复内容?

您如何解决以下问题: 我有一个带文本的半大文件(大约10页),我想在本文中找到重复的内容。 更具体地说,给定一个字符串,找到两个相同的最长字符串。 我一直在寻找最长的常见子序列: http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_subsequence 但是这些实现需要两个字符串作为输入。 也许有一项服务已经这样做了?

用于排序对象列表的算法

假设您有一个对象列表。 用户在工作时主要使用所有对象。 如何订购对象列表,以便列表适应订单,用户主要使用? 您可以使用什么算法? 编辑:许多答案建议计算对象的使用次数。 这不起作用,因为所有对象的使用量相同,只是顺序不同。

在C#中动态解压缩IEnumerable或最佳替代方案

让我们假设您有一个函数返回一个延迟枚举的对象: struct AnimalCount { int Chickens; int Goats; } IEnumerable FarmsInEachPen() { …. yield new AnimalCount(x, y); …. } 您还有两个使用两个独立IEnumerable的函数,例如: ConsumeChicken(IEnumerable); ConsumeGoat(IEnumerable); 如何在没有a)事先转换FarmsInEachPen() ToList()的情况下调用ConsumeChicken和ConsumeGoat ,因为它可能有两个zillion记录,b)没有multithreading。 基本上: ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens)); ConsumeGoats(FarmsInEachPen().Select(x => x.Goats)); 但是没有强制双重枚举。 我可以使用multithreading来解决它,但是每个列表的缓冲队列都会变得不必要地复杂化。 所以我正在寻找一种方法将AnimalCount枚举器分成两个int枚举器而不完全评估AnimalCount 。 在锁步中一起运行ConsumeGoat和ConsumeChicken没有问题。 我能够完全理解解决方案,但我并不在那里。 我正在考虑一个辅助函数,它返回一个IEnumerable被输入到ConsumeChicken ,每次使用迭代器时,它在内部调用ConsumeGoat ,从而在锁步中执行这两个函数。 当然,除了我不想多次打电话给ConsumeGoat ..

如何解决素数函数的Big-O表示法?

我想了解Big-O表示法。 很抱歉,如果我问的是太明显的东西,但我似乎无法解决这个问题。 我有以下C#代码函数,我正在尝试计算Big-O表示法。 for (i = 2; i < 100; i++) { for (j = 2; j (i / j)) Console.WriteLine(“{0} is prime”, i); } 到目前为止我得到的是,我认为if子句被认为是常数O(1)并且在计算此算法时没有考虑到这一点? 如果我已经正确理解了一个for循环 for(i = 0; i < 100; i++) 因为它是线性函数,所以O(n)和嵌套循环不依赖于来自周围循环的变量 for(i = 0; i < 100; i++) for(j = 0; j < 100; j++) 是O(n ^ 2)? 但是我如何计算一个函数,例如第二个循环依赖于第一个循环并创建非线性函数的顶部函数? 我发现了一个linearithmic的定义 线性算法可以扩展到巨大的问题。 […]

Big O是一个嵌套的for循环,里面有Any()会是什么?

这个问题基本上是我在这里回答的后续问题 。 我真的想说这个算法的Big-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()匹配的位置……

2个数据表之间的差异

我有两个数据表。 DataTable dtRequired和DataTable dtResult。 我想输出一个数据表,其中包含dtResponse中不存在但在dtRequired中找到的行。 方法1我们一直在使用以下urlhttp://weblogs.sqlteam.com/davidm/archive/2004/01/19/739.aspx中指定的算法。 这个算法在我们的分析中被认为是较慢的算法之一。 方法2因此,我尝试用下面描述的内容替换上述算法。 dtRequired在我使用下面的列上索引以查找行。 if (dtResult.Rows.Count > 0) { lock (dtResult) { DataRow rowfound = null; for (int i = 0; i < dtResult.Rows.Count; i++) { DataRow row = dtResult.Rows[i]; rowfound = dtRequired.Rows.Find(new object[] { row[0], row[1], row[2], row[3], row[4], row[5], row[6], row[7], row[8] }); if (rowfound != null) { […]

我的CRC64校验和编码需要CRC反向代码

有人可以用C#编码CRC64反向算法吗? 我无法编码,无法理解任何事情。 谢谢, 我从C ++复制了CRC64校验和代码并将其转换为C#.NET。 整个代码显示如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CRC64 { public class cCRC64 { public UInt64[] crc64_table = { 0x0000000000000000, 0x42F0E1EBA9EA3693, 0x85E1C3D753D46D26, 0xC711223CFA3E5BB5, 0x493366450E42ECDF, 0x0BC387AEA7A8DA4C, 0xCCD2A5925D9681F9, 0x8E224479F47CB76A, 0x9266CC8A1C85D9BE, 0xD0962D61B56FEF2D, 0x17870F5D4F51B498, 0x5577EEB6E6BB820B, 0xDB55AACF12C73561, 0x99A54B24BB2D03F2, 0x5EB4691841135847, 0x1C4488F3E8F96ED4, 0x663D78FF90E185EF, 0x24CD9914390BB37C, 0xE3DCBB28C335E8C9, 0xA12C5AC36ADFDE5A, 0x2F0E1EBA9EA36930, 0x6DFEFF5137495FA3, 0xAAEFDD6DCD770416, 0xE81F3C86649D3285, 0xF45BB4758C645C51, 0xB6AB559E258E6AC2, 0x71BA77A2DFB03177, 0x334A9649765A07E4, 0xBD68D2308226B08E, […]

Bin Tree Post Order Traversal,No recursion,no node flag

还有另一种方法吗? 花了2个小时试图搞清楚。 我有一个解决方案(参见下面的DumpPostOrder)但是,有更好或更有效的方法吗? 感觉可能有。 规则是 – 没有递归,节点不能有访问标志。 即,你只能使用左+右成员。 我的方法是在这个过程中破坏树。 通过将每一边的子节点设置为null,您可以将节点标记为遍历一次,但我也会查看每个节点有两次子节点:(。有更好的更快方式吗?(对我的预订和顺序实现的评论表示赞赏)但没有必要(即投票,但没有标记答案)。谢谢! using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BinaryTreeNoRecursion { public class TreeNode { public T Value { get; set; } public TreeNode Left { get; set; } public TreeNode Right { get; set; } public TreeNode(T inValue) { Value = inValue; } public […]

什么是“混淆”数值的简单但有效的方法?

假设我有一个包含2列的Access数据库表:一个是ID(从1到20000,顺序,每个都是唯一的),一个是Value(0到500之间的任何数字)。 如何以简单但有效的方式模糊Value字段(使用ID或不使用ID)? 我期望比ROT13混淆稍微有效一些,但不是那么复杂,以至于decoing需要多行代码。 解码在C#代码中完成。 混淆是通过Access中的计算字段完成的。 我将“加密”改为“混淆”以反映目标的简单性,这不是为了防止“攻击”,而是为了避免不小心暴露数据。