Tag: 算法

什么是转换为任意基C#函数的有效反演?

我需要将整数转换为base64字符表示。 我在这个post上使用OxA3的答案: 最快的方法是将基数为10的数字转换为.NET中的任何基数? 在给定字符串的情况下,如何将此反转以获取原始整数?

如何获得两个范围的重叠范围

我在区间[1-15]中有以下范围 我想找到人1和2之间的重叠范围。 Person1 [1,3] [5,10] Person2 [2,4] [8,15] 在这里,我应该得到一个范围列表,[2,3],[8,10]。 到目前为止我发现的是按person1的范围循环,然后按person2的范围循环,然后是每个范围的每个元素,然后使用条件测试。 这个解决方案不满足我,因为它是O(n)。 更多元素的范围,我的算法将更多地围绕每个范围的每个元素循环,如果我想看到这些范围之间的切除,则需要时间 Person1:[100000; 150000]和[90000; 140000]。 人2:[105000; 110000]和[130000; 140050] 请注意,范围在我的代码中表示为: public class Range{ public int Start {get;set;} public int End {get;set;} } 那么找到重叠范围的最有效方法是什么? 任何帮助,将不胜感激。 PS:这里有类似的问题如何在python中找到范围重叠? 但我不懂python代码。

用于检查价值存在的更好的代码/模式

我有web.config条目,如下所示。 这用于控制各种角色的用户对各种页面的访问。 管理员屏幕可以由招聘经理访问,CRM1日志屏幕可以由CRM3和受让人访问 add key=”AdminScreenRoles” value =”Hiring Manager,CRM1″ add key=”LogsScreenRoles” value =”CRM3,Transferee ” 将来,新角色可以访问管理员屏幕。 也可以引入新页面。 我需要确保当前用户可以访问配置文件中的至少一个页面。 我有以下代码。 有用。 是否有更好/简洁/可扩展的代码用于此function? List authorizedRolesForAdmin = new List((ConfigurationManager.AppSettings[“AdminScreenRoles”]).Split(‘,’)); List authorizedRolesForLogs = new List((ConfigurationManager.AppSettings[“LogsScreenRoles”]).Split(‘,’)); if ((authorizedRolesForAdmin.Contains(roleName)) || (authorizedRolesForLogs.Contains(roleName))) { //Has access to at least one page } 参考 : 用于从配置文件创建数组的可扩展C#代码

C#中的Char.IsHex()

继这个问题之后,在C#中编写Char.IsHex()函数的最佳方法是什么。 到目前为止我有这个,但不喜欢它: bool CharIsHex(char c) { c = Char.ToLower(c); return (Char.IsDigit(c) || c == ‘a’ || c == ‘b’ || c == ‘c’ || c == ‘d’ || c == ‘e’ || c == ‘f’) }

动态正则表达式生成,用于数据馈送中可预测的重复字符串模式

我目前正在尝试处理一些我无法控制的数据源,我在C#中使用正则表达式来提取信息。 数据馈送的发起者从其数据库中提取基本行数据(如产品名称,价格等),然后在英文文本行中格式化该数据。 对于每一行,一些文本是重复的静态文本,一些是从数据库中动态生成的文本。 例如 松下电视免费蓝光播放器 索尼电视免费DVD播放机+票房DVD Kenwood Hi-Fi部门提供20美元的亚马逊MP3优惠券 因此,此实例中的格式为:带有FREEGIFT的 PRODUCT 。 PRODUCT和FREEGIFT是每行的动态部分,“with”文本是静态的。 每个Feed有大约2000行。 创建正则表达式以提取动态部分是微不足道的。 问题在于,控制数据源的营销方式一直在改变静态文本的结构,通常是两周一次,所以本周我可能会: 如果您今天订购,全新松下电视和免费蓝光播放器 如果您今天订购,全新索尼电视和免费DVD播放机+票房DVD 如果您今天订购,全新的Kenwood Hi-Fi装置和20美元的亚马逊MP3优惠券 下周它可能会有所不同,所以我必须继续修改我的正则表达式…… 你会怎么处理这个? 是否有算法来确定重复的字符串行中的静态和可变文本? 如果是这样,那么使用这种算法的输出以编程方式创建动态正则表达式的最佳方法是什么? 感谢您的帮助或建议。

两个顶点之间的最长路径

我有一个带加权边的有向图(权重都是正数)。 现在,我正在寻找一种有效的算法或代码(特别是C#)来找到两个给定顶点之间的最长路径。

如何将2darrays旋转LESS超过90°,达到最佳近似值?

假设我有一个以0°旋转存储的数组: 0 0 1 0 0 0 0 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 如果我通过,我希望它以良好的近似值返回,例如30°作为参数,它将类似于: 0 0 0 1 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 45°会 1 0 […]

List 中使用哪种算法来动态分配内存?

现在我有一个动态分配数组内存的算法: 如果数组已满,我创建一个两倍大小的新数组,并复制项目。 如果数组是四分之一满,我创建一个大小一半的新数组,并复制项目。 这是用于动态内存分配的相当快的算法,尽管将元素复制到新分配的数组的额外开销。 什么是更快, List或基于数组的这种算法? 你会建议使用什么? List使用简单数组作为内部数据结构吗?

如何生成/计算十二面体的顶点?

如何在算法上生成十二面体的顶点? 我希望四面体的质心在(0, 0, 0) 。

“转动”IEnumerable <IEnumerable > 90度

我正在寻找的是一个基本的操作(我肯定有一个名字,我只是没有意识到atm)。 我有一个矩阵像: {1,2,3} {A,N,F} {7,8,9} 我想改变它 {1,A,7} {2,N,8} {3,F,9} (以上只是对象的标识符而不是实际值。实际对象属于同一类型且无序) 我更喜欢它的声明性解决方案,但速度是一个因素。 我将不得不转动几张桌子(每分钟100k格),慢速版本将在关键路径上。 但是我对可读解决方案仍然更感兴趣。 我正在寻找下面的替代解决方案。 (换句话说,我不是指变化,而是一种不同的方法) var arrays = rows.Select(row => row.ToArray()); var cellCount = arrays.First().Length; for(var i = 0;i<cellCount;i++){ yield return GetRow(i,arrays); } IEnumerable GetRow(int i,IEnumerable rows){ foreach(var row in rows}{ yield return row[i]; } } 在两个几乎同样可读的解决方案中,我会更快,但可读性在速度之前 编辑它将始终是一个方阵