Tag: 算法

如何从给定父节点获取所有子节点?

我有一个父/子ID列表,并希望获得给定父ID的所有子ID。 没有空父项(顶级ID不显示为子ID)。 目前,父/子ID在列表中记录为KeyValuePair,但是如果更好的话,可以很容易地将其更改为另一个数据结构: List<KeyValuePair> groups = new List<KeyValuePair>(); groups.Add(new KeyValuePair(parentID, childID)); 例如,以下是示例父/子。 父母27的孩子将是5944,2065,2066,2067,6248,6249,6250 。 Parent Child 27 1888 1888 5943 1888 5944 5943 2064 5943 2065 5943 2066 5943 2067 2064 6248 2064 6249 2064 6250 任何帮助将不胜感激!

洪水填充递归算法

我正在尝试制作一个可以在c#中填充int数组的算法。 基本上,作为MS Paint中的填充工具,我有一个颜色,如果我在数组中选择(x,y)坐标,它会用新颜色替换所有具有相同初始颜色的邻居。 例如: [0,0,0] [0,1,0] [1,1,0] 如果我将3放入(0,0),则数组变为: [3,3,3] [3,1,3] [1,1,3] 所以我在递归中尝试了它并且确实有效,但并非总是如此。 实际上,我有时会出现“Stack Overflow”错误(似乎合适)。 这是我的代码,如果你能告诉我什么是错的话会很棒:) public int[,] fill(int[,] array, int x, int y, int initialInt, int newInt) { if (array[x, y] == initialInt) { array[x, y] = newInt; if (x 0) array = fill(array, (x – 1), y, initialInt, newInt); if (y 0) array = […]

Kadane用于查找具有最大和的子arrays的算法

我有以下Kadane算法的实现来解决数组的最大子数组的问题: public static decimal FindBestSubsequence (this IEnumerable source, out int startIndex, out int endIndex) { decimal result = decimal.MinValue; decimal sum = 0; int tempStart = 0; List tempList = new List(source); startIndex = 0; endIndex = 0; for (int index = 0; index result) || (sum == result && (endIndex – startIndex) < (index […]

在C#中生成白噪声图像

我需要能够用C#代码生成白噪声图像。 有没有算法可以用白噪声填充图像? 我已经找到了VB如何在这里做的例子,但我不能把它自己移植到.net。

在圆上转录多边形

我目前正试图在圆圈内刻上十边形的对角线 像这样 在c#中我的方法是创建一个圆圈 e.Graphics.DrawEllipse(myPen, 0, 0, 100, 100); 并在里面画线 e.Graphics.DrawLine(myPen, 20, 5, 50, 50); 之后我会绘制一个十边形多边形。 目前我坚持如何将圆分为10个部分/找到圆周上点的正确坐标,因为我的数学不好,我想知道我怎么知道圆的圆周中的下一个点我圈子的大小如上所示。 而且我也想问一个更好的方法来解决我的问题。 谢谢 :)

Fogbugz定价方案的算法

我正在寻找一种算法来计算基于“服务器的FogBugz”定价方案购买的许可证的总成本( http://www.fogcreek.com/FogBugz/PriceList.html )。 Fogbugz的定价是: 1份许可证299美元 5个许可证包999美元 10个许可证包$ 1,899 20个许可证包$ 3,499 50个许可证包$ 7,999 如果您要求报价让我们说136个许可证,他们会将其计算为22,694美元。 如何在C#或LINQ中执行此操作? 任何帮助将不胜感激。

C#合并排序性能

只是一个简单的说明,这不是功课。 我只是想弄清楚我的算法。 我在C#中使用MergeSort,我编写了一个可以根据generics进行排序的递归方法: class SortAlgorithms { public T[] MergeSort (T[] unsortedArray) where T : System.IComparable { T[] left, right; int middle = unsortedArray.Length / 2; left = new T[middle]; right = new T[unsortedArray.Length – middle]; if (unsortedArray.Length <= 1) return unsortedArray; for (int i = 0; i < middle; i++) { left[i] = unsortedArray[i]; } […]

有些条件的随机播放列表

我有一个元素列表,可以使用Equals()轻松比较。 我必须洗牌,但洗牌必须满足一个条件: 第i个元素shuffledList[i]必须不等于i +/- 1元素和i +/- 2处的元素。 该清单应视为循环; 也就是说,列表中的最后一个元素后跟第一个元素,反之亦然。 另外,如果可能的话,我想检查一下是否可以进行随机播放。 注意: 我正在使用c#4.0。 编辑: 根据一些回复,我将再解释一下: 该列表不会有超过200个元素,因此不需要良好的性能。 如果计算它需要2秒钟,这不是最好的事情,但它也不是世界末日。 将保存随机列表,除非真实列表发生更改,否则将使用随机列表。 是的,它是一个“受控”的随机性,但我希望在这个方法上运行的几个会返回不同的洗牌列表。 在我尝试下面的一些回复之后,我将进行进一步的编辑。 编辑2: 两个样本列表因Sehe的实现而失败(两者都有解决方案): 样本1: `List list1 = new List{0,1,1,1,2,2,2,3,3,3,4,4,4,5,5,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,9,10};` 可能的方法: List shuffledList1 = new List {9,3,1,4,7,9,2,6,8,1,4,9,2,0,6,5,7,8,4,3,10,9,6,7,8,5,3,9,1,2,7,8} 样本2: `List list2 = new List {0,1,1,2,2,2,3,3,4,4,4,4,5,5,5,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,9,10};` validation:我正在使用这种方法,它不是我制作的最有效和最优雅的代码片段,但它确实有效: public bool TestShuffle(IEnumerable input) { bool satisfied = true; int prev1 = 0; […]

比较两个列表并找到这两个列表之间的差异的最有效模式/算法是什么?

我们有两个列表,让我们说学生和他们的分数。 我想比较这两个列表并找到新列表和旧列表之间的增量,然后找到插入或更新到新列表中的任何更改的最不具侵入性的方法。 解决这个问题的最佳算法是什么? 希望专注于对新列表和性能的最小量更改。 示例代码: List existingList = new List(); List newList = new List(); public TopLists() { InitTwoLists(); } private void InitTwoLists() { existingList.Add(new ListItem { Name = “Shane”, Score = 100 }); existingList.Add(new ListItem { Name = “Mark”, Score = 95 }); existingList.Add(new ListItem { Name = “Shane”, Score = 94 }); existingList.Add(new […]

减少纬度和经度点数的最快方法

我正在尝试减少并将多个点组合到这些位置的中心点。 现在我通过寻找最接近的一对来强制它,结合它们并重复直到我将它减少到我的目标(旁注:实际上我通过排序(lat*lat+long*long)减少了问题然后在每个点的两边搜索10%,我的测试总是找到该范围内的最短距离)。 举个例子,我想将4000点减少到1000点,理想情况下将最近点组合到最近点的中心。 基本上是构建反映该区域中地址数量的标记点。 有没有更好的算法可以给我尽可能准确的结果? 或者更快的距离算法? 我想它只需要在短距离内准确 现在我找到了距离(维基百科在“投射到飞机上的球形地球”下): double dLat = pos2.LatitudeR – pos1.LatitudeR; double dLon = pos2.LongitudeR – pos1.LongitudeR; double cosLatM = Math.Cos((pos2.LatitudeR + pos1.LatitudeR)/2) * dLon; double a = dLat*dLat + cosLatM*cosLatM; 我已经考虑过将所有点分组在彼此的x距离内,然后扩展x直到达到我的目标最终点数,但我不知道如何使它像我的完美主义所希望的那样准确。 这就是我能想到的所有方式都会略有不同,具体取决于输入点列表的顺序。 编辑以描述我当前的算法如何处理(这是找到我想要的结果的理想方式,但是更快的近似值得): 如果您有x=1,4,5,6,10,20,22 ,则线性描述 它会结合4 + 5 = 4.5 [找到的第一个1.0距离] (4.5 * 2 + 6)/ 3 = 5 – x=1,5,10,20,22 […]