Tag: 算法

扩展二进制搜索算法以查找要在数组中搜索的键值的第一个和最后一个索引

问题是扩展二进制搜索算法以最有效的方式查找排序数组中所有出现的目标值。 具体地说,算法的输入是(1)整数的排序数组,其中一些数字可能出现不止一次,以及(2)要搜索的目标整数。 算法的输出应该是一对索引值,指示数组中第一次和最后一次出现的整数(如果确实发生的话)。 源代码可以是c#,c,c ++。 另外,我们可能需要查找索引的最大和最小比较数是多少?

2连续c#节目游戏

这是游戏板,只是为了让你了解它的样子(这块板将扩展到7×6) 我想要做的是在连续两种颜色的情况下检测胜利者,类似于考虑对角线组合的游戏“conmect four”。 但是我想在没有使用暴力枚举的情况下这样做。 这个程序背后的代码我已经提出我不是要求解决方案我只需要一个有效算法的帮助 namespace WindowsFormsApplication1 { public partial class Form1 : Form { private Button[] btns; private Button[] btns2; public Form1() { InitializeComponent(); btns = new Button[] { button2, button3 }; btns2 = new Button[] { button4, button5 }; } private void Form1_Load(object sender, EventArgs e) { foreach (var btn in btns) { […]

什么算法.Net用于搜索字符串中的模式?

我现在正在研究字符串搜索算法,并想知道.NET String.Contains函数使用了什么算法。 Reflector显示使用了这个函数,但我不知道它的名字是什么意思。 private static extern int InternalFindNLSStringEx(IntPtr handle, string localeName, int flags, string source, int sourceCount, int startIndex, string target, int targetCount);

具有多边的有向图的循环枚举

如何在多边有向图中找到所有cyles ? 图示例1: 周期: 1-2-6 1-2-3-4 1-2-3-4-5-6 1-2-6-5-3-4 3-4-5 5-6 图示例2(多边4/5): 周期: 1-2-3 1-4 1-5 笔记: 我不想检测一个循环 (布尔结果),我想列出所有循环 。 任何强连接组件算法都不足以解决我的问题(在两个示例中都只找到一个组件)。 我在C#中使用QuickGraph实现,但我很高兴看到任何语言的算法。

查找数组之间的重复项

假设您有两个常量长度为3的整数数组,并且您始终确定给定两个arrray的两个元素将具有相同的值。 所以假设数组A有三个值:a,b,c。 和数组B有三个值:d,e,f。 我们确信其中两个值是相同的。 我们被要求将这四个不同的值放在一个大小为4的数组中,这样输出数组C应该在索引1和2中具有来自数组A和B的相同值,并且在索引0和3处它应该具有不同的值arraysA和B我实现了它,但是对这个解决方案真的不满意……有没有人有更好的解决方案? 除了将我的计数器放在数组中的那个…… 🙂 int[] a = { 1, 201, 354 }; int[] b = { 404, 201, 354 }; int[] c = new int[4]; for (int i = 0; i < c.Length; i++) { Console.WriteLine(c[i]); }

如何在Visual C#中获得数组中第二高的数字?

我有一系列的整数。 我想获得该数组中第二高的数字。 是否有捷径可寻?

以C#/最快的方式实现稀疏数组,将整数映射到特定的桶/范围号

我最初的问题是我需要在C#中实现一个非常快速的稀疏数组。 最初的想法是使用普通的Dictionary并将其包装在我自己的类中,只显示TValue类型参数。 事实certificate这很慢。 所以我的下一个想法是将所需范围内的每个整数( UInt32.MinValue到UInt32.MaxValue ) UInt32.MinValue到某个大小的存储桶并使用它。 所以我正在寻找一种将无符号整数X映射到桶Y的好方法,例如: 将数字0-1023映射到8个不同的桶,每个桶包含128个数字,0-127,128-255。 但是,如果某人有更好的方法在C#中实现快速稀疏数组,那么这也是最受欢迎的。

在c#中,我如何构建从A到ZZ的数组,类似于excel命令列的方式

我正在寻找可以生成数组的代码,其中第一项是A ,然后是B ,然后是C. 。 在Z之后它会转到AA ,然后是AB然后是AC 。 。 。 一直到ZZ 。 在C#中执行此操作的最佳方法是什么?

1D的Perlin噪音?

尽我所能,我找不到任何有关1D Perlin \ Samplex Noise的真实教程。 我在互联网上搜索过但却找不到任何东西。 我发现任何提到1D perlin噪音的网站通常都很不清楚,或只是显示代码

De Bruijn算法二进制数字计数64位C#

我使用“De Bruijn”算法来发现大数(最多64位)的二进制位数。 例如: 1022具有10位二进制数字。 130具有8位二进制数字。 我发现使用基于De Bruijn的表查找使我有能力比传统方式(功率,方形……)计算x100倍。 根据该网站 ,2 ^ 6具有用于计算64位数的表。 这将是c#中暴露的表 static readonly int[] MultiplyDeBruijnBitPosition2 = new int[64] { 0,1,2,4,8,17,34,5,11,23,47,31,63,62,61,59, 55,46,29,58,53,43,22,44,24,49,35,7,15,30,60,57, 51,38,12,25,50,36,9,18,37,10,21,42,20,41,19,39, 14,28,56,48,33,3,6,13,27,54,45,26,52,40,16,32 }; (我不知道我是否正确地从该网站带来了桌子)然后,基于R ..评论在这里 。 我应该使用它来使用输入uint64号码的表。 public static int GetLog2_DeBruijn(ulong v) { return MultiplyDeBruijnBitPosition2[(ulong)(v * 0x022fdd63cc95386dull) >> 58]; } 但是c#编译器不允许我使用“ 0x022fdd63cc95386dull ”,因为它溢出了64位 。 我必须使用“ 0x022fdd63cc95386d ”代替。 使用这些代码。 问题是我没有得到给定输入的正确结果。 例如,做1.000.000计算的数字:17012389719861204799(使用64位)这是结果: 使用pow2方法我在1380ms内得到64百万次的结果。 使用DeBruijn方法,我在32ms内得到结果40 1百万次。 […]