使用平凡哈希函数进行排序2024 年 8 月 29 日 | 阅读 6 分钟 在本教程中,我们将学习使用简单的哈希函数进行排序。我们已经熟悉了各种排序算法,如堆排序、冒泡排序和归并排序等。在这里,我们将使用哈希数组对给定的元素数组进行排序。然而,该算法不适用于较大的元素值(不超过 10^6)。该算法指出,我们给出一个包含负数和正数的数组,并要求使用简单哈希函数对数组进行排序。 使用哈希进行排序以下是使用哈希实现排序算法的步骤。
让我们来理解以下代码。 示例 - 输出 Sorted Arry: [1, 1, 1, 2, 3, 3, 5, 5, 9] 解释 - 在此程序中,我们使用简单的哈希函数对数组进行排序。我们找到数组中的最大值,然后创建一个哈希表,其桶的数量等于 max_val + 1。 数组中的每个元素都根据其值插入到哈希表中。最后,我们遍历哈希表并重建排序后的数组。 上述代码的时间复杂度为 O(N + K),其中 N 是输入数组中的元素数量,K 是数组中值的范围(即最大值与最小值之差)。 以下是时间复杂度的细分 1. 查找数组中的最大值:O(N) 查找数组中的最大值过程需要遍历所有元素一次,时间复杂度为 O(N)。 2. 创建哈希表并插入元素:O(N) 在最坏的情况下,如果数组中的所有元素都具有相同的值,它们将被插入到哈希表的同一个桶中。因此,创建哈希表和插入元素的时间复杂度为 O(N)。 3. 遍历哈希表以重建排序后的数组:O(N + K) 在最坏的情况下,如果数组中的所有元素都是唯一的,哈希表将有 K 个桶,每个桶包含一个元素。遍历哈希表并重建排序后的数组需要访问所有 N 个元素加上 K 个桶,时间复杂度为 O(N + K)。 由于 K 代表数组中值的范围,在大多数实际情况下,它通常小于 N。因此,算法的总体时间复杂度由 O(N) 项主导,我们可以将时间复杂度近似为 O(N)。 如何处理负数如果我们数组中同时包含负数和正数怎么办?使用简单的哈希算法,我们可以有效地处理负数。 要使用基于哈希的方法对数组进行排序,请遵循以下步骤 步骤 1: 创建两个哈希数组,一个用于正数元素,另一个用于负数元素。 步骤 2: 确定数组中的最大值和最小值,以分别设置正数和负数哈希数组的大小。 步骤 3: 从负数哈希数组中的最小值到 0 进行遍历,并按其在数组中出现的顺序打印元素。 步骤 4: 从正数哈希数组中的 0 到最大值进行遍历,并按其在数组中出现的顺序打印元素。 通过使用这种方法,您可以使用基于哈希的技术有效地对数组进行排序。正数和负数哈希数组可确保即使原始输入数组中的顺序不同,元素也能正确排序。 让我们将上述步骤实现为代码 - 示例 - 输出 Original Array: [5, -3, 2, -7, 1, -4, 6, 0, -1, 3] Sorted Array: -7 -4 -3 -1 0 1 2 3 5 6 解释 - 好的!让我们逐步分析提供的代码并解释每个部分
时间复杂度上述代码的时间复杂度为 O (N + K),其中 N 是输入数组中的元素数量,K 是数组中值的范围(即最大值与最小值之差)。 空间复杂度上述代码的空间复杂度为 O (N + K),其中 N 是输入数组中的元素数量,K 是数组中值的范围(即最大值与最小值之差)。 下一主题什么是 TABU 搜索 |
简介:在本文中,我们将讨论如何使用 Dash 在 Python 中开发数据可视化界面。过去,开发分析性 Web 应用程序是专业开发人员的一项任务,需要掌握多种编程语言和框架。现在情况并非如此。最近,您可以...
阅读 16 分钟
在本教程中,我们将编写一个 Python 程序,打印出列表元素所有可能的组合。我们将以三个不同的整数作为输入,并打印出这些数字所有可能的组合。这是一个相当简单的程序;它可能会被问到...
阅读 3 分钟
Python 中的 datetime.timedelta() 函数用于表示两个日期、时间或日期时间对象之间的差异。它允许您执行算术运算,例如加或减时间间隔。一个 timedelta 对象表示一个持续时间,可以包括天、秒、微秒、毫秒...
阅读 3 分钟
? Python 程序员必须了解运行 Python 脚本或代码的所有可能方法。这是验证代码是否按我们预期工作的唯一方法。Python 解释器负责执行 Python 脚本。Python 解释器是一段软件,它工作...
阅读 2 分钟
Selenium 是一个用于自动化 Web 浏览器和测试 Web 应用程序的强大工具。它提供了广泛的方法和技术来与 Web 元素进行交互。最常用的方法之一是 find_elements_by_partial_link_text()。此方法允许您在网页上定位元素...
阅读 3 分钟
Python 中的 fabs 方法用于返回数字的绝对值。可以通过导入 math 模块来使用它。Python 中的 math 模块可用于实现不同的基本数学运算,如加法、减法、除法和乘法。它也可以用于...
阅读 3 分钟
对于许多学习者来说,学习基于文本语言的语法是困难的。当程序中违反某些规则时,就会出现语法错误。因此,突出两种语言之间的相似点和对比点是很有帮助的。下面是一些Scratch块及其Python等价物。列表需要...
阅读 3 分钟
GitHub, Inc 提供了一个在线托管服务,用于使用 Git 进行应用程序开发和变更控制。它提供了每个软件功能请求、项目访问控制、持续集成、任务管理、错误跟踪以及 Git 的分布式版本控制。它是一家总部位于...的微软公司。
7 分钟阅读
在本教程中,我们正在讨论如何使用 Python 进行 Web 开发。Python 是一门可爱的语言。它易于学习且有趣,其语法(规则)简单明了。Python 是初学者的首选;但仍然强大且...
阅读 6 分钟
什么是数据隐藏?数据隐藏是面向对象编程的一部分,通常用于向用户隐藏数据信息。它包括内部对象细节,例如数据成员、内部工作方式。它维护数据完整性并限制对类的访问...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India