Tag: 算法

如何将2个已排序的列表合并到一个混洗列表中,同时在c#中保持内部顺序

我想要一个混乱的合并列表,它将保持列表的内部顺序。 例如: 清单A:11 22 33 清单B:6 7 8 有效结果: 11 22 6 33 7 8 结果无效:22 11 7 6 33 8

C#给定所需的订单需要空间有效的列表重新排序或排序

我的目标是:给定一个条目列表和一个所需的顺序,根据这个顺序重新排列条目列表。 该列表将非常大,因此空间效率非常重要。 例如: List data = ReadDataFromSomeWhere(); // data => [a, b, c]; List ordering = RandomPermutation(data.Count); // ordering => [2, 1, 3]; data.ReOrderBy(ordering); // data => [b, a, c]; 我可能会弄错,但似乎最直接和节省空间的解决方案是通过排序对数据进行排序/ 排序 。 或更一般地说: 给出两个列表:A,B有没有办法按B排序A? 该function基本上与以下相同: Array.Sort<(Of )>)(array[]()[], array[]()[]) 想到的一种方法是创建一个由A和B组成的新数据类型,即。 配对,然后按B值排序: List A; List B; Assert(A.Count == B.Count); var C = A.Select( (a,idx) => new […]

获取由3d多边形包围的点

我有一个位于3D平面上的多边形。 我希望得到这个多边形所包含的所有点。任何人都可以帮助我吗? 我可以通过平面替换扫描线来制作3D扫描线算法,并获得与我的多边形的平面交叉,但我想要更快的解决方案。 提前致谢。

每次创建相同颜色对应数组的算法?

对于我的程序,我试图创建一个函数,它将生成一个颜色数组(每次应该是相同的,所以没有随机性),其中每种颜色与其他颜色有很大不同。 你为什么要问? 好吧,因为用户可以向用户控件添加自定义项目,并且通过添加每个项目,项目应该与特定颜色相关联。 显然这会很糟糕: Red Dark Red Light Red Pink 因为在视觉上所有这些都在色彩和颜色上非常相似,并且用户将无法区分它们。 理想情况下,函数会产生这样的结果: Red Dark Green Light Cyan Orange 在这种情况下,每种颜色与其他颜色大不相同,并且用户可以容易地在视觉上区分它们。 但是,我在提出一个执行此操作的算法时遇到了一些麻烦。 我知道我想使用Color.FromArgb,但我不确定如何构造循环,其中每个项目与其他项目有很大不同,但每次运行该函数时它都是相同的。 模数运算符可能会有所帮助。我一直在使用不同的方法,但每个方法总是有一个颜色太过类似于数组中的另一种颜色。 我想用循环来做这件事,但这似乎暗示了一种模式以及所有颜色之间的色调,色调或亮度的相似性。 我想我可以硬编码很多值,但我真的不想…… = X. 好吧,如果您有任何想法,请告诉我! 谢谢!!

用于查找非父/祖父/ /等或子/孙等的所有链接对象的算法

我有一个名为Device的对象。 Device可以有一个父 Device 。 Device也可以有n个子Devices 。 我有一个下拉列表,显示所有可选Devices 。 我可以很容易地获得数据库中的所有Devices – db.Devices 。 层次结构可以是无限级别的。 我需要让所有不在树中给定Device之上或之下的Device 。 基本上我要求与给定Device无关的Device (父母/祖父母/祖父母/祖父母/等或儿童/孙子/曾孙子等)。 我还需要从列表中排除给定的Device 。 做这个的最好方式是什么? 我应该使用递归吗? (我使用C#和Entity Framework与SQL Server数据库,所以我可以使用Linq To SQL或使用模型本身。)

我可以检查子序列是否比O(n * n)更快

所以我的问题是主题的名称。 是否存在一种算法,该算法检查B是否是A的子序列,比O(N ^ 2)更快,例如O(NlogN)还是简单的O(N)? 找到的方法就是简单的残酷 for(int i = 0; i < a.Length – b.Length; i++) { if (IsSubsequence(a,b,i)) return i; } return -1;

矩形内最大的空矩形

我的数学不是很好,所以我很难将公式转换成代码,而且我找不到任何现成的谷歌搜索。 我有一个包含很多小矩形的大矩形……我需要做的就是计算最大的空矩形。 Anyonne可以帮帮我吗? 这就是我提出的……没什么可说的,这是一个很大的失败。 Rect result = new Rect(); for (Double l = 0; l < bigRect.Width; ++l) { for (Double t = 0; t < bigRect.Height; ++t) { Double h = 0; Double w = 0; while ((h <= bigRect.Width) && (w !smallRect.IntersectsWith(largestEmpty)) && ((largestEmpty.Height * largestEmpty.Width) > (result.Height * result.Width))) result = largestEmpty; […]

CreditCardAttribute使用哪种算法进行信用卡号格式validation

.NET 4.5包含一个名为CreditCardAttribute的新validation属性,该属性指定数据字段值是信用卡号。 当我反编译包含此类的程序集时,我可以看到以下代码用于信用卡号validation: public override bool IsValid(object value) { if (value == null) { return true; } string text = value as string; if (text == null) { return false; } text = text.Replace(“-“, “”); text = text.Replace(” “, “”); int num = 0; bool flag = false; foreach (char current in text.Reverse()) { if […]

如何检测文本文件的实时更改?

我正在写一个小的PC工具来使用c#或java读取日志文件。 日志文件将采用.txt格式。 应用程序正在运行并写入日志,我希望我的工具同时打开日志,并在将新行写入日志文件时自动刷新。 我的挑战是,如何检测日志文件的变化,以便我的工具具有实时显示能力? 这是一个普遍的问题,但伪代码将不胜感激!

如何将大型数组拆分成更小的数组?

给定一个大数组如何将它分成较小的数组,并将较小数组的大小指定为方法的参数? 例如,给定数字,Split的实现是什么? int[] numbers = new int[7845]; int[][] sectionedNumbers = numbers.Split(1000); sectionedNumbers.Length; //outputs 8 sectionedNumbers[7].Length; //outputs 845