Tag: 算法

旋转M * N矩阵(90度)

我怎样才能旋转矩阵 |3 4 5 6 8| |5 4 3 2 6| |3 3 7 8 9| 至 |8 6 9| |6 2 8| |5 3 7| |4 4 3| |3 5 3| 因为我见过的所有算法都是N * N矩阵。

字节数组的Base-N编码

几天前,我遇到了这个用于Base-36编码字节数组的CodeReview 。 然而,接下来的答案没有触及解码回字节数组,或者可能重复使用答案来执行不同基数(基数)的编码。 链接问题的答案使用BigInteger。 因此,就实现而言,可以对基数及其数字进行参数化。 但是,BigInteger的问题在于我们将输入视为假定的整数。 但是,我们的输入(字节数组)只是一系列不透明的值。 如果字节数组以一系列零字节结束,例如{0xFF,0x7F,0x00,0x00},那么在答案中使用算法时这些字节将丢失(仅编码{0xFF,0x7F}。 如果最后一个非零字节的符号位置位,那么前一个零字节将被消耗,因为它被视为BigInt的符号分隔符。 所以{0xFF,0xFF,0x00,0x00}只能编码为{0xFF,0xFF,0x00}。 .NET程序员如何使用BigInteger创建一个合理有效且基数不可知的编码器,具有解码支持,以及处理字节序的能力,以及“解决”结束零字节丢失的能力?

C#中字符串集合的排列

好像我再次陷入递归算法…… 我的应用程序应该根据用户指定的信息并根据由以下字符串表示的子文件夹结构将文件排序到不同的文件夹: [ROOT] \ brand \ color \ material \ 结构字符串中的标记表示集合: 假设: var brand = new List { “Nike”, “Adidas”, “Reebok” }; var color = new List { “red”, “blue”, “yellow”, “black” }; var material = new List { “leather”, “fabric” }; var data = new List<List>() { brand, color, material }; 而我想要得到的是: [ROOT]\Nike\red\leather [ROOT]\Nike\red\fabric […]

格雷厄姆扫描问题点数很高

我的格雷厄姆扫描算法有一个问题,当我的列表有很多分数,但每次都很好,点数少。 我做了一些截图: 工作:(300分) 不工作(5000分) 角度计算: public static double angle(MyVector3D vec1, MyVector3D vec2) { return Math.Atan2(vec2.Y – vec1.Y, vec2.X – vec1.X) * 180 / Math.PI; } 极角分选点取决于最大Y点: //bubblesort private void sortList() { double temp = 0.0; MyVector3D tempVector = new MyVector3D(); for (int i = 1; i < points.Count; i++) { for (int j = 1; […]

用于在C#2.0中同步两个IList的最佳算法

想象一下以下类型: public struct Account { public int Id; public double Amount; } 在C#2.0中同步两个IList的最佳算法是什么? (没有linq)? 第一个列表(L1)是引用列表,第二个列表(L2)是根据第一个列表同步的列表: 必须从L2中删除L2中不再存在的L2中的所有帐户 必须更新L1中仍存在于L1中的所有帐户(金额属性) 所有在L1中但尚未在L2中的帐户必须添加到L2 ID标识帐户。 找到一个天真的工作算法并不难,但我想知道是否有一个智能解决方案来处理这种情况而不会破坏可读性和性能。 编辑 : 帐户类型无关紧要,可以是类,具有属性,平等成员等。 L1和L2未排序 L2项目不能被L1项目替换,必须更新(逐个字段,属性按属性)

如何比较C#中的两个词典

我有两个Generic Dictionaries.Both有相同的键。但是值可以不同。我想比较第二个字典和第一个字典。如果值之间存在差异,我想将这些值存储在单独的字典中。 1st Dictionary ———— key Value Barcode 1234566666 Price 20.00 2nd Dictionary ————– key Value Barcode 1234566666 Price 40.00 3rd Dictionary ————– key Value Price 40 可以任何人给我一个最好的算法来做这个。我写了一个算法,但它有很多循环。我正在寻求一个简短而有效的想法。也像使用LINQ查询表达式或LINQ lamda表达式的解决方案。我正在使用。带有C#的Net Framework 3.5。 我发现了一些关于Except()方法的东西。但不幸的是我无法理解该方法发生了什么。如果有人解释建议的算法,那就太好了。我总是喜欢学习:)。 谢谢塔博。

所有案例都涉及Bresenham的线算法

我需要检查一行中的所有像素,所以我使用Bresenham的算法来访问其中的每个像素。 特别是我需要检查所有像素是否都位于位图的有效像素上。 这是代码: private void Bresenham(Point p1, Point p2, ref List track) { int dx = p2.X – p1.X; int dy = p2.Y – p1.Y; int swaps = 0; if (dy > dx) { Swap(ref dx, ref dy); swaps = 1; } int a = Math.Abs(dy); int b = -Math.Abs(dx); double d = 2*a + […]

使用单个值填充数组的最快方法

我想用我所拥有的单个值来填充2D数组,但是,我想尽可能以最快的方式完成2D数组的长度总计200k +并且随着时间的推移将有超过200个这样的数组。 我已经查看了Buffer.BlockCopy和Array.Copy,但是,它们都将数组作为源/目标,其中我唯一的数组是目标,源是单个值。 填充数组的最快方法是源是单个值而不是数组?

用于计算.NET中列表最小值/最大值的最短代码

我喜欢类似的东西 int minIndex = list.FindMin(delegate (MyClass a, MyClass b) {returns a.CompareTo(b);}); 是否有内置的方法在.NET中执行此操作?

如何解析布尔表达式并将其加载到类中?

我有以下BoolExpr类: class BoolExpr { public enum BOP { LEAF, AND, OR, NOT }; // // inner state // private BOP _op; private BoolExpr _left; private BoolExpr _right; private String _lit; // // private constructor // private BoolExpr(BOP op, BoolExpr left, BoolExpr right) { _op = op; _left = left; _right = right; _lit = null; […]