C++ 中的闵氏距离查找2025年5月15日 | 阅读 9 分钟 在计算几何和机器学习的广阔领域中,量化对象之间差异的能力至关重要。这种需求催生了许多距离度量的发展,每种度量都针对不同的应用和场景。在这些度量中,闵可夫斯基距离作为一种多功能且强大的工具脱颖而出,用于度量 n 维空间中的差异。 以杰出的数学家赫尔曼·闵可夫斯基的名字命名,闵可夫斯基距离是他几何学和时空工作的自然延伸。闵可夫斯基的开创性贡献为现代距离度量奠定了基础,为理解空间和时间的基本结构提供了深刻见解。他将闵可夫斯基空间(一种将时间作为第四维扩展传统欧几里得空间的概念)的思想,彻底改变了我们对时空几何的理解,并为数学、物理学和计算机科学中使用的各种距离度量铺平了道路。 闵可夫斯基距离的本质在于其概括其他著名距离度量(如欧几里得距离、曼哈顿距离和切比雪夫距离)的能力。通过引入一个决定距离度量阶数的参数 r,闵可夫斯基距离涵盖了一系列距离度量,每种度量都具有独特的性质和应用。当 r=1 时,闵可夫斯基距离简化为曼哈顿距离,计算每个维度上绝对差的总和。当 r 趋近于无穷大时,闵可夫斯基距离收敛于切比雪夫距离,侧重于任何维度上的最大绝对差。当 r=2 时,闵可夫斯基距离对应于我们熟悉的欧几里得距离,它在空间中捕获两个点之间的直线距离。在 C++ 等计算框架中实现闵可夫斯基距离,使从业者能够在各种领域利用其多功能性和效率。通过将闵可夫斯基距离的数学公式封装在软件函数中,开发人员可以无缝地将此距离度量集成到他们的算法中,用于聚类、分类、图像处理等任务。实现的简单性掩盖了底层数学的复杂性,使得闵可夫斯基距离适用于广泛的应用和行业。 在本文中,我们将踏上探索闵可夫斯基距离的复杂性及其在计算几何和机器学习中的应用的旅程。我们将深入探讨闵可夫斯基贡献的历史背景,揭示闵可夫斯基距离的数学公式,并演示如何在 C++ 中有效地实现它。此外,我们将讨论闵可夫斯基距离在不同领域的实际应用,展示其在当代计算任务中的相关性和重要性。加入我们,一起揭开闵可夫斯基距离的奥秘,这是一个永恒的概念,将继续塑造计算科学和工程的格局。 闵可夫斯基距离的历史闵可夫斯基距离的历史与赫尔曼·闵可夫斯基的开创性工作息息相关,他是一位富有远见的数学家,其贡献为现代几何学和理论物理学奠定了基础。闵可夫斯基于 1864 年出生在立陶宛,当时是俄罗斯帝国的一部分,他在德国接受教育,并在费利克斯·克莱因和阿道夫·赫尔维茨等著名数学家的指导下,他的智力和数学才华很快就显现出来。 闵可夫斯基的学术生涯曾任教于多个享有盛誉的机构,包括柯尼斯堡大学和哥廷根大学,在那里他与数学和物理学领域的顶尖人物合作。他的早期研究集中在数论和代数几何领域,他在二次型理论和数论几何方面做出了重要贡献。 然而,闵可夫斯基最持久的贡献在于他在几何学和理论物理学方面的工作,特别是他发展了闵可夫斯基空间的概念。在1907年,闵可夫斯基引入了时空的概念,作为一个统一的框架来理解宇宙的几何。借鉴阿尔伯特·爱因斯坦狭义相对论的见解,闵可夫斯基认识到空间和时间是内在联系的,形成了一个四维连续体,其中事件由其在时空中的坐标来描述。 闵可夫斯基时空几何公式的核心是引入一个度量张量,该张量量化了时空中两个事件之间的间隔。这个度量张量称为闵可夫斯基度量,它包含了时空的几何结构,并在爱因斯坦的广义相对论中起着至关重要的作用。闵可夫斯基的概念飞跃为更深入地理解空间、时间和引力的性质铺平了道路,为现代理论物理学奠定了基础。 在数学领域,闵可夫斯基关于几何学的研究超越了时空,包括对 n 维空间中距离度量的研究。他引入了闵可夫斯基距离的概念,作为欧几里得距离、曼哈顿距离和切比雪夫距离等距离度量的推广。闵可夫斯基距离定义为每个维度上绝对差的 r 次幂之和的 r 次方根,它为测量多维空间中点之间的差异提供了一个统一的框架。 闵可夫斯基距离的意义远远超出了其数学上的优雅;它在计算几何、机器学习和数据分析等各个领域都发挥着基石作用。通过在一个框架内包含一系列距离度量,闵可夫斯基距离在各种领域提供了无与伦比的多功能性和适用性。总之,闵可夫斯基距离的历史与赫尔曼·闵可夫斯基的富有远见的见解密不可分,他对几何学、物理学和数学的贡献继续塑造着我们对宇宙的理解,并激励着一代又一代的学者和科学家。 理解闵可夫斯基距离在距离度量的广阔领域中,闵可夫斯基距离因其作为量化多维空间中对象之间差异的多功能且强大的工具而脱颖而出。该距离度量以杰出的数学家赫尔曼·闵可夫斯基的名字命名,它提供了一个统一的框架,概括了包括欧几里得距离、曼哈顿距离和切比雪夫距离在内的几种著名距离度量。要掌握闵可夫斯基距离的本质,必须深入研究其数学公式,并理解它如何封装多维空间的几何结构。 其核心在于,闵可夫斯基距离用于测量 n 维空间中两点 P 和 Q 之间的距离。与计算两点之间直线距离的熟悉欧几里得距离不同,闵可夫斯基距离考虑了每个维度上的距离,并使用幂函数将它们组合起来。n 维空间中两点 P 和 Q 之间的闵可夫斯基距离的数学表达式为 ![]() 这里,pi 和 qi 分别表示点 P 和 Q 的第 i 个坐标。参数 r 决定了闵可夫斯基距离的阶数。当 r=1 时,闵可夫斯基距离简化为曼哈顿距离,也称为 L1 范数,它测量每个维度上绝对差的总和。这对应于在城市网格状街道上行驶的距离,其中只允许水平和垂直移动。 ![]() 另一方面,当 r=2 时,闵可夫斯基距离变为欧几里得距离,表示为 L2 范数,它计算空间中两点之间的直线距离。此距离度量从几何学中很熟悉,其中它表示两点之间的最短路径,类似于连接它们的直线。 ![]() 当 r 趋近于无穷大时,闵可夫斯基距离收敛于切比雪夫距离,该距离测量任何维度上的最大绝对差。换句话说,它仅关注两点相应坐标之间的最大差异。 ![]() 通过改变 r 的值,我们可以对这些不同的距离度量进行插值,为量化多维空间中的差异提供一系列选项。这种灵活性在机器学习和数据分析中尤其有价值,在这些领域中,不同的距离度量可能更适合特定的任务或数据集。 在 C++ 等计算框架中实现闵可夫斯基距离,包括将数学公式封装在软件函数中。此函数接收两个点 P 和 Q 的坐标作为输入,以及指定闵可夫斯基距离阶数的参数 r。然后,它遍历每个维度,计算绝对差的 r 次幂,将它们加起来,最后取总和的 r 次方根以获得闵可夫斯基距离。 在 C++ 中实现闵可夫斯基距离现在,让我们深入研究在 C++ 中实现闵可夫斯基距离。我们将创建一个简单的函数来计算 n 维空间中两点之间的闵可夫斯基距离。 输出 Minkowski distance between the points: 5.19615 说明1. 函数定义 - minkowskiDistance
2. 执行
复杂度分析时间复杂度分析
总的来说,minkowskiDistance 函数的时间复杂度为 O(n),其中 n 是维度数。 空间复杂度分析
总的来说,实现的空間复杂度为 O(n),其中 n 是维度数。 时间复杂度:minkowskiDistance 函数的时间复杂度为 O(n),其中 n 是维度数。这种复杂度源于遍历输入点的每个维度并为每个维度执行恒定时间的操作。 空間复杂度:实现的空間复杂度也为 O(n),其中 n 是维度数。这种复杂度源于存储输入向量 p 和 q 所需的空间,这些空间与维度数成正比。总的来说,该实现为计算 n 维空间中两点之间的闵可夫斯基距离提供了一种高效且可扩展的解决方案,其时间和空间复杂度都与维度数线性相关。 结论总而言之,理解闵可夫斯基距离包括掌握其数学公式及其作为其他距离度量的推广的作用。通过对不同阶数的闵可夫斯基距离进行插值,从业者可以定制其距离度量以适应特定的应用和数据集。凭借其多功能性和在多维空间中的适用性,闵可夫斯基距离仍然是计算几何、机器学习和数据分析的基石,它为理解对象之间的差异提供了深刻见解,并促进了各种计算任务。 下一个主题C++ 中哈希表和数组之间的区别 |
简介 C++ 是一种多功能且功能强大的编程语言,自 20 世纪 70 年代末问世以来经历了多次发展。C++ 由 Bjarne Stroustrup 创建。它被创建为 C 编程语言的扩展,其中包含面向对象编程原理。多年来,多个版本...
阅读 6 分钟
引言:C++ 中的 monad(源自 Haskell 等函数式编程语言)表示一种设计模式,它允许在管理值、上下文或副作用的同时,以受控的方式链接操作。在 C++ 中,monad 不是原生内置的,但可以通过...
7 分钟阅读
在基于计算机的问题解决中,有些问题我们只能通过处理基本元素(如棍子或相似的物品组)来解决。有一个这样的问题:给定一系列基本元素(一个数组),我们能否……
阅读 8 分钟
编程总是涉及解决创造性和复杂的问题。在奇怪数概念中,有很多有趣的数学谜题。尽管在数学上没有技术术语,但奇异数用于描述数字中独特的属性或模式,这些数字...
阅读 4 分钟
允许某人将字母翻译成数字的表称为 Polybius 方形。此表可以与接收者共享并随机生成以增加加密的难度。字母“i”和“j”通常合并到一个单元格中以……
阅读 6 分钟
引言 埃及分数是一种独特的表示有理数的方法,通过单位分数之和来实现,其中分子为 1。在其象形文字中,古埃及人使用此技术来表示分数。古埃及分数始终是唯一的;因此,没有两个分数可以...
阅读 6 分钟
引言 在计算机科学和编程中,经常执行数据操作和重新排序。移至前面 (MTF) 算法是一种有趣的算法,用于重新排序列表中的元素。MTF 是一种简单但有效的方法,可以根据...重新排列元素的顺序。
7 分钟阅读
第一个是熟悉的动态规划问题,“强盗抢钱”,常用于编码面试。问题涉及一个冒险者,他打算抢劫街上不同编号的房子里隐藏的钱。也就是说,如果两栋相邻的房子……
阅读 10 分钟
在 C++ 编程中,数据竞争发生在多个线程尝试同时访问同一内存位置,并且其中至少一个线程执行写操作时。这可能导致程序出现崩溃、数据损坏或其他不良后果。定义...
阅读 10 分钟
在本文中,我们将讨论 C++ 中的 std::to_underlying() 函数,包括其语法、参数、优点、缺点和示例。是什么?std::to_underlying() 函数是一个实用函数,用于获取枚举类型的底层整数值,该函数已在 C++17 (header ) 中添加。它...
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India