当前位置: 首页 > news >正文

【16】数据结构之基于树的排序算法篇章

目录标题

  • 选择排序
    • 简单选择排序
    • 树形选择排序
  • 堆排序
    • 堆的定义Heap
      • 小跟堆
      • 大根堆
      • 堆的存储
      • 堆的代码设计
      • 堆排序的代码设计
    • 排序算法综合比较

选择排序

  • 基本思想:从待排序的序列中选出最大值或最小值,交换该元素与待排序序列的头部元素,对剩下的元素重复操作,直到完成所有元素排序.

简单选择排序

  • 第i次排序通过n-i次关键字的比较,从n-i+1个元素中选出关键字最小的元素,并和第i个元素交换.共需进行i-1次比较,直到所有元素排序完成为止.
  • 示意图
    在这里插入图片描述
  • 代码实现与调试
# 树的排序--简单选择排序
class SelectSort(object):def __init__(self, items):# 待排序的序列self.items = itemsdef selectSort(self):"""简单选择排序:return:"""# 共n轮排序for i in range(len(self.items)):# 待交换的元素index = i# 在未排序的序列中选取最小的元素for j in range(i+1, len(self.items)):if self.items[j] < self.items[index]:index = j# 最小的元素不是带交换的元素,则两者交换if index != i:self.items[i],self.items[index] = self.items[index],self.items[i]if __name__ == "__main__":arr = [84, 62, 35, 77, 55, 14, 35, 98]select = SelectSort(arr)select.selectSort()print(arr)

树形选择排序

  • 树形选择排序也称锦标赛排序.
  • 首先所有参加比赛的选手两两分组,每组产生一个胜利者,然后这些胜利者再两两分组进行比赛,每组产生一个胜利者,之后重复执行,直到最后只有一个胜利者为止.
  • 示意图
    在这里插入图片描述
  • 代码实现与调试
class TournamentSort:def __init__(self, arr):self.original = arr.copy()self.n = len(arr)# 初始化所有属性,确保空数组时属性存在self.leaf_size = 0self.tree_size = 0self.tree = []if self.n == 0:return  # 空数组直接返回# 计算扩展到下一个2的幂次方的叶子数量self.leaf_size = 1 << (self.n - 1).bit_length()self.tree_size = 2 * self.leaf_size - 1# 初始化树结构并用inf填充空位self.tree = [float('inf')] * self.tree_size# 将原始数据填充到叶子节点self.tree[-self.leaf_size: -self.leaf_size + self.n] = self.original# 构建初始锦标赛树(自底向上)for i in range(self.tree_size - 1, 0, -1):if i % 2 == 1:  # 只处理左子节点,避免重复计算parent = (i - 1) // 2self.tree[parent] = min(self.tree[i], self.tree[i + 1])def get_min(self):"""获取当前最小值并重构树"""if self.n <= 0:return Nonewinner = self.tree[0]# 查找叶子层中的最小值位置idx = self.tree_size // 2  # 叶子层起始索引while idx < self.tree_size:if self.tree[idx] == winner:breakidx += 1# 标记该位置为已选中self.tree[idx] = float('inf')self.n -= 1# 自底向上更新树结构while idx > 0:parent = (idx - 1) // 2sibling = idx + 1 if idx % 2 == 1 else idx - 1self.tree[parent] = min(self.tree[idx], self.tree[sibling])idx = parentreturn winnerdef sort(self):"""执行完整排序过程"""sorted_arr = []while True:val = self.get_min()if val is None:breaksorted_arr.append(val)return sorted_arrdef print_tree(self):"""可视化打印树结构(调试用)"""print("当前锦标赛树结构:")if self.tree_size == 0:print("空树")returnlevel = 0level_size = 1while level_size <= self.tree_size:start = 2 ** level - 1end = start + level_sizeprint(f"Level {level}: {self.tree[start:end]}")level += 1level_size *= 2# ---------------------- 测试用例 ----------------------
if __name__ == "__main__":test_cases = [[3, 1, 4, 1, 5, 9, 2, 6],  # 常规测试[9, 3, 5, 2, 8],  # 奇数元素[5, 3, 8, 6, 2],  # 重复值测试[1],  # 单个元素[]  # 空数组]for i, case in enumerate(test_cases):print(f"\n测试用例 {i + 1}: {case}")ts = TournamentSort(case)ts.print_tree()  # 调试查看初始树结构sorted_result = ts.sort()print(f"排序结果: {sorted_result}")print("验证结果:", "正确" if sorted_result == sorted(case) else "错误")

堆排序

  • 对树形选择排序的一种改进

堆的定义Heap

  • 堆是二叉树的一种
  • 堆是完全二叉树
  • 堆中任意结点的值总是不大于或者不小于其双亲结点的值
  • 堆分为大根堆和小跟堆

小跟堆

  • 如果根结点存在左孩子结点,则根结点的值小于或等于左孩子结点的值
  • 如果根结点存在右孩子结点,则根结点的值小于或等于右孩子结点的值
  • 根结点的左右子树也是小跟堆
  • 小跟堆示意图
    在这里插入图片描述

大根堆

  • 如果根结点存在左孩子结点,则根结点的值大于或等于左孩子结点的值
  • 如果根结点存在右孩子结点,则根结点的值大于或等于右孩子结点的值
  • 根结点的左右子树也是大跟堆
  • 大跟堆示意图
    在这里插入图片描述

堆的存储

  • 常用顺序结构进行存储.
  • 重建堆方法
    • 首先将完全二叉树根结点中的元素移出,
    • 从空结点的左右孩子结点中选出一个关键字较小的元素,上移到空结点中,
    • 当前那个较小关键字较小的子结点相当于空结点,
    • 重复上述移动原则
    • 直到空结点的左右孩子结点的关键字均不小于待调整元素的关键字为止
  • 建立初始堆算法思路
    • 一个任意序列可以看成对应的完全二叉树,由于叶子结点可以视为单元素的堆,然后反复利用重建堆方法,自底向上逐层把所有子树调整为堆,直到将整个完全二叉树调整为堆为止

堆的代码设计

class Heap:def __init__(self, items=[]):self.items = items.copy()self.build_min_heap()def build_min_heap(self):"""将列表初始化为小根堆"""length = len(self.items)for i in range(length // 2 - 1, -1, -1):self._sift_down(i, length)def insert(self, key):"""插入新元素并上浮调整"""self.items.append(key)self._sift_up(len(self.items) - 1)def delete(self):"""删除堆顶元素"""if not self.items:raise IndexError("堆为空,无法删除")# 将最后一个元素移到堆顶removed = self.items[0]self.items[0] = self.items[-1]self.items.pop()# 下沉调整if self.items:self._sift_down(0, len(self.items))return removeddef _sift_up(self, index):"""元素上浮操作"""parent = (index - 1) // 2while parent >= 0 and self.items[index] < self.items[parent]:self.items[index], self.items[parent] = self.items[parent], self.items[index]index = parentparent = (index - 1) // 2def _sift_down(self, index, size):"""元素下沉操作"""smallest = indexleft = 2 * index + 1right = 2 * index + 2if left < size and self.items[left] < self.items[smallest]:smallest = leftif right < size and self.items[right] < self.items[smallest]:smallest = rightif smallest != index:self.items[index], self.items[smallest] = self.items[smallest], self.items[index]self._sift_down(smallest, size)def __str__(self):return str(self.items)# ---------------------- 测试用例 ----------------------
if __name__ == "__main__":# 测试初始化与插入删除heap = Heap([10, 25, 15, 40, 25, 20, 30, 50, 55])print("初始堆:", heap)  # 输出: [10, 25, 15, 40, 25, 20, 30, 50, 55]heap.insert(9)print("插入9后:", heap)  # 输出: [9, 25, 10, 40, 55, 15, 30, 50, 25, 20]val = heap.delete()print(f"删除元素 {val} 后:", heap)  # 删除9后:[10, 25, 15, 40, 55, 20, 30, 50, 25]val = heap.delete()print(f"删除元素 {val} 后:", heap)  # 删除10后:[15, 25, 20, 40, 25, 55, 30, 50]# 测试空堆empty_heap = Heap()try:empty_heap.delete()except IndexError as e:print("空堆删除测试:", e)  # 输出:堆为空,无法删除# 测试单元素堆single_heap = Heap([5])single_heap.delete()print("单元素堆删除后:", single_heap)  # 输出:[]

堆排序的代码设计

class HeapSort:def __init__(self, items):self.items = items  # 初始化待排序数组def heapSort(self):"""堆排序主方法"""length = len(self.items)# 1. 构建最大堆(从最后一个非叶子节点开始调整)for i in range(length // 2 - 1, -1, -1):self._adjust_max_heap(self.items, i, length)# 2. 排序阶段(依次将堆顶元素移到末尾)for i in range(length - 1, 0, -1):# 交换堆顶(最大值)与当前末尾元素self.items[0], self.items[i] = self.items[i], self.items[0]# 调整剩余堆结构(堆大小逐渐减小)self._adjust_max_heap(self.items, 0, i)def _adjust_max_heap(self, arr, root, heap_size):"""调整最大堆(递归实现)"""largest = root  # 初始化最大值为根节点left = 2 * root + 1  # 左子节点索引right = 2 * root + 2  # 右子节点索引# 比较左子节点if left < heap_size and arr[left] > arr[largest]:largest = left# 比较右子节点if right < heap_size and arr[right] > arr[largest]:largest = right# 如果最大值位置变化,交换并递归调整子树if largest != root:arr[root], arr[largest] = arr[largest], arr[root]self._adjust_max_heap(arr, largest, heap_size)# ---------------------- 测试用例 ----------------------
if __name__ == "__main__":nums = [40, 55, 73, 12, 98, 27]sorter = HeapSort(nums)sorter.heapSort()print("排序结果:", nums)  # 输出: [12, 27, 40, 55, 73, 98]

排序算法综合比较

在这里插入图片描述

相关文章:

【16】数据结构之基于树的排序算法篇章

目录标题 选择排序简单选择排序树形选择排序 堆排序堆的定义Heap小跟堆大根堆堆的存储堆的代码设计堆排序的代码设计 排序算法综合比较 选择排序 基本思想&#xff1a;从待排序的序列中选出最大值或最小值&#xff0c;交换该元素与待排序序列的头部元素&#xff0c;对剩下的元…...

Uniapp:确认框

目录 一、 出现场景二、 效果展示三、具体使用 一、 出现场景 在项目的开发中&#xff0c;会经常出现删除数据的情况&#xff0c;如果直接删除的话&#xff0c;可能会存在误删&#xff0c;用户体验不好&#xff0c;所以需要增加一个消息提示&#xff0c;提醒用户是否删除。 二…...

pyswmm实现洪涝模拟

准备好.inp文件作为SWMM模型输入&#xff0c;调用pyswmm模块执行模拟&#xff0c;返回节点溢流量&#xff08;flooding&#xff09;作为积水量的初步表征。 代码&#xff1a; from pyswmm import Simulation, Nodes import pandas as pddef run_swmm_simulation(inp_file, ou…...

My Diary Pro:记录生活,珍藏回忆

我的日记My Diary Pro是一个非常好用的手机日记软件&#xff0c;可以使用它来记录每日生活日常&#xff0c;不少的用户可能都知道在生活之中可能会发生一些比较的重要的事情&#xff0c;实际上我们都可以将这些内容记录下来。包括个人观点&#xff0c;旅行游记&#xff0c;心情…...

CSRF(跨站请求伪造)漏洞概述

CSRF(跨站请求伪造)漏洞概述 一、​什么是 CSRF ​ 攻击者诱导已登录用户在不知情的情况下&#xff0c;对受信任网站执行未授权操作。 简单说&#xff1a;你登录着网站A&#xff0c;攻击者诱导你访问某个恶意链接&#xff0c;使网站A误以为是你自己发出的操作&#xff08;比…...

[Java实战经验]对象拷贝

目录 谨慎重写clone方法重写clone()支持深拷贝带来的问题 合适的深拷贝 首先&#xff0c;对于不可变的类&#xff0c;我们不应该实现Cloneable接口&#xff0c;因为不可变类不需要拷贝&#xff0c;直接引用即可&#xff0c;实现Cloneable接口只会造成浪费。 对于Java可变类来说…...

WAF防火墙:构筑Web应用安全的“隐形护盾”

在数字化时代&#xff0c;Web应用已成为企业服务与用户交互的核心窗口。然而&#xff0c;随之而来的SQL注入、跨站脚本攻击&#xff08;XSS&#xff09;、DDoS攻击等威胁&#xff0c;时刻考验着网站的安全防线。Web应用防火墙&#xff08;WAF&#xff09;作为关键防护工具&…...

开源智慧巡检——无人机油田AI视频监控的未来之力

油田巡检&#xff0c;关乎能源命脉&#xff0c;却常受困于广袤地形、高危环境和人工效率瓶颈。管道泄漏、设备故障、非法闯入——这些隐患稍有疏忽&#xff0c;便可能酿成大患。传统巡检已无法满足现代油田对安全与效率的需求&#xff0c;而无人机油田巡检系统正以智能化之力重…...

【2025年泰迪杯数据挖掘挑战赛】B题 完整论文 模型建立与求解

目录 2025年泰迪杯数据挖掘挑战赛 B题完整论文&#xff1a;建模与求解 Matlab代码一、问题重述二、模型假设与符号说明2.1 模型基本假设2.2 符号说明 三、数据预处理**问题一&#xff1a;志愿者身体活动信息的统计分析****问题二&#xff1a;身体活动MET值的实时估计模型构建**…...

Chromium 134 编译指南 macOS篇:安装 Xcode(二)

1. 引言 在Chromium开发的征程中&#xff0c;为macOS平台构建正确的开发环境是成功编译的关键基础。继上一篇系统环境准备后&#xff0c;本文将重点介绍Xcode的安装与配置过程。作为macOS上不可或缺的集成开发环境(IDE)&#xff0c;Xcode为Chromium 134的编译提供了必要的编译…...

软件定义网络(SDN):重塑未来网络的革命性架构

在当今数字化时代&#xff0c;网络已成为企业、云计算、5G通信和物联网&#xff08;IoT&#xff09;的核心基础设施。然而&#xff0c;传统网络架构由于其封闭、静态和分布式的特性&#xff0c;难以应对快速变化的业务需求。软件定义网络&#xff08;Software-Defined Networki…...

Java虚拟机面试题:类加载机制

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

OCCT 入门(3)核心模块与架构

文章目录 一、核心模块与架构1、架构概述2、核心模块3、数据流转3.1、几何创建&#xff08;Geometric Primitives&#xff09;3.2、拓扑构建&#xff08;Topology Construction&#xff09;3.3、模型处理&#xff08;Modeling Algorithms&#xff09;3.4、可视化&#xff08;Vi…...

MAC-​​需求​​:10万订单异步执行库存扣减、短信通知。

批量任务并行处理​​ 实现,通过拆分任务、异步执行和线程池管理提升处理。 ​​10万订单异步处理方案设计​​ 基于图中代码的批量处理框架,结合订单业务需求,以下是 ​​库存扣减与短信通知的异步实现​​: ​​1. 代码实现(基于原有框架改造)​​ @Service public…...

ArrayList vs LinkedList,HashMap vs TreeMap:如何选择最适合的集合类?

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 在 Java 开发中&#xff0c;集合类的选择直接影响程序的性能和代码的可维护性。不同的数据结构适用于不同的场景&#xff0c;盲目使用可能导致内存浪费、性能…...

使用Form.List且有Select组件

当在使用Form.List组件&#xff0c;且组件中有Select选项时&#xff0c;针对每一次选择&#xff0c;都要过滤掉那些已经选择过的选项&#xff0c;可能遇到的问题&#xff1a; 直接过滤会将每一个Select中的options选项都过滤掉&#xff0c;无法正常展示选择的选项 解决办法&a…...

大数据学习笔记

文章目录 1. 大数据概述1.1 大数据的特性1.2 大数据技术生态1.2.1 Hadoop 的概念特性1.2.2 Hadoop生态圈 — 核心组件与技术栈1.2.3 Hadoop生态演进趋势 2. 数据处理流程与技术栈2.1 数据采集2.1.1 日志采集工具2.1.2 实时数据流2.1.3 数据迁移 2.2 数据预处理2.2.1 批处理2.2.…...

Obsidian 文件夹体系构建 -INKA

Obsidian 文件夹体系构建 -INKA 本篇文章主要分享一下自己折腾学习实践过的 INKA 框架方法。原地址&#xff1a;Obsidian文件夹体系构建–INKA。 文章目录 Obsidian 文件夹体系构建 -INKA前言INKA简介INKA 理论最佳实践实际应用 反思 前言 上文 Obsidian文件夹体系构建-ACCES…...

QML与C++:基于ListView调用外部模型进行增删改查(性能优化版)

目录 引言相关阅读工程结构数据模型设计DataModel 类ContactProxyModel 类 为什么使用QSortFilterProxyModel&#xff1f;应用初始化与模型连接UI实现 性能分析与优化运行效果扩展思考总结下载链接 引言 在上一篇中介绍了基于ListView调用外部模型进行增删改查&#xff0c;本文…...

集合常用Stream操作

1、中间操作 filter()过滤 将流中的元素筛选出满足条件的元素 List<String> list Arrays.asList("abc","test","demo","frse","fesfes"); list.stream().filter(s -> s.startsWith("f")).forEach(Sy…...

ReactNative中处理安全区域问题

RN原生方案不支持android系统&#xff0c;所以在此使用三方组件react-native-safe-area-context 1、安装插件 yarn add react-native-safe-area-context2、安装完成后直接yarn ios可能会失败&#xff0c;需要先 cd ios && pod install && cd ..出来再继…...

二、The Power of LLM Function Calling

一、Function Calling 的诞生背景 1. 传统LLM的局限性 静态文本生成的不足&#xff1a;早期的LLM&#xff08;如早期版本的ChatGPT&#xff09;主要依赖预训练的知识库生成文本&#xff0c;但无法直接与外部系统或API交互。这意味着它们只能基于历史数据回答问题&#xff0c;…...

贪心算法day10(无重叠区间)

1.无重叠区间 435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 代码&#xff1a; class Solution {public static int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals,(v1,v2)->{return v1[0]-v2[0];});int left interva…...

reactive 解构赋值给 ref

在 Vue 3 中&#xff0c;当你执行以下操作时&#xff1a; javascript const applyBasicInfo ref(); applyBasicInfo.value { ...props.applyBasicInfo }; 最终的 applyBasicInfo.value 是响应式对象&#xff0c;但与原对象 props.applyBasicInfo 的响应性完全独立&#xf…...

MongoDB简单用法

图片中 MongoDB Compass 中显示了默认的三个数据库&#xff1a; adminconfiglocal 如果在 .env 文件中配置的是&#xff1a; MONGODB_URImongodb://admin:passwordlocalhost:27017/ MONGODB_NAMERAGSAAS&#x1f4a1; 一、为什么 Compass 里没有 RAGSAAS 数据库&#xff1f;…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4): 可能形(かのうけい)

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(4): 可能形(かのうけい) 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)~んです  復習(ふくしゅう)(2)いただけませんか 復習(ふくしゅう)(3)可能形(かのうけい)(1)1グループ:(2)2グループ…...

Windows 下 MongoDB ZIP 版本安装指南

在开发和生产环境中&#xff0c;MongoDB 是一种非常流行的 NoSQL 数据库&#xff0c;以其灵活性和高性能而受到开发者的青睐。对于 Windows 用户来说&#xff0c;MongoDB 提供了多种安装方式&#xff0c;其中 ZIP 版本因其灵活性和轻量级的特点&#xff0c;成为很多开发者的首选…...

万字长篇————C语言指针学习汇总

经过一段时间的学习&#xff0c;我们已经接触到了C语言的很多知识了。不过目前我们接下来我们要接触C语言中一个最大的“门槛”&#xff1a;指针。 什么是指针&#xff1f; 在介绍指针之前&#xff0c;我们首先要明白变量与地址之间的关系。 举一个生活中的案例&#xff1a;一…...

day29图像处理OpenCV

文章目录 一、图像预处理6 图像色彩空间转换6.3灰色/BGR/HSV相互转化 7 彩图转灰图方法7.1 最大值法7.2 平均值法7.3 加权均值法7.4 案例 8 图像二值化处理8.1 阈值法(typecv2.THRESH_BINARY)8.2 反阈值法(THRESH_BINARY_INV)8.3 截断阈值法(THRESH_TRUNC)8.4 低阈值零处理(THR…...

Spring Boot 项目三种打印日志的方法详解。Logger,log,logger 解读。

目录 一. 打印日志的常见三种方法&#xff1f; 1.1 手动创建 Logger 对象&#xff08;基于SLF4J API&#xff09; 1.2 使用 Lombok 插件的 Slf4j 注解 1.3 使用 Spring 的 Log 接口&#xff08;使用频率较低&#xff09; 二. 常见的 Logger&#xff0c;logger&#xff0c;…...

KrillinAI:视频跨语言传播的一站式AI解决方案

引言 在全球内容创作领域&#xff0c;跨语言传播一直是内容创作者面临的巨大挑战。传统的视频本地化流程繁琐&#xff0c;涉及多个环节和工具&#xff0c;不仅耗时耗力&#xff0c;还常常面临质量不稳定的问题。随着大语言模型(LLM)技术的迅猛发展&#xff0c;一款名为Krillin…...

PDF处理控件Aspose.PDF指南:使用 C# 从 PDF 文档中删除页面

需要从 PDF 文档中删除特定页面&#xff1f;本快速指南将向您展示如何仅用几行代码删除不需要的页面。无论您是清理报告、跳过空白页&#xff0c;还是在共享前自定义文档&#xff0c;C# 都能让 PDF 操作变得简单高效。学习如何以编程方式从 PDF 文档中选择和删除特定页面&#…...

在 IntelliJ IDEA 中开发 Java Web 项目时,遇到包内明明存在某个类但类名仍然爆红(显示红色错误提示)

在 IntelliJ IDEA 中开发 Java Web 项目时&#xff0c;遇到包内明明存在某个类但类名仍然爆红&#xff08;显示红色错误提示&#xff09;&#xff0c;而项目却能正常运行&#xff0c;重启 IDEA 后问题依旧&#xff0c;这通常是由以下原因及解决方法导致的&#xff1a; 1. 缓存…...

【4】k8s集群管理系列--harbor镜像仓库本地化搭建

一、harbor基本概念 ‌Harbor是一个由VMware开源的企业级Docker镜像仓库解决方案‌&#xff0c;旨在解决企业在容器化应用部署中的痛点&#xff0c;提供镜像存储、管理、安全和分发的全生命周期管理‌。Harbor扩展了Docker Registry&#xff0c;增加了企业级功能&#xff0c;如…...

Active Directory域服务管理与高级应用技术白皮书

目录 一、Active Directory核心架构解析 1.1 AD域服务核心组件 1.2 域功能级别演进 1.3 AD LDS应用场景 二、企业级域环境部署最佳实践 2.1 域控制器部署规划 2.2 高可用架构设计 2.3 客户端入域优化 三、高级域管理技术 3.1 精细化权限管理 3.2 组策略深度配置 3.3…...

OCP中的OCS operator介绍及应用示例

一、OCS operator介绍 在 Red Hat OpenShift Container Platform&#xff08;OCP4.8版之前&#xff0c;包含4.8&#xff09; 中&#xff0c;OCS Operator&#xff08;OpenShift Container Storage Operator&#xff09; 是用于在 OpenShift 集群中部署、配置和管理 OpenShift …...

Linux-服务器添加审计日志功能

#查看audit软件是否在运行(状态为active而且为绿色表示已经在运行) systemctl start auditd #如果没有在运行的话,查看是否被系统禁用 (audit为0表示被禁用) cat /proc/cmdline | grep -w "audit=0" #修改/etc/default/grub里面audit=0 改为audit=1 #更新GRUB…...

ARM Cortex-M中断处理全解析

今天我们聊一聊ARM Cortex-M中断处理。在嵌入式系统中&#xff0c;中断是实现实时响应的核心机制。想象一下&#xff0c;如果没有中断&#xff1a; 按键按下时&#xff0c;系统可能忙于其他任务而错过响应通信数据到来时&#xff0c;可能因为没及时处理而丢失定时任务难以精确…...

douyin_search_tool | 用python开发的抖音关键词搜索采集软件

本软件工具仅限于学术交流使用&#xff0c;严格遵循相关法律法规&#xff0c;符合平台内容合法性&#xff0c;禁止用于任何商业用途&#xff01; 抖音作为国内颇受欢迎的短视频社交平台&#xff0c;汇聚了大量用户群体和活跃用户。分析平台上的热门视频可用于市场调研和竞品分析…...

基于FreeBSD的Unix服务器网络配置

Unix系统版本 FreeBSD-10.1-i386 网络配置 1.配置网络ip及网关 #编辑配置文件 ee /etc/rc.conf #参照如下内容设置 ifconfig_em0”inet 192.168.1.189 netmask 255.255.255.0” defaultrouter”192.168.1.1” #回到命令模式 esc #保存 a a 2.配置dns #编辑配置文件 ee /etc/…...

Margin和Padding在WPF和CSS中的不同

CSS和WPF中 margin 与 padding 在方向上的规定基本一致&#xff0c;但在使用场景和一些细节上有所不同。 CSS - 方向规定&#xff1a; margin 和 padding 属性可以分别指定上、右、下、左四个方向的值。例如 margin:10px 20px 30px 40px; 表示上外边距为10px、右外边距为20…...

JVM 概述

JVM概述 JVM的全为 Java Virtual Machine&#xff0c;但是目前的 JVM 已经不再与任何语言进行深度耦合了&#xff0c;其本质就是运行在计算机上的程序&#xff0c;职责是运行处理 Java 字节码文件。 JVM 功能 解释和运行 JVM 会对字节码文件中的指令&#xff0c;实时的解释为…...

基于django云平台的求职智能分析系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 时代在飞速进步&#xff0c;每个行业都在努力发展现在先进技术&#xff0c;通过这些先进的技术来提高自己的水平和优势&#xff0c;招聘信息管理系统当然不能排除在外。求职智能分析系统是在实际应用和软件工程的开发原理之上&#xff0c;运用Python语言、爬虫技术以及Dj…...

在 Ubuntu 上通过 Docker 部署 Misskey 服务器

在这篇博客中&#xff0c;我们将探讨如何在 Ubuntu 上通过 Docker 部署 Misskey 服务器。Misskey 是一个开源的社交网络平台&#xff0c;支持丰富的社交功能&#xff0c;适合个人和小型社群使用。而 Docker 则是一个便捷的容器化平台&#xff0c;允许开发者轻松地打包、发布和运…...

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络

Pytorch 第十五回&#xff1a;神经网络编码器——GAN生成对抗网络 本次开启深度学习第十五回&#xff0c;基于Pytorch的神经网络编码器。本回分享的是GAN生成对抗网络。在本回中&#xff0c;通过minist数据集来分享如何建立一个GAN生成对抗网络。接下来给大家分享具体思路。 本…...

gitlab如何查看分支的创建时间

在 GitLab 上查看分支创建时间&#xff0c;常规的界面不会直接显示&#xff0c;但可以通过以下几种方法查到准确时间&#xff1a; 方法一&#xff1a;通过 GitLab Web 界面查看首次提交时间&#xff08;近似&#xff09; 打开你的项目仓库。点击左侧的「Repository&#xff08…...

centos时间不正确解决

检查当前系统时间 date如果时间明显不正确&#xff0c;可以进一步检查硬件时钟&#xff08;BIOS 时间&#xff09;&#xff1a; bash复制代码hwclock --show同步时间&#xff08;推荐方式&#xff09; 为了确保系统时间准确&#xff0c;建议使用 NTP&#xff08;网络时间协议…...

ubuntu启动 Google Chrome 时默认使用中文界面,设置一个永久的启动方式

方法 &#xff1a;通过桌面快捷方式设置 编辑 Chrome 的桌面快捷方式&#xff1a; 找到您的 Google Chrome 快捷方式文件。如果是通过菜单启动&#xff0c;通常会在以下路径找到与 Chrome 相关的 .desktop 文件&#xff1a; sudo vim /usr/share/applications/google-chrome.d…...

opencv腐蚀的操作过程

在腐蚀操作的详细流程中&#xff0c;遍历图像的过程如下&#xff1a; 初始化&#xff1a; 设置一个起始位置&#xff08;通常从图像的左上角开始&#xff09;。 准备好结构元素&#xff08;structuring element&#xff09;&#xff0c;它是一个小的矩阵&#xff0c;大小通常是…...

Docker--Docker镜像原理

docker 是操作系统层的虚拟化&#xff0c;所以 docker 镜像的本质是在模拟操作系统。 联合文件系统&#xff08;UnionFS&#xff09; 联合文件系统&#xff08;UnionFS&#xff09; 是Docker镜像实现分层存储的核心技术&#xff0c;它通过将多个只读层&#xff08;Image Laye…...