2024年深圳杯数学建模C题编译器版本的识别问题解题全过程文档及程序
2024年深圳杯数学建模
C题 编译器版本的识别问题
原题再现:
作为一种重要的工具,电子计算机自诞生以来,经历了极为快速的发展。区区百年的时间内,无论从体积、能耗、计算速度,还是应用能力等方面,电子计算机都出现了极为显著的变化。但要充分利用这一工具,必须使用能够被电子计算机解释执行的指令序列,即程序。
最早可用于在电子计算机上执行的程序通常使用机器语言(machine language)编制。由于该类语言并不直观,故它极大地限制了电子计算机的普及。为克服这一困难,1957年诞生了第一个自动编译器,FORTRAN。此后,大量性能更高并支持近乎自然语言的编译器被设计了出来,例如,著名的C/C++编译器,Python编译器等。编译器的出现极大地推动了电子计算机在当代的广泛应用。
为方便使用电子计算机,人们需首先按照一定的规则(即程序设计语言)将需要电子计算机完成的指令以特定的顺序集成在一起,形成脚本(即程序),然后使用编译器自动将脚本翻译为一系列机器语言的组合(即编译),编译器的编译结果最后会提交电子计算机执行。
随着程序设计语言的不断变化,编译器也会不断更新。例如,GCC(the GNU Compiler Collection)就已经更新到了13.2.0版本[1]。不同版本的编译器在编译同一程序脚本时,编译结果会存在一定的差异;相同版本的编译器在使用不同编译选项时,编译结果也会出现差异。能否利用编译结果差异区分编译器的版本?你们的任务是
问题1 使用GCC中不同版本的C++编译器编译附件1中的程序源代码[2],并对比使用默认编译选项时的编译结果。找出区分这些编译结果的主要特征。
问题2 根据问题一中得到的特征,构造一个判别函数,使得能从各版本C++编译器使用默认编译选项时的编译结果,判别区分编译器版本。
问题3 用GCC中不同版本的C++编译器编译附件2中的源程序代码[3],给出直接使用问题2中得到的判别函数区分编译器区版本的结果。研究使用附件1、2原代码编译结果之一都能区分GCC中不同版本的C++编译器的判别函数。
问题4 给出几条提高由编译结果区分编译器版本的判别函数性能的建议,包括区分度和对原代码的泛化性。
整体求解过程概述(摘要)
编译器作为将高级语言转换为机器语言的工具,在软件开发过程中扮演着至关重要的角色。然而,不同版本的编译器可能会引入不同的优化策略、错误修复和安全补丁,这可能导致生成的汇编代码在性能、安全性和兼容性方面存在差异。因此,准确识别编译器版本对于确保软件的质量和安全性具有重要意义。
为了构建有效的机器学习模型,我们首先需要从汇编代码中提取能够反映编译器版本差异的特征。经过深入分析,我们选择了以下关键特征:
操作码频率:不同版本的编译器可能会选择不同的指令序列来实现相同的功能,因此操作码的频率可以作为一个有效的特征。
寄存器使用率:编译器在优化代码时,可能会根据寄存器的可用性和使用效率来分配寄存器。因此,寄存器使用率也可以反映编译器版本的差异。
Bigram数量:Bigram是指相邻的两个操作码或寄存器的组合。通过分析Bigram的数量和分布,我们可以捕捉到编译器在生成代码时的某些模式或偏好。
基于提取的特征,我们构建了Gini决策树模型进行编译器版本的判别。Gini指数是一种衡量数据不纯度的指标,通过递归地选择最优分裂特征和分裂点,我们可以构建一个能够准确识别编译器版本的决策树模型。
虽然Gini决策树模型在一定程度上能够识别编译器版本,但其性能仍存在局限性。为了进一步提升性能,我们引入了XGBoost模型。XGBoost是一种高效的梯度提升算法,通过集成多个弱分类器来构建一个强分类器,具有出色的性能和稳定性。
此外,我们还讨论了以下优化模型的方法:
增加数据集多样性:通过收集更多不同版本编译器的汇编代码样本,我们可以提高模型的泛化能力和准确性。
引入自动特征提取:利用深度学习等技术自动提取汇编代码中的特征,可以减少人工特征工程的复杂性,并可能发现更多潜在的有用特征。
结合静态和动态特征:除了分析汇编代码的静态特征外,我们还可以考虑结合程序的动态执行信息(如执行时间、内存使用情况等)来构建更全面的模型。
编译器版本识别在现实中具有广泛的应用价值。例如,它可以帮助检测和预防编译器相关的安全漏洞,确保软件的安全性;同时,它还可以用于评估和优化编译器的性能,提高软件的运行效率。此外,编译器版本识别还可以为软件逆向工程、恶意软件分析等领域提供有力支持。
本文提出了一种基于机器学习的编译器版本识别解决方案,通过提取汇编代码中的关键特征并构建Gini决策树和XGBoost模型进行判别。我们还讨论了多种优化模型的方法,并指出了编译器版本识别在现实应用中的重要价值。未来,我们将继续深入研究这一问题,探索更多有效的特征提取方法和模型优化策略,以提高编译器版本识别的准确性和效率。
模型假设:
1. 假设不同版本编译器对于实现同一功能,偏向于使用某些特定的操作码与寄存器。因为随着硬件的进步,指令更新,编译器将采用新的指令以实现更快的功能。
2. 假设采用Windows 下的 mingw64 进行编译源代码。因为附件 1 中的源代码含有easyx 图形库,导致gcc 无法在Linux 系统下编译代码。所以我们考虑到既要能够编译,也要使用与gcc相关的编译器,故使用mingw64。
3. 假设不提取汇编文件“.ident”的相关特征。无论是gcc还是mingw64采用默认编译出来的汇编文件,都含有“.ident”这一项,该项会直接注明汇编文件是由哪个版本的编译器生成的。我们考虑到实际应用中需要判别的是二进制文件,通过二进制文件反编译成汇编文件会失去’.ident’ 这个特征。
问题分析:
问题一分析
问题一要求我们提取出不同版本GCC编译附件1结果中的主要特征,以用于构建判别函数。为此,我们首先利用VsCode的文本比较工具,了解各个汇编文件的差异,之后编写程序实现对多个版本编译的汇编文件进行特征提取。我们将考虑提取操作码和寄存器的频率、Bigram(连续两个指令组合)的数量、代码块数量等特征,这些特征能更全面地反映不同版本编译器的行为差异。通过对这些特征的分析,我们为后续的问题二提供了坚实的数据基础。
问题二分析
在问题一的基础上,我们需要利用提取的特征数据构建判别函数。这是一个典型的多分类问题,特征数据将作为输入变量,不同的GCC版本作为标签类别。我们将使用机器学习算法,如Gini决策树、随机森林等,来构建判别模型。通过这些算法,我们能够实现不同版本GCC编译结果的有效分类和识别,并为后续的问题三提供强大的模型支持。
问题三分析
问题三要求利用构建的判别器对不同版本GCC编译附件2的结果进行版本预测。在这个阶段,我们将模型应用于未见过的源代码2生成的汇编文件数据上,以验证其普适性和准确性。考虑到题目要求根据源代码1或2都能构建GCC版本判别函数,我们认为数据规模过小,难以构建具有泛化性的判别函数,所以选择增加数据集规模,以求构建具有高泛化性的判别函数。
问题四分析
为了进一步提升判别函数的性能,我们提出了以下改进建议:首先,可以尝试引入深度学习模型,进行自动特征提取,再基于如Transformer的注意力机制模型,以捕捉更复杂的特征关系;其次,增加数据集的多样性,涵盖不同类型、不同规模的源代码,并通过不同的编译优化级别生成更多样的训练数据;最后,通过结合静态和动态特征,使模型能够从多个维度进行学习和预测,从而提高模型的泛化能力和预测准确率。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
程序代码:
import os
import redef process_assembly_file(input_file, output_file):# 读取原始汇编文件with open(input_file, 'r', encoding='utf-8') as file:lines = file.readlines()# 创建一个新的列表来存储修改后的内容processed_lines = []# 遍历原文件的每一行for line in lines:# 将逗号替换为空格line = line.replace(',', ' ')# 去除每行的前后空格stripped_line = line.strip()# 跳过以 . 开头或以 : 结尾的行if stripped_line.startswith('.') or stripped_line.endswith(':'):continue# 按空格分割行内的内容,得到每个单词words = re.split(r'\s+', stripped_line)# 处理每个单词processed_words = []for word in words:# 查找是否有括号,并替换为括号内的内容match = re.search(r'\((%[a-zA-Z0-9]+)\)', word)if match:word = match.group(1)# 处理以 $ 开头的单词if word.startswith('$'):if re.match(r'\$\d+', word): # 如果 $ 后跟数字word = '$0'elif re.match(r'\$-', word): # 如果 $ 后跟负号word = '$0'elif word.startswith('$.'): # 如果 $ 后跟 .word = '$.'elif word.startswith('$g'): # 如果 $ 后跟 gword = '$g'processed_words.append(word)# 将处理后的单词重新组合成一行processed_line = ' '.join(processed_words)processed_lines.append(processed_line + '\n') # 保持行的格式# 写入新的汇编文件with open(output_file, 'w', encoding='utf-8') as file:file.writelines(processed_lines)def process_all_files(input_folder, output_folder):# 如果输出文件夹不存在,则创建if not os.path.exists(output_folder):os.makedirs(output_folder)# 遍历输入文件夹中的所有文件for filename in os.listdir(input_folder):# 构造完整的文件路径input_file = os.path.join(input_folder, filename)output_file = os.path.join(output_folder, filename)# 处理每个文件process_assembly_file(input_file, output_file)input_folders = ['8.4.0', '10.2.0', '11.3.0', '12.2.0', '13.2.0']
output_folders = [f"{folder}_processed" for folder in input_folders]print(output_folders)# 处理所有文件
for input_folder, output_folder in zip(input_folders, output_folders):process_all_files(input_folder, output_folder)print("所有文件处理完毕。")
import csv
import os
from collections import Counterfile_count = 0 # 初始化文件计数器def process_folder(folder_name):data = []global file_countfile_count += 1 # 每处理一个文件夹,计数器加一for filename in os.listdir(folder_name):print(f"Processing {filename}...")if 'test' not in filename:print(f"Skipping {filename}...")continuefile_path = os.path.join(folder_name, filename)with open(file_path, 'r') as file:word_counter = Counter()bigram_counter = Counter()first_word_list = []for line in file:words = line.strip().split()if not words:continuefirst_word_list.append(words[0])word_counter.update(words)bigram_counter.update(zip(words[:-1], words[1:]))# 计算四元组(四个连续单词)的频率quadgram_counter = Counter(zip(first_word_list[:-3], first_word_list[1:-2],first_word_list[2:-1], first_word_list[3:]))# 筛选频率大于10的特征word_features = {word: countfor word, count in word_counter.items() if count > 10}bigram_features = {" ".join(bigram): countfor bigram, count in bigram_counter.items() if count > 10}quadgram_features = {" ".join(quadgram): countfor quadgram, count in quadgram_counter.items() if count > 10}# 构建一行数据features = {**word_features,**bigram_features,**quadgram_features}features['label'] = file_count # 标签为当前文件的编号data.append(features)return datadef save_to_csv(data, output_file):keys = set()for row in data:keys.update(row.keys())keys = sorted(keys) # 按字母排序,确保一致性with open(output_file, 'w', newline='') as csvfile:writer = csv.DictWriter(csvfile, fieldnames=keys)writer.writeheader()for row in data:writer.writerow(row)# 定义已处理的文件夹列表
processed_folders = ['8.4.0_processed', '10.2.0_processed', '11.3.0_processed','12.2.0_processed', '13.2.0_processed'
]# 初始化用于保存所有文件夹数据的列表
all_data = []# 遍历每个文件夹并处理数据
for folder in processed_folders:folder_data = process_folder(folder)all_data.extend(folder_data)# 保存合并后的数据到CSV文件
save_to_csv(all_data, 'no_our_data.csv')
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
相关文章:
2024年深圳杯数学建模C题编译器版本的识别问题解题全过程文档及程序
2024年深圳杯数学建模 C题 编译器版本的识别问题 原题再现: 作为一种重要的工具,电子计算机自诞生以来,经历了极为快速的发展。区区百年的时间内,无论从体积、能耗、计算速度,还是应用能力等方面,电子计算…...
介绍一下希尔排序法(c基础)
hi , I am 36 适合对象c语言初学者 希尔排序(Shell Sort)是一种改进的插入排序算法,它通过将原始数据分成多个子序列来改善插入排序在处理大规模无序数组时性能较差的情况。 基本原理 希尔排序的基本思想是先将整个待排序的记录序列分割成为…...
SQL,根据数据的时间跨度进行不同粒度的统计
MSSQL 的某个视图会生成时间跨度不同的数据,当时间跨度小于 30 天时: idbranchIdtotalPricecreatedAt8512718.662022-07-03 08:49:27.7272613832.692022-07-06 09:08:06.8808919569.852022-07-07 04:13:09.2308011523.622022-07-07 04:38:29.3131512500…...
OPenCV 图片局部放大
m_image cv::imread("C:/Code/JPG/1.jpg");if (m_image.empty()) return;cv::imshow("原始图像", m_image); // TODO: 在此添加控件通知处理程序代码int width m_image.cols;int height m_image.rows;// 确定要放大的区域(这里是图像中心部分…...
【C#设计模式(19)——备忘录模式(MementoPattern)】
前言 备忘录模式:将想要备份的信息交给备忘录对象来管理。通过设置初始、备份、修改、恢复等状态展示备忘录模式的使用。 代码 //备忘录类 public class Memento {private string state;public string State { get>state;}public Memento(string state){this.st…...
使用 Nginx 在同一端口部署两个前端项目并配置子路径
在现代 Web 开发中,我们经常需要在同一台服务器上部署多个前端项目。这不仅可以节省资源,还可以简化管理。本文将指导你如何使用Nginx在同一端口上部署两个前端项目,并通过配置子路径来区分它们。 环境准备 首先,我们需要准备两…...
CISC和RISC的区别
CISC是什么 CISC是一种指令集设计方式,全程叫复杂指令集,这种指令设计模式包含大量的复杂指令和复杂的寻址方式, 以下是CISC架构的一些主要特点: 丰富的指令集:CISC处理器通常包含大量的指令,这些指令覆盖…...
学生信息管理系统(简化版)后端接口
目录 allAPI __init__.py是空文件,目的让python知道这个文件夹是个包 ClassInfo.py from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from API.database import get_db, Base from sqlalchemy import Column, String,…...
一、开启 GD32 单片机的学习之门
文章目录 一、开启GD32单片机的学习之门二、筑牢根基:GD32单片机基础知识全解析(一)单片机概述 三、开发环境搭建(一)软件下载与安装(二)安装GD32F450设备支持包(三)编译…...
计算生成报价单小程序系统开发方案
计算生成报价单小程序报价系统,是根据商品品牌、类型、型号、规格、芯数、特性、颜色、分类进行选择不同的参数进行生成报价单,要求报价单支持生成图片、pdf、excel表格。 计算生成报价单小程序系统的主要功能模块有: 1、在线生成报价单&…...
高效整合聚水潭库存数据至MySQL的实现
聚水潭数据集成到MySQL:商品库存查询案例分享 在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,将聚水潭的商品库存数据高效、可靠地集成到MySQL数据库中。具体方案为“聚水潭-商品库存查询-->BI彩度-商品库存表”࿰…...
深入理解 JVM 的栈帧结构
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
爬虫基础之HTTP基本原理
URL和URI 我们先了解一下 URI和 URL。URI的全称为 Uniform Resource ldentifer,即统一资源标志符;URL的全称为 Universal Resource Locator,即统一资源定位符。它们是什么意思呢?举例来说,https:/github.com/favicon.ico 既是一个 URI,也是…...
PyQt5:一个逗号引发的闪退血案
【日常小计】 在开发PyQt5程序时,调用了一个写入excel表格的后端方法,但是每次打开页面点击对应的动作,窗口就会闪退,而且Python后台也没有提示出任何的异常堆栈,后来经过在后端一点一点的单点测试,终于发…...
python学opencv|读取图像(五)读取灰度图像像素
【1】引言 前序学习了图像的基本读取,掌握了imread()、imshow()和imwrite()函数的基本功能和使用技巧,参考文章链接为: python学opencv|读取图像-CSDN博客 然后陆续掌握了彩色图像保存、图像放大和缩小以及对imshow()函数的大胆尝试技巧&a…...
LiDAR点云 反射强度 常见物体反射强度
1.激光点云发射的点无法全部被反射回来的原因 激光点云发射的点无法全部被反射回来的原因主要包括以下几点: 目标物表面特性:某些物体表面具有高反射率,导致激光雷达接收到的反射能量过强,从而产生噪点,影响点云数据的…...
零基础微信小程序开发——WXML 模板语法之事件绑定(保姆级教程+超详细)
🎥 作者简介: CSDN\阿里云\腾讯云\华为云开发社区优质创作者,专注分享大数据、Python、数据库、人工智能等领域的优质内容 🌸个人主页: 长风清留杨的博客 🍃形式准则: 无论成就大小,…...
qt QNetworkAccessManager详解
1、概述 QNetworkAccessManager是QtNetwork模块中的一个核心类,它允许应用程序发送网络请求并接收响应。该类是网络通信的基石,提供了一种方便的方式来处理常见的网络协议,如HTTP、HTTPS等。QNetworkAccessManager对象持有其发送的请求的通用…...
在2023idea中如何创建SpringBoot
目录 一.下载和安装 Maven 1.前往 https://maven.apache.org/download.cgi 下载最新版的 Maven 程序 2.将文件解压到D:Program FilesApachemaven目录 3.新建环境变量MAVEN_HOME,赋值D:Program FilesApachemaven 4.编辑环境变量Path,追加%MAVEN_HOME…...
R语言医学数据分析实践-R语言的数据结构
【图书推荐】《R语言医学数据分析实践》-CSDN博客 《R语言医学数据分析实践 李丹 宋立桓 蔡伟祺 清华大学出版社9787302673484》【摘要 书评 试读】- 京东图书 (jd.com) R语言编程_夏天又到了的博客-CSDN博客 在R语言中,数据结构是非常关键的部分,它提…...
PID算法
PID算法是闭环控制中的核心算法之一,它结合了比例(P)、积分(I)和微分(D)三种控制策略,能够实现对被控对象的精确控制。以下将详细介绍PID算法,并针对P、I、D分别举出三个…...
C++day2
1.利用函数重载,实现对整形数组的冒泡排序,对浮点型数组的冒泡排序 #include <iostream>using namespace std;int bubblesort(int a[]) {int i,j,temp;for(i1;i<5;i){for(j0;j<5-i;j){if(a[j]>a[j1]){temp a[j];a[j] a[j1];a[j1] tem…...
RFdiffusion ContigMap类初始化方法解读
功能概述 __init__ 方法是 ContigMap 类的初始化函数,其核心任务是构建和管理一个蛋白质序列和结构的映射系统,处理用户提供的输入数据(如片段信息、参考序列、掩码等),并生成内部所需的各种索引和映射,以便在蛋白质设计中有效地定义、解析和操作不同区域的结构和序列。…...
LeetCode 每日一题 2024/12/2-2024/12/8
记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录 12/2 52. N 皇后 II12/3 3274. 检查棋盘方格颜色是否相同12/4 2056. 棋盘上有效移动组合的数目12/5 3001. 捕获黑皇后需要的最少移动次数12/6 999. 可以被一步捕获的棋子数…...
5G模组AT命令脚本-关闭模组的IP过滤功能
关闭模组的IP过滤功能 关闭模组的IP过滤功能 5G 模组通常使用nat方式为 下挂设备或上位机提供上网服务,默认情况,不做NAt的包无法经由 模组转发,如果禁掉这个限制 ,可使用本文中的配置命令本脚本用于关闭模组的IP过滤功能…...
得力DL-720C(new)标签热敏打印机
特点 适配标签宽度20-90mm的热敏标签纸,无需碳带。不适用于使用碳带上色的热转印纸(如铜版纸)。标签纸类型支持: 间隙纸(靠间隙定位)。得力自配的纸就是间隙纸,不透明。黑标纸(靠背…...
openjdk17 jvm加载class文件,解析字段和方法,C++源码展示
##构造方法ClassFileParser,parse_stream解析文件流 ClassFileParser::ClassFileParser(ClassFileStream* stream,Symbol* name,ClassLoaderData* loader_data,const ClassLoadInfo* cl_info,Publicity pub_level,TRAPS) :_stream(stream),_class_name(NULL),_load…...
基于 AutoFlow 快速搭建基于 TiDB 向量搜索的本地知识库问答机器人
导读 本文将详细介绍如何通过 PingCAP 开源项目 AutoFlow 实现快速搭建基于 TiDB 的本地知识库问答机器人。如果提前准备好 Docker、TiDB 环境,整个搭建过程估计在 10 分钟左右即可完成,无须开发任何代码。 文中使用一篇 TiDB 文档作为本地数据源作为示…...
Vue项目实战-新能源汽车可视化(二)(持续更新中)
一.项目代码 1.DataSceen <template><div id"app-content"><div class"containerBox"><!-- 左边区域 --><div classleft><!-- 车辆情况 --><div class"item"></div><!-- 历史数据 -->&…...
CSS border 0.5px 虚线
border 0.5px 存在很多兼容问题,很多设备都会默认展示 1px 如果是实线可以用 background 和 height 1px 然后transform scaleY(0.5) 去实现。 但是虚线怎么办呢。 .ticket-line::before {content: ;position: absolute;top: 0;left: 0;right: 0;bottom: 0;width: …...
利用最大流算法解决Adam教授的双路径问题
利用最大流算法解决Adam教授的双路径问题 Adam教授的烦恼问题描述与转换转换步骤伪代码C代码示例解释Adam教授的烦恼 Adam教授有两个儿子,可不幸的是,他们互相讨厌对方。随着时间的推移,问题变得如此严重,他们之间不仅不愿意一起走到学校,而且每个人都拒绝走另一个人当天…...
c#如何开发后端
1选择开发框架 在 C# 中,用于后端开发最常用的框架是ASP.NET。它提供了构建 Web 应用程序、Web API 和微服务等多种后端服务所需的功能。ASP.NET有不同的模式,如ASP.NET MVC(Model - View - Controller)和ASP.NET Web API。ASP.NE…...
05_掌握Python3.11新特性-模式匹配
学习完本篇内容,你将掌握以下技能: 了解 Python 3.11 中的模式匹配新特性掌握如何使用模式匹配来简化代码和提高代码的可读性熟练掌握并应用到实际编程中python3.11新特性-模式匹配 在 Python 3.11 中,引入了模式匹配(pattern match...
【AI日记】24.12.09 kaggle 比赛 Titanic-12
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 内容: 学习 kaggle 入门比赛 Titanic - Machine Learning from Disaster学习机器学习(pandas,numpy,sklearn),数据可视化ÿ…...
Linux,如何要定位并删除占用磁盘空间的大文件?
Linux,如何要定位并删除占用磁盘空间的大文件? 要定位并删除占用磁盘空间的大文件主要有以下这些步骤: 1. 使用 du 命令查找大文件或目录 du(Disk Usage)命令可以帮助你查找占用空间较大的文件或目录。 du -ah --…...
【Java】—— 图书管理系统
基于往期学习的类和对象、继承、多态、抽象类和接口来完成一个控制台版本的 “图书管理系统” 在控制台界面中实现用户与程序交互 任务目标: 1、系统中能够表示多本图书的信息 2、提供两种用户(普通用户,管理员) 3、普通用户…...
初识Linux · 线程同步
目录 前言: 认识条件变量 认识接口 快速使用接口 生产消费模型 前言: 前文我们介绍了线程互斥,线程互斥是为了防止多个线程对临界资源访问的时候出现了对一个变量同时操作的情况,对于线程互斥来说,我们使用到了锁…...
游戏引擎学习第40天
仓库 : https://gitee.com/mrxiao_com/2d_game 整理了一些需要完成的任务,确保所有内容都已清理完成,因为需要为后续的数学部分打好基础。下一步将认真开始处理数学相关内容,因此在此之前,需要彻底梳理未完成的事项,清…...
概率论——假设检验
解题步骤: 1、提出假设H0和H1 2、定类型,摆公式 3、计算统计量和拒绝域 4、定论、总结 Z检验 条件: 对μ进行检验,并且总体方差已知道 例题: 1、假设H0为可以认为是570N,H1为不可以认为是570N 2、Z…...
【Pandas】pandas isnull
Pandas2.2 General Top-level missing data 方法描述isna(obj)用于检测数据中的缺失值isnull(obj)用于检测数据中的缺失值notna(obj)用于检测数据中的非缺失值notnull(obj)用于检测数据中的非缺失值 pandas.isnull() pandas.isnull() 是 Pandas 库中的一个函数,…...
Rust HashMap使用
Rust 的 HashMap 是一个功能强大的数据结构,它结合了哈希表的高效性和 Rust 编程语言的内存安全特性。通过提供常数时间复杂度的查找、插入和删除操作,以及丰富的 API,它在许多实际应用中都非常有用。 示例代码: use std::colle…...
Spring Boot如何实现防盗链
一、什么是盗链 盗链是个什么操作,看一下百度给出的解释:盗链是指服务提供商自己不提供服务的内容,通过技术手段绕过其它有利益的最终用户界面(如广告),直接在自己的网站上向最终用户提供其它服务提供商的…...
TIM输入捕获---STM
一、简介 IC输入捕获 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存在CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数 每个高级定时器和通用定时器都拥有4个输入捕获通道 可配置为PWMI模…...
核密度估计——从直方图到核密度(核函数)估计_带宽选择
参考 核密度估计(KDE)原理及实现-CSDN博客 机器学习算法(二十一):核密度估计 Kernel Density Estimation(KDE)_算法_意念回复-GitCode 开源社区 引言 在统计学中,概率密度估计是一种重要的方法࿰…...
javaScript Tips
一键去掉鼠标的图标 document.body.style.cursor none; 获取一个随机颜色 const randomHex () >#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, 0)}; 生成随机字符串,各种随机基本都是这个原理 const randomString () > Math.rand…...
【Ubuntu】清理、压缩VirtualBox磁盘空间大小
1、说明 本人为虚拟机创建了两个硬盘:root.vdi 和 hoom.vdi,在创建虚拟机时,分别挂载在/root目录和/home目录下。 下面演示分别清理、压缩两个磁盘的空间。 2、清理空间 1)清理 root.vid sudo dd if=/dev/zero of=/EMPTY bs=1M;sudo rm -f /EMPTY输出信息中会提示,如…...
若依 ruoyi VUE el-select 直接获取 选择option 的 label和value
1、最新在研究若依这个项目,我使用的是前后端分离的方案,RuoYi-Vue-fast(后端) RuoYi-Vue-->ruoyi-ui(前端)。RuoYi-Vue-fast是单应用版本没有区分那么多的modules 自己开发起来很方便,这个项目运行起来很方便,但是需要自定义的…...
C++小小复习一下
类,对象,成员变量,成员函数 特点:面向对象程序设计---因为要创建对象来调用类里面的函数或者成员变量 比如你的对象是一个生物-人:他会有自己的一些属性:身高,体重,性别等…...
JavaWeb学习(4)(四大域、HttpSession原理(面试)、SessionAPI、Session实现验证码功能)
目录 一、web四大域。 (1)基本介绍。 (2)RequestScope。(请求域) (3)SessionScope。(会话域) (4)ApplicationScope。(应用域) (5)PageScope。(页面域) 二、Ht…...
quartz 架构详解
Quartz是一个开源的作业调度框架,完全由Java编写,主要用于定时任务的调度和管理。Quartz的架构主要包括以下几个核心组件: 1.调度器(Scheduler):调度器是Quartz的核心组件,负责管理Qua…...