Tag: 算法

将字节数组转换为任何基数

我有一个字节数组(任意长度),我想用我自己的基本编码器将这个数组编码成字符串。 在.NET是标准的Base64编码器,但是如果我想在Base62 , Base53或Base13对数组进行编码呢? 甚至可以创建这样的通用基础编码器? 我知道我可以用简单的方法做到这一点,也就是说,对于每个字节保留固定数量的字符(在Base62情况下,这将是5个字符),并且做直接字节 – >字符编码,但我会浪费空间,因为5个Base62字符能够包含多于1个字节,但少于2个字节。 我该怎么写这样的编码器? 或者已经有一些课程了吗? 请注意我也需要通用解码器,否则这对我来说没用。 资源 由于解决方案已经知道(使用BigInteger ),我想在这里放一些与BigInteger类相关的资源,因为它在.NET 3.5中不可用: C#中的大整数 http://intx.codeplex.com/ https://svn.apache.org/repos/asf/incubator/heraldry/libraries/csharp/openid/trunk/Mono/Mono.Math/BigInteger.cs http://www.codeproject.com/KB/cs/BigInteger_Library.aspx http://www.codeproject.com/KB/cs/biginteger.aspx

计算3D网格的体积

我厌倦了计算3D物体的体积(Cube,Cylinder ……)可以任何一个帮助 有这个问题? 问题是,如何从他的身上计算物体的体积 基于三角形的坐标。 我的class级做得不好,任何人帮助我 强化class级? 谢谢 public class Algorithm { private Mesh _mesh { get; set; } public Algorithm(Mesh mesh) { _mesh = mesh; } private double SignedVolumeOfTriangle(Vector3 p1, Vector3 p2, Vector3 p3) { var v321 = p3.X * p2.Y * p1.Z; var v231 = p2.X * p3.Y * p1.Z; var v312 = […]

RNGCryptoServiceProvider对大型随机数进行卡方检验失败

有没有人知道为什么RNGCryptoServiceProvider在试图获得超过300,000,000的数字时失败进行卡方检验。 我试图得到0-1,000,000,000范围内的随机数,结果我得到了卡方检验失败,0-300,000,000范围内的数字显得比其他数字更多。 最终我将大数字forms与较小的数字(0-99 * 100M + 0-99,999,999)和卡方测试通过相结合。 任何人都可以大量解释这个exception现象吗? 我使用以下代码来获取数字 [Timeout(TestTimeout.Infinite), TestMethod] public void TestMethodStatistic() { Dictionary appearances = new Dictionary(); UInt64 tenBillion = 10000000000; for (UInt64 i = 0; i < 10000000; i++) { UInt64 random = GetSIngleRandomNumberInternal() % tenBillion; UInt64 bucket = random /10000000; if (!appearances.ContainsKey(Convert.ToInt64(bucket))) { appearances.Add(Convert.ToInt64(bucket), 0); } appearances[Convert.ToInt64(bucket)]++; } string results […]

从DateTime列表中找到常见的DateTime,如果没有常见,则查找最常见的

我想从我的数据库中的DateTime可用列表中找到常见的DateTime 。 背景 让我们假设, 我想见到一些人,我说我希望在Datetime X(2014-02-16 09:00:00.000)到DateTime Y(2014-02-26 05:00:00.000)之间遇到某些人。 然后我想见的人将回复说我将在以下日期提供:Date1(从某个开始时间到某个结束时间的某个日期),Date2(从某个时间到某个时间的某个日期),……等等上。 让我们考虑这些是回应 Attendee1 (Some GuidId): Response1 :Start Time = 2014-02-23 09:00 AM,EndTime = 2014-02-17 11:00 AM, Response2 :Start Time = 2014-02-24 10:00 AM,EndTime = 2014-02-17 12:00 PM, Response3 :开始时间= 2014-02-25 10:00 AM,EndTime = 2014-02-17 11:00 AM, Response4 :Start Time = 2014-02-23 01:00 PM,EndTime = 2014-02-17 5:00 […]

基于距给定点的距离的最近GPS坐标

我有一个MySQL服务器数据库中的GPS位置列表。 用户将在应用程序中输入GPS坐标,他应该获得最近的GPS坐标。 我不介意距离计算是基于“乌鸦的飞行”或其他任何东西。 它应该足够快,可以搜索数千个GPS位置。 我更喜欢C#中的解决方案,否则我会尝试获取逻辑并应用自己。

使用对象列表构建树

我有一个具有属性id和parent_id的对象列表。 我想建一棵树来连接那些孩子和父母。 1父母可能有几个孩子,并且有一个对象将成为所有对象的祖先。 实现它的最快算法是什么? 我使用C#作为编程语言,但其他语言也没问题。

字体渲染与字形信息

我调用“GetCharABCWidthsFloatW”来获取字符的宽度信息。 有了这个,我将获得左侧轴承,右侧轴承和先进的宽度。 为了定位每个字符,我将从一个从零开始的“xPlacement”变量开始。 我将首先通过减去“左侧轴承”来调整xPlacement变量。 绘制完角色后,我会按角色的宽度前进(我稍后会显示计算结果)。 然后,我将通过添加当前“xPlacement”中的“右侧方位”信息来移动xPlacement变量。 在我看来,这应该是字符放置的代码,对吗? 重要的是纠正字符的宽度。 宽度将通过采用advancedWidth,左侧轴承的POSITIVE版本和右侧轴承的POSITIVE版本来计算。 我会将这些值转换为正数,如果它们是负数,那么我可以得到该字符的总宽度。 这是一些关于如何生成的伪代码。 float xPlacement = 0.0f; for(int i = 0; i < strlen(text); ++i) { char charValue = text[i]; GetCharWidthABC(.., .., charInfo); float posLeft = charInfo.leftSideBearing; if(charInfo.leftSideBearing < 0) posLeft = -charInfo.leftSideBearing; float posRight = charInfo.rightSideBearing; if(posRight < 0) posRight = -charInfo.rightSideBearing; float posWidth = posRight […]

将可变大小的项目平衡为粗略平衡的集合的算法

我正在寻找一种算法,将不同大小的项目列表分成“N”个类似大小的组。 具体来说,我正在使用C#中的ASP.NET站点,其中有一个(数据库检索的)字符串列表。 琴弦的长度各不相同。 我有一组需要显示字符串的列。 我需要一种算法来找到最平衡的集合(项目顺序无关紧要),以允许最终的列尽可能平衡。 抽象示例: 创建3列。 要分发的项目: – Item A – height 5 – Item B – height 3 – Item C – height 7 – Item D – height 2 – Item E – height 3 期望的输出: Column 1: Item A, Item D Column 2: Item C Column 3: Item B, Item E

在O(n)时间内创建链接列表的副本

链接列表带有两个指针,第一个指向下一个节点,另一个指向随机指针。 随机指针指向LinkedList的任何节点。 编写一个完整的程序来创建链表(c,c ++,c#)的副本,而无需更改原始列表和O(n)。 在其中一次采访中我被问到这个问题,我无法找到解决方案。 帮助将不胜感激。

找到重叠两个共线段的段的算法

更新 我在C#中的原始实现 我在C#中的最终实现,基于我得到的答案。 鉴于以下条件,我如何以编程方式找到两条线之间的重叠段? 另外,对于不同的斜率: 对于垂直线: 对于水平线: 注意:对于所有象限! 我开始编写所有可能的条件,但它变得丑陋。 public Line GetOverlap (Line line1, Line line2) { double line1X1 = line1.X1; double line1Y1 = line1.Y1; double line1X2 = line1.X2; double line1Y2 = line1.Y2; double line2X1 = line2.X1; double line2Y1 = line2.Y1; double line2X2 = line2.X2; double line2Y2 = line2.Y2; if (line1X1 > line1X2) { double […]