问题标签 [math]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 优秀的开发人员应该了解哪些核心数学概念?
自从 2006 年从一所规模很小的学校毕业后,课程的形式很糟糕且过时(我是外国人,当时不知道更好的学校),我开始意识到我错过了很多基本概念数学和软件视角,主要是其他更高概念的基础。
即我试图听/看麻省理工学院关于算法介绍的开放课件,但很快意识到我错过了几个数学概念以更好地理解这门课程。
那么一个优秀的软件工程师应该知道哪些核心数学概念呢?您会向我推荐哪些可能的书籍/网站?
math - 如何测试随机性(例如 - 洗牌)
首先,这个问题是从这个问题中删除的。我这样做是因为我认为这部分比一个较长问题的子部分更大。如有冒犯,请见谅。
假设您有一个生成随机性的算法。现在你如何测试它?或者更直接地说——假设你有一个洗牌的算法,你如何测试它是一个完全随机的算法?
为这个问题添加一些理论 - 一副纸牌可以在 52 中洗牌!(52阶乘)不同的方式。拿一副牌,用手洗牌,写下所有牌的顺序。你得到那个洗牌的概率是多少?答案:1 / 52!。
洗牌后,你依次得到每种花色的 A、K、Q、J ……的机会是多少?回答 1 / 52!
因此,只需洗牌一次并查看结果,您绝对不会获得任何关于洗牌算法随机性的信息。两次,你有更多的信息,三个甚至更多......
您将如何黑盒测试洗牌算法的随机性?
algorithm - 找到一个公共乘数以将十进制数转换为整数的算法
我有一个可能有多达 8 位小数的数字数组,我需要找到可以将它们相乘的最小公数,以便它们都是整数。我需要这个,所以所有原始数字都可以乘以相同的比例,并由一个只处理整数的密封系统处理,然后我可以检索结果并将它们除以公共乘数以获得我的相对结果.
目前我们对数字进行一些检查并乘以 100 或 1,000,000,但 *sealed 系统完成的处理在处理大数字时可能会变得非常昂贵,因此仅仅为了它而将所有内容乘以一百万并不是真的一个很好的选择。作为一个近似值,每次乘以 10 倍时,密封算法的成本就会增加 10 倍。
什么是最有效的算法,它也会给出最好的结果,以完成我需要的东西,是否有我需要的数学名称和/或公式?
*密封系统并不是真正密封的。我拥有/维护它的源代码,但它有 100,000 多行专有魔法,并且已经过彻底的错误和性能测试,出于多种原因,更改它以处理浮点数不是一种选择。它是一个系统,它创建一个由 X 乘 Y 单元组成的网格,然后将 X 乘 Y 的矩形放入网格中,“专有魔法”发生并吐出结果——显然这是一个极其简化的现实版本,但它是一个足够好的近似值。
到目前为止,有一些很好的答案,我想知道我应该如何选择“正确”的答案。一开始我认为唯一公平的方法是创建每个解决方案并对其进行性能测试,但后来我意识到纯速度并不是唯一相关的因素——更准确的解决方案也非常相关。无论如何我都编写了性能测试,但目前我正在使用“直觉”公式根据速度和准确性选择正确的答案。
我的性能测试处理 1000 组不同的 100 个随机生成的数字。每个算法都使用相同的随机数集进行测试。算法是用 .Net 3.5 编写的(尽管到目前为止与 2.0 兼容)我非常努力地使测试尽可能公平。
- Greg – 乘以大数然后除以 GCD – 63 毫秒
- Andy – 字符串解析 – 199 毫秒
- Eric – Decimal.GetBits – 160 毫秒
- Eric – 二进制搜索 – 32 毫秒
- Ima - 抱歉,我无法弄清楚如何在 .Net 中轻松实现您的解决方案(我不想花太长时间在上面)
- 比尔——我认为你的答案与格雷格的很接近,所以没有实施。我敢肯定它会更快,但可能不太准确。
所以 Greg 的乘以大数然后除以 GCD”解决方案是第二快的算法,它给出了最准确的结果,所以现在我称之为正确的。
我真的希望 Decimal.GetBits 解决方案是最快的,但它非常慢,我不确定这是由于将 Double 转换为 Decimal 还是由于 Bit 掩码和移位。使用 BitConverter.GetBytes 和此处包含的一些知识应该有一个类似的可用解决方案:http: //blogs.msdn.com/bclteam/archive/2007/05/29/bcl-refresher-floating-point- types-the-good-the-bad-and-the-ugly-inbar-gazit-matthew-greig.aspx但每次我读到那篇文章时,我的眼睛一直在发呆,最终我没时间尝试实现一个解决方案。
如果有人能想到更好的方法,我总是对其他解决方案持开放态度。
math - 有哪些好的刚体动力学参考资料?
我至少不是一个数学专家,但我对学习刚体物理很感兴趣(为了实现一个基本的 3d 物理引擎)。在学校我只通过代数 II 学习数学,但我已经做了多年的 3d 开发,所以我对向量、四元数、矩阵等有相当不错的理解。我真正的问题是阅读复杂的公式等,所以我正在寻找对于一些体面的刚体动力学参考,这将是有意义的。
谁有好的参考资料?
c# - 在 C# 中使用泛型创建数学库
是否有任何可行的方法使用泛型来创建不依赖于选择存储数据的基本类型的数学库?
换句话说,假设我想写一个 Fraction 类。分数可以用两个整数或两个双精度数或诸如此类的形式表示。重要的是基本的四种算术运算都定义得很好。所以,我希望能够写Fraction<int> frac = new Fraction<int>(1,2)
和/或Fraction<double> frac = new Fraction<double>(0.1, 1.0)
.
不幸的是,没有代表四个基本操作(+、-、*、/)的接口。有没有人找到一种可行的、可行的方法来实现这一点?
c# - 如何在 WPF 中创建可扩展的 Moebius-strip?
莫比乌斯带是具有一侧的表面。
如何在 XAML/WPF 中定义这样一个对象?
如何使用 C# 在 3D 中操作、放大和缩小和旋转这样的对象?
algorithm - 寻找相似图像的算法
我需要一种算法来确定两个图像是否“相似”并识别相似的颜色、亮度、形状等模式。我可能需要一些关于人脑使用哪些参数来“分类”图像的指针。..
我看过基于 hausdorff 的匹配,但这似乎主要用于匹配变换后的对象和形状模式。
math - 如何在平截头体上剪裁线段?
给定两个向量A和B,它们形成线段L = AB。此外,给定一个由其左、右、下、上、近和远平面定义的视锥F。
我如何剪辑L反对F?
也就是说,测试一个交叉点以及该交叉点在 L 上的哪个位置?(请记住,如果一条线段在拐角处与两侧相交,则它可以与平截头体有多个交点。)
如果可能,请提供代码示例(首选 C++ 或 Python)。
python - 计算 3D(或 nD)质心的最佳方法是什么?
作为工作项目的一部分,我必须计算 3D 空间中一组点的质心。现在我正在以一种看似简单但幼稚的方式来做这件事——通过取每组点的平均值,如下所示:
其中x
,y
和z
是浮点数数组。我似乎记得有一种方法可以获得更准确的质心,但我还没有找到一个简单的算法来做到这一点。有人有什么想法或建议吗?我为此使用 Python,但我可以改编其他语言的示例。
math - 一个好的 3D 网格库
我正在寻找一个好的 3D Mesh 库
- 应该能够阅读流行的格式(OFF,OBJ ...)
- 应该同时支持半边结构和三角汤
- 应该容忍故障和非法网格。
- 基本几何运算 - 交点、法线计算等
- 最重要的是 - 不应该与无尽的模板和继承层次结构复杂化。
我已经尝试过 CGAL 和 OpenMesh,但在最后一点都失败了。
特别是 CGAL,即使使用最先进的代码分析工具也无法遵循。
到目前为止,我正在认真考虑自己动手。
我的偏好是 C++,但我对其他选项持开放态度。