算法02-各种排序算法
各种常见排序算法总结
一. 冒泡排序 (Bubble Sort)
冒泡排序是一种简单的排序算法。它重复地遍历要排序的列表,比较相邻的元素,并交换它们的位置,直到整个列表排序完成。
A、说明:
特点:
- 通过不断交换相邻元素,将最大(或最小)的元素“冒泡”到数组的一端。
优点:
- 实现简单,代码容易理解。
- 对于小规模数据表现较好。
缺点:
- 时间复杂度较高,不适合大规模数据。
- 交换操作较多,效率低。
时间复杂度:
- 最好情况:O(n)(已经有序)
- 最坏情况:O(n²)
- 平均情况:O(n²)
空间复杂度:
- O(1)(原地排序)
稳定性:
- 稳定
B、步骤:
-
从列表的第一个元素开始,比较相邻的两个元素。
-
如果前一个元素比后一个元素大,交换它们的位置。
-
继续遍历列表,直到没有需要交换的元素。
C、示例代码
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):if arr[j] > arr[j+1]:arr[j], arr[j+1] = arr[j+1], arr[j]return arr# 示例
arr = [64, 34, 25, 12, 22, 11, 90]
print("排序前:", arr)
print("排序后:", bubble_sort(arr))
二、选择排序 (Selection Sort)
选择排序是一种简单直观的排序算法。它的工作原理是每次从未排序的部分中选择最小(或最大)的元素,放到已排序部分的末尾。
A、说明:
特点:
- 每次从未排序部分选择最小(或最大)的元素,放到已排序部分的末尾。
优点:
- 实现简单。
- 不占用额外空间。
缺点:
- 时间复杂度较高,不适合大规模数据。
- 不稳定(可能改变相同元素的相对顺序)。
时间复杂度:
- 最好情况:O(n²)
- 最坏情况:O(n²)
- 平均情况:O(n²)
空间复杂度:
- O(1)(原地排序)
稳定性:
- 不稳定
B、步骤:
-
在未排序部分中找到最小元素。
-
将最小元素与未排序部分的第一个元素交换。
-
重复上述步骤,直到所有元素排序完成。
C、示例代码
def selection_sort(arr):n = len(arr)for i in range(n):min_idx = ifor j in range(i+1, n):if arr[j] < arr[min_idx]:min_idx = jarr[i], arr[min_idx] = arr[min_idx], arr[i]return arr# 示例
arr = [64, 25, 12, 22, 11]
print("排序前:", arr)
print("排序后:", selection_sort(arr))
三、插入排序 (Insertion Sort)
插入排序是一种简单直观的排序算法。它的工作原理是将未排序部分的元素逐个插入到已排序部分的适当位置。
A、说明:
特点:
- 将未排序部分的元素逐个插入到已排序部分的正确位置。
优点:
- 对于小规模或基本有序的数据效率较高。
- 实现简单。
缺点:
- 时间复杂度较高,不适合大规模数据。
- 数据移动较多。
时间复杂度:
- 最好情况:O(n)(已经有序)
- 最坏情况:O(n²)
- 平均情况:O(n²)
空间复杂度:
- O(1)(原地排序)
稳定性:
- 稳定
B、步骤:
-
从第一个元素开始,该元素可以认为已经被排序。
-
取出下一个元素,在已经排序的元素序列中从后向前扫描。
-
如果该元素(已排序)大于新元素,将该元素移到下一位置。
-
重复步骤3,直到找到已排序的元素小于或等于新元素的位置。
-
将新元素插入到该位置后。
-
重复步骤2~5。
C、示例代码:
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i-1while j >= 0 and key < arr[j]:arr[j+1] = arr[j]j -= 1arr[j+1] = keyreturn arr# 示例
arr = [12, 11, 13, 5, 6]
print("排序前:", arr)
print("排序后:", insertion_sort(arr))
四、快速排序 (Quick Sort)
快速排序是一种高效的排序算法,采用分治法策略。它通过选择一个“基准”元素,将数组分为两部分,一部分比基准小,另一部分比基准大,然后递归地对这两部分进行排序。
A、说明:
特点:
- 采用分治法,选择一个基准元素,将数组分为两部分,左边小于基准,右边大于基准,然后递归排序。
优点:
- 平均情况下效率非常高。
- 适合大规模数据。
缺点:
- 最坏情况下时间复杂度较高(O(n²))。
- 不稳定。
时间复杂度:
- 最好情况:O(n log n)
- 最坏情况:O(n²)(当数组已经有序时)
- 平均情况:O(n log n)
空间复杂度:
- O(log n)(递归栈空间)
稳定性:
- 不稳定
B、步骤:
-
选择一个基准元素。
-
将数组分为两部分:一部分比基准小,另一部分比基准大。
-
递归地对这两部分进行快速排序。
C、示例代码:
def quick_sort(arr):if len(arr) <= 1:return arrpivot = arr[len(arr) // 2]left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]return quick_sort(left) + middle + quick_sort(right)# 示例
arr = [10, 7, 8, 9, 1, 5]
print("排序前:", arr)
print("排序后:", quick_sort(arr))
五、归并排序 (Merge Sort)
归并排序是一种稳定的排序算法,采用分治法策略。它将数组分成两半,分别对它们进行排序,然后将排序后的两半合并。
A、说明:
特点:
- 采用分治法,将数组分成两部分,分别排序后合并。
优点:
- 时间复杂度稳定,适合大规模数据。
- 稳定排序。
缺点:
- 需要额外的存储空间。
- 对于小规模数据效率不如插入排序。
时间复杂度:
- 最好情况:O(n log n)
- 最坏情况:O(n log n)
- 平均情况:O(n log n)
空间复杂度:
- O(n)(需要额外的数组空间)
稳定性:
- 稳定
B、步骤:
-
将数组分成两半。
-
递归地对每一半进行归并排序。
-
将排序后的两半合并。
C、示例代码:
def merge_sort(arr):if len(arr) <= 1:return arrmid = len(arr) // 2left = merge_sort(arr[:mid])right = merge_sort(arr[mid:])return merge(left, right)def merge(left, right):result = []i = j = 0while i < len(left) and j < len(right):if left[i] < right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1result.extend(left[i:])result.extend(right[j:])return result# 示例
arr = [38, 27, 43, 3, 9, 82, 10]
print("排序前:", arr)
print("排序后:", merge_sort(arr))
六、堆排序 (Heap Sort)
堆排序是一种基于二叉堆的排序算法。它首先将数组构建成一个最大堆,然后逐步将堆顶元素(最大值)与堆的最后一个元素交换,并调整堆,直到整个数组排序完成。
A、说明:
特点:
- 利用堆数据结构,将数组构建成最大堆(或最小堆),然后逐个取出堆顶元素。
优点:
- 时间复杂度稳定,适合大规模数据。
- 不占用额外空间(原地排序)。
缺点:
- 不稳定。
- 实现较复杂。
时间复杂度:
- 最好情况:O(n log n)
- 最坏情况:O(n log n)
- 平均情况:O(n log n)
空间复杂度:
- O(1)(原地排序)
稳定性:
- 不稳定
B、步骤:
-
构建一个最大堆。
-
将堆顶元素(最大值)与堆的最后一个元素交换。
-
调整堆,使其重新成为最大堆。
-
重复步骤2~3,直到堆的大小为1。
C、示例代码:
def heapify(arr, n, i):largest = ileft = 2 * i + 1right = 2 * i + 2if left < n and arr[i] < arr[left]:largest = leftif right < n and arr[largest] < arr[right]:largest = rightif largest != i:arr[i], arr[largest] = arr[largest], arr[i]heapify(arr, n, largest)def heap_sort(arr):n = len(arr)for i in range(n // 2 - 1, -1, -1):heapify(arr, n, i)for i in range(n-1, 0, -1):arr[i], arr[0] = arr[0], arr[i]heapify(arr, i, 0)return arr# 示例
arr = [12, 11, 13, 5, 6, 7]
print("排序前:", arr)
print("排序后:", heap_sort(arr))
七、希尔排序 (Shell Sort)
希尔排序是插入排序的一种高效改进版本。它通过将数组分成若干个子序列,分别进行插入排序,然后逐步缩小子序列的间隔,最终完成排序。
A、说明:
特点:
- 是插入排序的改进版,通过分组插入排序,逐步缩小分组间隔。
优点:
- 对于中等规模数据效率较高。
- 比插入排序更快。
缺点:
- 时间复杂度依赖于增量序列的选择。
- 不稳定。
时间复杂度:
- 最好情况:O(n log n)
- 最坏情况:O(n²)
- 平均情况:取决于增量序列
空间复杂度:
- O(1)(原地排序)
稳定性:
- 不稳定
B、步骤:
-
选择一个增量序列(例如,n/2, n/4, …, 1)。
-
对每个增量进行插入排序。
-
逐步缩小增量,直到增量为1。
C、示例代码:
def shell_sort(arr):n = len(arr)gap = n // 2while gap > 0:for i in range(gap, n):temp = arr[i]j = iwhile j >= gap and arr[j - gap] > temp:arr[j] = arr[j - gap]j -= gaparr[j] = tempgap //= 2return arr# 示例
arr = [12, 34, 54, 2, 3]
print("排序前:", arr)
print("排序后:", shell_sort(arr))
八、计数排序 (Counting Sort)
计数排序是一种非比较排序算法,适用于整数排序。它通过统计每个元素的出现次数,然后根据统计结果将元素放回正确的位置。
A、说明:
特点:
- 适用于整数排序,通过统计每个元素的出现次数,然后依次输出。
优点:
- 时间复杂度低,适合数据范围较小的整数排序。
缺点:
- 需要额外的存储空间。
- 只适用于整数排序。
时间复杂度:
- 最好情况:O(n + k)(k是数据范围)
- 最坏情况:O(n + k)
- 平均情况:O(n + k)
空间复杂度:
- O(k)(需要额外的计数数组)
稳定性:
- 稳定
B、步骤:
-
统计每个元素的出现次数。
-
计算每个元素在排序后数组中的位置。
-
将元素放回正确的位置。
C、示例代码:
def counting_sort(arr):max_val = max(arr)count = [0] * (max_val + 1)for num in arr:count[num] += 1sorted_arr = []for i in range(len(count)):sorted_arr.extend([i] * count[i])return sorted_arr# 示例
arr = [4, 2, 2, 8, 3, 3, 1]
print("排序前:", arr)
print("排序后:", counting_sort(arr))
九、桶排序 (Bucket Sort)
桶排序是一种分布式排序算法,它将元素分到若干个桶中,每个桶分别进行排序,最后将桶中的元素合并。
A、说明:
特点:
- 将数据分到多个桶中,每个桶单独排序,最后合并。
优点:
- 适合数据分布均匀的情况。
- 时间复杂度较低。
缺点:
- 需要额外的存储空间。
- 数据分布不均匀时效率下降。
时间复杂度:
- 最好情况:O(n + k)(k是桶的数量)
- 最坏情况:O(n²)
- 平均情况:O(n + k)
空间复杂度:
- O(n + k)(需要额外的桶空间)
稳定性:
- 稳定
B、步骤:
-
将元素分到若干个桶中。
-
对每个桶中的元素进行排序。
-
将桶中的元素合并。
C、示例代码:
def bucket_sort(arr):max_val = max(arr)min_val = min(arr)bucket_range = (max_val - min_val) / len(arr)buckets = [[] for _ in range(len(arr))]for num in arr:index = int((num - min_val) // bucket_range)if index != len(arr):buckets[index].append(num)else:buckets[-1].append(num)sorted_arr = []for bucket in buckets:sorted_arr.extend(sorted(bucket))return sorted_arr# 示例
arr = [0.42, 0.32, 0.33, 0.52, 0.37, 0.47, 0.51]
print("排序前:", arr)
print("排序后:", bucket_sort(arr))
十、基数排序 (Radix Sort)
基数排序是一种非比较排序算法,它通过将整数按位数切割成不同的数字,然后按每个位数分别进行排序。
A、说明:
特点:
- 按照位数从低到高(或从高到低)依次排序。
优点:
- 适合整数或字符串排序。
- 时间复杂度较低。
缺点:
- 需要额外的存储空间。
- 只适用于整数或字符串排序。
时间复杂度:
- 最好情况:O(n × k)(k是最大位数)
- 最坏情况:O(n × k)
- 平均情况:O(n × k)
空间复杂度:
- O(n + k)(需要额外的桶空间)
稳定性:
- 稳定
B、步骤:
-
找到数组中的最大数,确定最大位数。
-
从最低位开始,对数组进行计数排序。
-
重复步骤2,直到最高位。
C、示例代码:
def counting_sort_for_radix(arr, exp):n = len(arr)output = [0] * ncount = [0] * 10for i in range(n):index = arr[i] // expcount[index % 10] += 1for i in range(1, 10):count[i] += count[i - 1]i = n - 1while i >= 0:index = arr[i] // expoutput[count[index % 10] - 1] = arr[i]count[index % 10] -= 1i -= 1for i in range(n):arr[i] = output[i]def radix_sort(arr):max_val = max(arr)exp = 1while max_val // exp > 0:counting_sort_for_radix(arr, exp)exp *= 10return arr# 示例
arr = [170, 45, 75, 90, 802, 24, 2, 66]
print("排序前:", arr)
print("排序后:", radix_sort(arr))
十一、总结对比:
排序算法 | 最好时间复杂度 | 最坏时间复杂度 | 平均时间复杂度 | 空间复杂度 | 稳定性 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|---|---|---|---|
冒泡排序 | (O(n)) | (O(n^2)) | (O(n^2)) | (O(1)) | 稳定 | 实现简单,适合小规模数据 | 效率低,不适合大规模数据 | 小规模数据 |
选择排序 | (O(n^2)) | (O(n^2)) | (O(n^2)) | (O(1)) | 不稳定 | 实现简单,不占用额外空间 | 效率低,不适合大规模数据 | 小规模数据 |
插入排序 | (O(n)) | (O(n^2)) | (O(n^2)) | (O(1)) | 稳定 | 对小规模数据或基本有序数据效率高 | 效率低,不适合大规模数据 | 小规模或基本有序数据 |
快速排序 | (O(n \log n)) | (O(n^2)) | (O(n \log n)) | (O(\log n)) | 不稳定 | 平均情况下效率高,适合大规模数据 | 最坏情况下效率低(如数据已经有序) | 大规模数据 |
归并排序 | (O(n \log n)) | (O(n \log n)) | (O(n \log n)) | (O(n)) | 稳定 | 时间复杂度稳定,适合大规模数据 | 需要额外空间,对小规模数据效率不如插入排序 | 大规模数据 |
堆排序 | (O(n \log n)) | (O(n \log n)) | (O(n \log n)) | (O(1)) | 不稳定 | 时间复杂度稳定,适合大规模数据 | 实现较复杂,不稳定 | 大规模数据 |
希尔排序 | (O(n \log n)) | (O(n^2)) | (O(n \log n)) | (O(1)) | 不稳定 | 对小规模数据效率较高,比插入排序更快 | 时间复杂度依赖于增量序列的选择 | 中等规模数据 |
计数排序 | (O(n + k)) | (O(n + k)) | (O(n + k)) | (O(n + k)) | 稳定 | 时间复杂度低,适合数据范围较小的整数排序 | 需要额外空间,仅适用于整数 | 数据范围较小的整数排序 |
桶排序 | (O(n + k)) | (O(n^2)) | (O(n + k)) | (O(n + k)) | 稳定 | 适合数据分布均匀的情况 | 需要额外空间,对数据分布不均匀的情况效率低 | 数据分布均匀的情况 |
基数排序 | (O(n \times k)) | (O(n \times k)) | (O(n \times k)) | (O(n + k)) | 稳定 | 适合整数排序,尤其是位数较少的情况 | 需要额外空间,仅适用于整数 | 整数或字符串排序 |
© 著作权归作者所有
相关文章:
算法02-各种排序算法
各种常见排序算法总结 一. 冒泡排序 (Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地遍历要排序的列表,比较相邻的元素,并交换它们的位置,直到整个列表排序完成。 A、说明: 特点: 通过不断交换相邻元素&am…...
python基础入门:8.1项目1:爬虫与数据分析
Python爬虫与数据分析全流程实战:从数据采集到可视化呈现 # 综合案例:电商价格监控分析系统 import requests from bs4 import BeautifulSoup import pandas as pd import matplotlib.pyplot as plt# 配置参数 HEADERS {User-Agent: Mozilla/5.0 (Wind…...
git 克隆指定 tag 的项目
git 克隆指定 tag 的项目 一、克隆指定tag的项目二、验证克隆结果 一、克隆指定tag的项目 以 tinyxml2项目 为例说明: git clone --branch V10.0.0 https://github.com/leethomason/tinyxml2.git解释: git clone:这是克隆一个远程仓库的命…...

DeepSeek学习笔记之——初识DeepSeek
春节假期回来已经有一周时间了,这假期综合症的症状是一点没减~~~ 假期期间除了这个欢乐详和的节日气氛,就数DeepSeek最火热了!!! 什么是DeepSeek? DeepSeek是一款由国内人工智能公司研发的大型语言模型,…...
Linux 调用可执行程序
Linux 调用可执行程序 1. system() 函数1.1 system() 函数的声明1.2 system() 函数的不同场景返回值1.3 system() 函数的代码示例 2. exec() 函数族2.1 exec() 函数族的声明2.2 exec() 函数族执行失败的情况2.3 exec() 函数族的代码示例 3. exec() 与 system() 的区别以及使用注…...
MVCC面试怎么答
说到mvcc这个比较抽象的概念,很多人都有点束手无策。因为它实际上偏理论,实际应用中很难用到。但在面试中出现频率又很高,一问大部分都G。所以怎么精简回答并且能抓住重点就很关键了。往上详细解说MVCC的太多了,我这里没那么多废话…...

用Go实现 SSE 实时推送消息(消息通知)——思悟项目技术4
目录 简介 工作原理 例子 使用场景 简介 SSE(Server - Sent Events)是一种允许服务器向客户端实时推送更新的 Web 技术。是一种基于 HTTP 协议的单向通信机制,服务器可以在客户端建立连接后,持续不断地向客户端发送事件流。客…...

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 0基础…...
vue3:动态渲染后端返回的图片
问: div classleft-png 这里我用css设置了他的背景图片,但是现在我希望改为后端返回的图片,怎么写? 后端返回数据: const centerdata {img:;xxxx,title,xxxx,num:xxxx}? 回答: 好的ÿ…...
DeepSeek小白初识指南
1.什么是DeepSeek? DeepSeek是一个基于大语言模型(LLM)的智能助手,能够处理自然语言理解、生成、对话等任务。它广泛应用于聊天机器人、内容生成、数据分析等领域。 2.DeepSeek和OpenAI等大模型差异? 虽然DeepSeek和Op…...
图像锐化(QT)
如果不使用OpenCV,我们可以直接使用Qt的QImage类对图像进行像素级操作来实现锐化。锐化算法的核心是通过卷积核(如拉普拉斯核)对图像进行处理,增强图像的边缘和细节。 以下是一个完整的Qt应用程序示例,展示如何使用Qt…...

38.社区信息管理系统(基于springboothtml)
目录 1.系统的受众说明 2.需求分析及相关技术 2.1设计目的 2.2社区信息管理系统的特点 2.3可行性分析 2.3.1技术可行性 2.3.2运行可行性 2.4系统设计 2.4.1系统功能分析 2.4.2管理员权限功能设计 2.4.3业主权限功能设计 2.5系统的技术介绍 2.5.1 Html 2.5.2 Aja…...

游戏引擎学习第98天
仓库:https://gitee.com/mrxiao_com/2d_game_2 开始进行一点回顾 今天的目标是继续实现正常贴图的操作,尽管目前我们还没有足够的光照信息来使其完全有用。昨日完成了正常贴图相关的基础工作,接下来将集中精力实现正常贴图的基本操作,并准备…...
音频知识基础
音频知识基础 声音属性声音度量人耳特性通道数音频数字化传输接口 声音属性 响度 响度是人耳对声音强弱的主观感受; 主要和声波的振幅相关,同时也和频率有一定关系; 音调 音调是人耳对声音高低的主观感受; 主要与频率相关&#…...

【AI赋能】蓝耘智算平台实战指南:3步构建企业级DeepSeek智能助手
蓝耘智算平台实战指南:3步构建企业级DeepSeek智能助手 引言:AI大模型时代的算力革命 在2025年全球AI技术峰会上,DeepSeek-R1凭借其开源架构与实时推理能力,成为首个通过图灵测试的中文大模型。该模型在语言理解、跨模态交互等维…...

LabVIEW无人机飞行状态监测系统
近年来,无人机在农业植保、电力巡检、应急救灾等多个领域得到了广泛应用。然而,传统的目视操控方式仍然存在以下三大问题: 飞行姿态的感知主要依赖操作者的经验; 飞行中突发的姿态异常难以及时发现; 飞行数据缺乏系统…...

DeepSeek模型架构及优化内容
DeepSeek v1版本 模型结构 DeepSeek LLM基本上遵循LLaMA的设计: 采⽤Pre-Norm结构,并使⽤RMSNorm函数. 利⽤SwiGLU作为Feed-Forward Network(FFN)的激活函数,中间层维度为8/3. 去除绝对位置编码,采⽤了…...
html语义化
常见语义化标签有: (1)页面结构标签:<header>、<nav>、<main>、<article>、<section>、<aside>、<footer> (2)文本语义标签:<h1>-<h6>…...
python学习第十四天之机器学习名词介绍
名词介绍 1. 常用术语解释2.常见机器学习任务3. 机器学习常见算法1. 监督学习(Supervised Learning)2. 非监督学习(Unsupervised Learning)3.深度学习4.**对比总结** 1. 常用术语解释 拟合(Fit)࿱…...

天津三石峰科技——汽车生产厂的设备振动检测项目案例
汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等 问题,为了避免意外停机造成损失,需要加装一些健康监测设备,监测设备运 行状态。天津三石峰科技采用 12 通道振动信号采集卡(下图 1)对…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...