首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java版数据结构和算法+AI算法和技能(已完结)

获课:666it.top/14825/

本文将全面解析Java中常用的排序与查找算法,深入分析它们的时间复杂度特性,并探讨这些算法在AI场景下的适配与应用。

排序算法及其时间复杂度分析

基本排序算法

冒泡排序(Bubble Sort)

原理:通过不断交换相邻元素来排序,比较相邻元素并交换顺序错误的元素

时间复杂度:O(n²)(最坏和平均情况),最好情况O(n)(已排序数组)

空间复杂度:O(1)

稳定性:稳定

Java实现

Java

public static void bubbleSort(int[] arr) { int n = arr.length; boolean swapped; for (int i = 0; i < n-1; i++) { swapped = false; for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; swapped = true; } } if (!swapped) break; } }

选择排序(Selection Sort)

原理:每次从未排序部分选择最小元素放到已排序部分的末尾

时间复杂度:O(n²)(所有情况)

空间复杂度:O(1)

稳定性:不稳定

特点:交换次数少,适合数据量小且交换成本高的场景

插入排序(Insertion Sort)

原理:将未排序元素逐个插入到已排序部分的适当位置

时间复杂度:O(n²)(最坏和平均情况),最好情况O(n)(已排序数组)

空间复杂度:O(1)

稳定性:稳定

特点:对小规模或基本有序数据效率高

高级排序算法

快速排序(Quick Sort)

原理:分治法,选择一个基准元素将数组分为两部分,递归排序

时间复杂度:平均O(n log n),最坏O(n²)(已排序或逆序数组)

空间复杂度:O(log n)(递归栈空间)

稳定性:不稳定

优化:随机选择基准或三数取中法避免最坏情况

归并排序(Merge Sort)

原理:分治法,将数组分成两半分别排序,然后合并

时间复杂度:O(n log n)(所有情况)

空间复杂度:O(n)(需要额外空间)

稳定性:稳定

Java实现

Java

private static void mergeSort(int[] nums, int left, int right) { if (left >= right) return; int mid = left + (right - left) / 2; mergeSort(nums, left, mid); mergeSort(nums, mid + 1, right); merge(nums, left, mid, right); }

堆排序(Heap Sort)

原理:利用堆数据结构,将数组构建为大顶堆,然后逐个取出堆顶元素

时间复杂度:O(n log n)(所有情况)

空间复杂度:O(1)

稳定性:不稳定

特点:适合大数据量且对稳定性无要求的场景

查找算法及其时间复杂度分析

线性查找

时间复杂度:O(n)

适用场景:无序数据集合

特点:简单但效率低,大数据量时不推荐

二分查找(Binary Search)

时间复杂度:O(log n)

前提条件:数据必须有序

Java实现

Java

int binarySearch(int[] a, int target) { int left = 0, right = a.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (a[mid] == target) return mid; else if (a[mid] < target) left = mid + 1; else right = mid - 1; } return -1; }

哈希表查找

平均时间复杂度:O(1)

最坏时间复杂度:O(n)(哈希冲突严重时)

特点:查找效率极高,但需要额外空间存储哈希表

时间复杂度总结

排序算法时间复杂度对比

查找算法时间复杂度对比

AI场景下的算法适配

排序算法在AI中的应用

数据预处理:AI模型训练前需要对数据进行排序处理

大规模数据:归并排序(稳定且高效)

中等规模数据:快速排序(平均性能好)

小规模或基本有序数据:插入排序(简单高效)

特征选择:需要根据特征重要性排序

堆排序适合动态获取Top K重要特征

推荐系统:对推荐结果排序

快速排序适合实时性要求高的场景

查找算法在AI中的应用

模型参数查找

哈希表查找适合参数名到参数值的映射

二分查找适合有序参数数组的快速检索

相似度搜索

KD树、球树等空间划分数据结构结合二分查找思想

局部敏感哈希(LSH)结合哈希表查找

决策树算法

特征划分时使用二分查找确定最佳分割点

AI场景下的优化建议

大数据量处理

优先选择时间复杂度为O(n log n)的排序算法

考虑使用外部排序(归并排序变种)处理无法装入内存的数据

实时性要求

快速排序和堆排序适合需要快速响应的场景

哈希表查找适合毫秒级响应要求的场景

内存限制

堆排序和快速排序空间效率较高

归并排序需要额外空间,大数据量时需谨慎使用

稳定性要求

需要保持相同元素相对顺序时选择稳定排序算法(如归并排序)

实际应用示例

排序算法选择示例

Java

// 根据数据规模和特性选择合适的排序算法 public void adaptiveSort(int[] data) { if (data.length < 50) { // 小数据量使用插入排序 insertionSort(data); } else if (data.length < 10000) { // 中等数据量使用快速排序 quickSort(data, 0, data.length - 1); } else { // 大数据量使用归并排序 mergeSort(data, 0, data.length - 1); } }

查找算法在AI模型中的应用示例

Java

// 在有序参数列表中查找最优阈值 public int findOptimalThreshold(double[] sortedScores, double target) { int left = 0, right = sortedScores.length - 1; while (left <= right) { int mid = left + (right - left) / 2; if (sortedScores[mid] == target) { return mid; } else if (sortedScores[mid] < target) { left = mid + 1; } else { right = mid - 1; } } return left; // 返回插入位置 }

总结与建议

排序算法选择指南

数据量小(n < 50):插入排序

数据量中等且无稳定性要求:快速排序

数据量大且需要稳定性:归并排序

需要实时获取Top K元素:堆排序

查找算法选择指南

无序小数据量:线性查找

有序数据:二分查找

需要极速查找且内存充足:哈希表查找

AI场景适配建议

预处理阶段:根据数据特性选择合适的排序算法

模型推理阶段:优先考虑哈希表查找等O(1)算法

参数调优阶段:结合二分查找快速定位最优参数

掌握这些排序与查找算法的时间复杂度特性,能够帮助开发者在AI应用开发中做出更合理的算法选择,从而优化系统性能,提高处理效率。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O1sQuwMeq-d1PMP_ir_Hr1BQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券