Tag: algorithm

编码一个数字,z#base-32的C#实现还是别的什么?

我需要编码/解码一个长达9位但通常长7位的整数。 我想让它更容易沟通/记忆 – 它将通过电话,复制和粘贴,从卡/内存/标签键入,手写在标签上,一般滥用! 我希望使用基本32方案减少位数(同时添加校验和)。 我最赞成z-base-32 (通过RFC4648实现),因为一些设计目标(例如手写)和字母表的选择(小写,置换以支持更容易阅读,写,说,并记住)。 但是,我找不到C#实现,我担心从现有的Python实现移植。 有人有C#实现吗? 或者,是否有人可以使用一组测试用例(规范中的示例除外)来validation端口? 我对有关替代编码方案的建议持开放态度。

重叠的多个日期范围比较:如何有效地进行?

要检查两个不同日期范围内的重叠, {Start1, End1}和{Start2, End2}我正在检查: if ((Start1 = Start2)) { //overlap exists } 问题是, 如果让我说五个日期范围,比较重叠的好方法是什么? 。 检查它们中的任何一个是否相互重叠? 如果我有多个日期范围,如何查找这些范围是否重叠?

实现用于检测自相交多边形的powershell算法

我最初实现了Hoey-Shamos算法,但是它太复杂了以至于未来的可维护性(我没有说明),并且没有正确报告,所以我将使用优化的powershell算法。 我的问题是:如何优化此代码才能使用? 就目前而言,我的代码包含一个嵌套的for循环,两次迭代相同的列表。 编辑:将线条转换为HashSet并使用两个foreach循环…扫描10,000个约45秒。 这还不够。 foreach (Line2D g in lines) { foreach (Line2D h in lines) { if (g.intersectsLine(h)) { return false; } } } // end ‘lines’ for each loop 如果我强制我的“intersectsLine()”方法返回false(出于测试目的),扫描10,000条记录仍然需要8秒(我有700,000条记录)。 这太长了,所以我需要优化这段代码。 在尝试将其与所有其他行进行比较后,我尝试从列表中删除行,但是存在准确性问题(不知道为什么)并且速度增加几乎不可察觉。 这是我的intersectsLine方法。 我在这里找到了另一种方法,但看起来所有的方法调用和诸如此类的东西都会变慢。 计算斜率对我来说似乎并不像是需要太多的计算(如果我错了,请纠正我?) public bool intersectsLine(Line2D comparedLine) { //tweakLine(comparedLine); if (this.Equals(comparedLine) || P2.Equals(comparedLine.P1) || P1.Equals(comparedLine.P2)) { return false; } double firstLineSlopeX, […]

从邻接列表创建树的最有效方法

我有一个对象的邻接列表(从SQL数据库加载的行,带有密钥和它的父键),我需要用它来构建无序树。 它保证没有周期。 这花费的时间太长了(在大约5分钟内仅处理了870K节点中的〜3K)。 在我的工作站Core 2 Duo上运行,有足够的RAM。 关于如何加快速度的任何想法? public class StampHierarchy { private StampNode _root; private SortedList _keyNodeIndex; // takes a list of nodes and builds a tree // starting at _root private void BuildHierarchy(List nodes) { Stack processor = new Stack(); _keyNodeIndex = new SortedList(nodes.Count); // find the root _root = nodes.Find(n => n.Parent == […]

随机二维拼贴地图生成算法

谁能告诉我一种生成岛屿结构或山地结构的方法,比如我的世界? 我只是在为随机形状生成寻找合适的理论,但它应该保持一个定义的基本模式。 喜欢:岛屿应该是圆形的,但在形状和尺度上变化(最小/最大宽度和高度)。 或:河流不应该是直线,它们应该有曲线和随机宽度。 甚至:生成某种森林,其中树木以一种用户仍然可以穿过森林的方式放置(我认为这是一个简单的森林,只是说树周围的一些块应该保持空白,如果代码试图放置最后一棵树周围的树木更多) 我可以用什么样的数学来做这些事情? 我会很高兴有一些教程或参考的链接。 我在网上搜索了几个小时,但我能找到的只是一些书籍,比如“游戏数学”或其他东西,但我的预算设定为零。 编辑: 首先,我很抱歉我的不好意思。 中学我想感谢你们所有人的答案。 这些都是很好的参考,我会花很多时间深入研究。

使用通配符检查文件名搜索模式中的冲突

我需要通过仅检查/比较表达式来比较文件系统通配符表达式以查看它们的结果是否重叠。 例如,我们正在构建一个实用程序,它可以根据文件系统通配符表达式将文件从一个(或多个位置)排序到单独的文件夹中。 例如:* .txt进入文件夹a,* .doc进入文件夹b,依此类推。 我们支持的通配符是*和? 我希望能够通过分析通配符表达式确定它们是否会发生冲突/重叠。 例如,如果我有以下表达式: *某个.XY * .Y 它们会冲突(重叠),因为第二个表达式* .y将包含* .xy结果。 (例如Axy会匹配两个表达式) 我正在通过使用所有表达式构建树结构来接近这一点,认为如果表达式冲突,构建树的行为将失败。 例如: *。X AB AC BD 可能会创建一个树 + – * -.- X | 开始+ – + | + -b | | + -a -.- + – Ç | | + -b -.- d 如果我尝试添加模式bx,则树将在* .x路径后成功,从而表示该模式已存在。 我正朝着正确的方向前进吗? 或者是否有一种已知的攻击方法?

将IPv6格式化为C#中的int并将其存储在SQL Server中

在IPv4我一直在将IP地址的字符串表示解析为Int32 ,并将它们作为INT存储在SQL Server 。 现在,使用IPv6我试图找出是否有一种标准或可接受的方法来使用C#将IPv6的字符串表示解析为两个Int64 ? 人们如何将这些值存储在SQL Server – 作为BIGINT两个字段?

在给定字节序列开始的流中查找位置的最佳方法

您如何看待在给定字节序列开始的System.Stream中找到位置的最佳方法是什么(第一次出现): public static long FindPosition(Stream stream, byte[] byteSequence) { long position = -1; /// ??? return position; } PS最简单但最快速的解决方案是优先考虑的。 🙂

遍历c#中的对象树

我有一个由几个对象组成的树,其中每个对象都有一个名称(字符串),id(int)和可能是相同类型的子数组。 如何浏览整个树并打印出所有ID和名称? 我是编程的新手,坦率地说,我无法解决这个问题,因为我不知道有多少级别。 现在我正在使用foreach循环直接在rot下面获取父对象,这意味着我无法得到孩子。

查找两个数组之间的所有可能值组合

我有两个字符串数组,不一定长度相同,我想找到数组中两个值之间所有可能的“组合”组合,而不是从任何一个数组重复。 例如,给定数组: {“A1”,“A2”,“A3”} {“B1”,“B2”} 我想要的结果是以下几组: {(“A1”,“B1”),(“A2”,“B2”)} {(“A1”,“B1”),(“A3”,“B2”)} {(“A1”,“B2”),(“A2”,“B1”)} {(“A1”,“B2”),(“A3”,“B1”)} {(“A2”,“B1”),(“A3”,“B2”)} {(“A2”,“B2”),(“A3”,“B1”)} 我的总体方向是创建递归函数,它将两个数组作为参数并一次删除每个“选定”字符串,调用自身直到任一数组为空,但我有点担心性能问题(我需要运行它大约1000对字符串数组的代码)。 任何人都可以指导我采用有效的方法来做到这一点吗?