【24华为杯数模研赛赛题思路已出】国赛B题思路丨附参考代码丨免费分享

2024年华为杯研赛B题解题思路

B题 WLAN组网中网络吞吐量建模

问题1

请根据附件WLAN网络实测训练集中所提供的网络拓扑、业务流量、门限、节点间RSSI的测试基本信息,分析其中各参数对AP发送机会的影响,并给出影响性强弱的顺序。通过训练的模型,预测每个AP的发送机会,即发送数据帧序列的总时长(seq_time),并通过测试集 test_set_1_2ap和test_set_1_3ap(仅提供模型输入信息)预测AP发送数据帧序列的总时长。可按照同频AP个数分类分析和分别建模,也可统一分析和建模。

除了发送机会外,WLAN网络吞吐量还取决于发送时所选用的PHY Rate以及数据帧的比特数。AP给不同STA发送数据所选用的(MCS, NSS),即PHY Rate,受传输方式和干扰情况影响。以两个AP传输一段时间为例,有以下三种情形:

a)仅有同步传输时,两个AP交替抢到信道,偶然同时发送。因此,STA接收数据时的干扰主要来自环境底噪,因而SINR高,AP选用的(MCS, NSS)较高,PHY Rate高。

b)当两个AP总是不互听时,STA接收数据时可能受到较小的邻区干扰和环境底噪。分析时,假设环境底噪可忽略,则STA的SINR为关联AP到该STA的RSSI与邻区AP到该STA的RSSI之差。以图3.1中AP1与AP2为例,AP1发送数据给STA1-2,AP2发送数据给STA2-1,那么STA1-2在接收来自AP1的信号时,受到来自AP2的干扰,其SINR为AP1到STA1-2的RSSI与AP2到STA1-2的RSSI之差,STA2-1同理。AP发送数据选用的(MCS, NSS)与SINR相关。

c)当两个AP的RSSI处于[PD, ED]或[NAV, PD]时,传输中出现由于错过Preamble而导致的异步传输,与同步传输混合。那么在同步传输阶段,STA接收数据时受到的干扰只有环境底噪,在异步传输阶段,干扰来自邻区AP和环境底噪。

可见,AP的AMC所选用的(MCS, NSS)不仅与SINR相关,同时也与AP的传输方式相关。

1.1题目分析

问题 1:分析并预测AP发送机会(发送时长)

分析:

本题要求根据实测数据中的网络拓扑、业务流量、节点间的RSSI信息等,分析哪些因素对AP发送机会的影响,并通过训练模型预测AP发送数据的帧序列总时长(seq_time)。这里的“发送机会”可以通过AP发送数据时长来表征。由于WLAN中AP竞争信道资源,随机回退机制和信道条件(RSSI、CCA门限)对AP的发送机会影响很大。

初步思路:

  1. 数据预处理:提取影响发送机会的关键参数,如RSSI、信道门限、流量类型等。需要处理并清洗数据,尤其是RSSI信息。
  2. 特征分析:利用相关分析或统计方法,分析不同特征(RSSI、业务流量、信道门限等)对发送时长的影响,得出特征的重要性排序。
  3. 模型构建:可以选择机器学习算法(如随机森林、XGBoost)进行建模,训练模型预测AP的发送时长。由于AP数量不同,可能需要对同频AP数量进行分类建模。
  4. 模型验证:通过测试集对模型进行验证,评估预测精度。

1.2解题思路

1. 问题分析与特征选择

我们要根据WLAN的实际测量数据,分析影响AP发送机会的因素,并建立模型来预测AP的发送时长。首先,从数据集可以获得的主要特征包括:

  • RSSI (Received Signal Strength Indication):表示接收信号强度,是影响信道质量的重要因素。
  • 协议类型 (TCP/UDP):不同的协议可能影响数据包的发送时机和丢包率。
  • 包长度 (Packet Length):数据包的大小可能影响传输时长。
  • 竞争窗口 (Contention Window):AP竞争信道的时间与AP的发送机会直接相关。
  • NAV(Network Allocator Vector)门限:表示静默时长,可能对AP的信道使用机会产生影响。
  • 干扰情况 (Interference):AP之间的相互干扰影响各自的发送机会。

2. 发送机会的数学描述

AP的发送时长可以通过多个因素的函数来描述。假设AP的发送时长与信道空闲时间、AP间的干扰、竞争窗口、RSSI等因素相关,我们可以将AP发送时长建模为这些变量的函数。

令:

3. 竞争窗口的建模

AP 发送数据之前,需要通过竞争窗口机制进行信道争夺。竞争窗口的大小 CWi 是由AP 的竞争机制决定的,若碰撞发生,则CWi 逐渐增大。

竞争窗口可以描述为:

其中, k 是连续碰撞的次数, CWmin为竞争窗口的最小值。

AP 发送机会与竞争窗口大小成反比:

即,竞争窗口越大,发送机会越小。

4. 干扰的建模

AP 之间的干扰直接影响发送成功率。

假设AP 之间的干扰强度由AP i 和 AP j 的RSSI 之差决定。

干扰强度可以表示为:

当干扰强度较大时,AP 的发送时长将减少,因此:

5. 信道竞争时间的建模

信道竞争时间 Ti 是AP 为争夺信道所用的时间。这个时间由信道的空闲状态决定。当信道空闲时,AP 可以直接发送数据帧。

信道空闲的概率可以通过Poisson 分布建模:

其中,λ是信道繁忙的到达率, t 是时间。

信道空闲时间与AP 发送时长正相关:

6. 模型的构建

综合上述因素,AP i 的发送时长模型可以写为:

其中,α是一个待定系数,结合实际数据进行回归分析确定。

7. 数据处理与建模步骤

数据预处理

    • 处理缺失值,去除异常值。
    • 对连续型变量进行标准化处理(如RSSI、竞争窗口、干扰强度等)。
    • 对分类变量(如协议类型、包长度)进行one-hot编码。

特征选择

    • 使用相关性分析或特征重要性评估,确定对发送时长影响较大的特征。

模型训练

    • 使用多元线性回归、随机森林、XGBoost等机器学习算法对发送时长进行建模。
    • 使用训练数据集进行模型训练,调整参数使得模型预测效果最佳。

模型验证

    • 使用测试集对模型进行验证,评估模型的预测效果,常用指标包括均方误差 (MSE)、R平方等。

结果分析

    • 通过模型得到AP的发送机会(即发送时长),并通过特征重要性分析,得出影响发送时长的主要因素。

8. 模型评估方法

使用累积分布函数 (CDF) 来评估模型精度。计算预测误差,并绘制误差的CDF曲线,取误差为90%时的值作为模型的误差评估值。

1.3参考代码

# 导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler# 读取数据(替换为你的文件路径)
data = pd.read_csv('/mnt/data/training_set_2ap_loc0_nav82.csv')# 展示数据基本信息
print(data.info())
print(data.head())# 选择相关的特征,去掉不必要的列
features = ['test_dur', 'pkt_len', 'pd', 'ed', 'nav', 'ap_from_ap_x_sum_ant_rssi', 'sta_from_ap_x_sum_ant_rssi', 'num_ampdu', 'mcs', 'nss', 'per']
target = 'seq_time'# 去除空值
data = data[features + [target]].dropna()# 进行特征标准化
scaler = StandardScaler()
X = data[features]
y = data[target]
X_scaled = scaler.fit_transform(X)# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)# 使用随机森林模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)# 预测
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)# 模型评估
train_mse = mean_squared_error(y_train, y_pred_train)
test_mse = mean_squared_error(y_test, y_pred_test)
train_r2 = r2_score(y_train, y_pred_train)
test_r2 = r2_score(y_test, y_pred_test)print(f"训练集均方误差: {train_mse:.4f}, R2: {train_r2:.4f}")
print(f"测试集均方误差: {test_mse:.4f}, R2: {test_r2:.4f}")# 可视化真实值与预测值的对比
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred_test, alpha=0.6, color='b')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=3)
plt.xlabel('真实发送时长')
plt.ylabel('预测发送时长')
plt.title('真实值与预测值对比')
plt.grid(True)
plt.show()# 特征重要性
importances = model.feature_importances_
indices = np.argsort(importances)[::-1]
feature_names = np.array(features)# 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x=importances[indices], y=feature_names[indices], palette="coolwarm")
plt.title('特征重要性')
plt.xlabel('重要性得分')
plt.ylabel('特征')
plt.grid(True)
plt.show()# 信道空闲时间分析 (假设到达率 lambda)
lambda_rate = 0.5
t = np.linspace(0, 10, 100)
P_idle = np.exp(-lambda_rate * t)# 可视化信道空闲概率
plt.figure(figsize=(8, 5))
plt.plot(t, P_idle, 'b-', label=f'Poisson分布 $\lambda={lambda_rate}$')
plt.fill_between(t, P_idle, alpha=0.3, color='blue')
plt.xlabel('时间')
plt.ylabel('空闲概率')
plt.title('信道空闲概率')
plt.grid(True)
plt.legend()
plt.show()

问题2

请根据附件提供的实测训练集中的测试基本信息,特别是节点间RSSI信息和门限信息,结合问题1中对AP发送机会的分析,对测试中AP发送数据选用最多次数的(MCS, NSS)进行建模,并通过测试集 test_set_2_2ap和test_set_2_3ap(仅提供模型输入信息)预测(MCS, NSS)。(AP在AMC算法下自适应调节发送速率,过程中可能采用多个(MCS, NSS),AMC算法收敛速度快,故其中选用最多次数的(MCS, NSS)反映了SINR水平)。

2.1题目分析

问题 2:预测发送速率使用最多的PHY Rate (MCS NSS)

分析:

本题要求根据节点间的RSSI、信道信息和发送机会分析,预测AP在传输数据时选择的PHY速率(MCS NSS)。WLAN采用自适应调制编码(AMC)算法,根据SINR动态调整PHY速率,影响发送速率的主要因素是RSSI和干扰情况。

初步思路:

  1. 特征提取:重点关注RSSI、信道条件、AP之间的干扰等影响SINR的参数。基于问题1中的发送时长结果,进一步挖掘影响PHY速率的特征。
  2. 模型选择:利用机器学习或回归模型,基于RSSI和干扰情况,预测AP选择的(MCS NSS)。

结果分析:通过对测试集进行预测,验证模型的准确性,评估模型对不同AP之间干扰的适应性。

2.2解题思路

1. 问题分析与特征选择

PHY速率的选择与多个因素相关,尤其是RSSI(接收信号强度)、信道门限、干扰强度等。在WLAN环境中,AP的PHY速率取决于信道质量和干扰条件。因此,主要特征包括:

  • RSSI:接收信号强度指示,是一个关键因素。较高的RSSI通常意味着可以使用更高的PHY速率。
  • 信道门限:包括包检测门限(PD)、能量检测门限(ED)和NAV门限,这些门限会影响信道的可用性和干扰情况。
  • 干扰强度:表示AP之间的相互干扰。较高的干扰会降低AP的PHY速率。

2. 调制编码方案 MCS 与 SINR 关系建模

PHY速率受信干噪比(SINR, Signal to Interference plus Noise Ratio)的影响,SINR反映了信号与干扰加噪声的比率。PHY速率通常随着SINR的增加而提升。

3. PHY速率的建模

PHY速率由MCS(调制和编码方案)和NSS(空间流数量)共同决定。我们需要分别建立MCS和NSS的预测模型,基于RSSI、SINR、干扰等特征预测它们的值。

MCS选择模型

  • MCS反映了调制方案和编码率,决定了PHY速率的精细程度。可以将MCS建模为RSSI和SINR的函数:
  • 假设MCS随SINR线性增长,MCS阶数与SINR成正比:

其中, k 和 b 是待定的回归系数。

此公式表明,随着SINR 的增加,AP 可以选择更高的MCS 阶数。

NSS 选择模型

NSS表示空间流的数量。NSS的选择受RSSI和干扰情况影响。

NSS与RSSI和干扰强度的非线性关系可以用Sigmoid函数建模:

这个公式表明,当RSSI较高且干扰较小时,AP可以使用更多的空间流。

4. 信道干扰与PHY 速率的关系

AP 之间的干扰会直接影响PHY 速率。

假设AP 之间的干扰强度与RSSI 的差值成正比:

5. PHY 速率的整体建模

综合以上分析,PHY 速率与RSSI、SINR 和干扰强度的关系可以总结为:

6. 模型验证

通过对模型的回归分析,可以验证预测MCS 和NSS 的效果。

利用均方误差(MSE)和R^2 系数对模型进行评估:

2.3参考代码

# 导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler# 读取数据(请替换为你的数据路径)
data = pd.read_csv('/mnt/data/training_set_2ap_loc0_nav82.csv')# 展示数据基本信息
print(data.info())
print(data.head())# 选择相关的特征
features = ['rssi', 'pd', 'ed', 'nav', 'interference', 'protocol']  # 假设数据集中有这些特征
target_mcs = 'mcs'  # MCS作为目标变量
target_nss = 'nss'  # NSS作为目标变量# 去除空值
data = data[features + [target_mcs, target_nss]].dropna()# 进行特征标准化
scaler = StandardScaler()
X = data[features]
y_mcs = data[target_mcs]
y_nss = data[target_nss]
X_scaled = scaler.fit_transform(X)# 分割训练集和测试集
X_train, X_test, y_train_mcs, y_test_mcs = train_test_split(X_scaled, y_mcs, test_size=0.3, random_state=42)
X_train_nss, X_test_nss, y_train_nss, y_test_nss = train_test_split(X_scaled, y_nss, test_size=0.3, random_state=42)# 使用随机森林回归模型预测MCS
model_mcs = RandomForestRegressor(n_estimators=100, random_state=42)
model_mcs.fit(X_train, y_train_mcs)# 预测MCS
y_pred_mcs_train = model_mcs.predict(X_train)
y_pred_mcs_test = model_mcs.predict(X_test)# 使用随机森林回归模型预测NSS
model_nss = RandomForestRegressor(n_estimators=100, random_state=42)
model_nss.fit(X_train_nss, y_train_nss)# 预测NSS
y_pred_nss_train = model_nss.predict(X_train_nss)
y_pred_nss_test = model_nss.predict(X_test_nss)# 评估MCS模型
train_mse_mcs = mean_squared_error(y_train_mcs, y_pred_mcs_train)
test_mse_mcs = mean_squared_error(y_test_mcs, y_pred_mcs_test)
train_r2_mcs = r2_score(y_train_mcs, y_pred_mcs_train)
test_r2_mcs = r2_score(y_test_mcs, y_pred_mcs_test)print(f"MCS模型 - 训练集均方误差: {train_mse_mcs:.4f}, R²: {train_r2_mcs:.4f}")
print(f"MCS模型 - 测试集均方误差: {test_mse_mcs:.4f}, R²: {test_r2_mcs:.4f}")# 评估NSS模型
train_mse_nss = mean_squared_error(y_train_nss, y_pred_nss_train)
test_mse_nss = mean_squared_error(y_test_nss, y_pred_nss_test)
train_r2_nss = r2_score(y_train_nss, y_pred_nss_train)
test_r2_nss = r2_score(y_test_nss, y_pred_nss_test)print(f"NSS模型 - 训练集均方误差: {train_mse_nss:.4f}, R²: {train_r2_nss:.4f}")
print(f"NSS模型 - 测试集均方误差: {test_mse_nss:.4f}, R²: {test_r2_nss:.4f}")# MCS预测可视化
plt.figure(figsize=(10, 6))
plt.scatter(y_test_mcs, y_pred_mcs_test, alpha=0.6, color='g')
plt.plot([y_test_mcs.min(), y_test_mcs.max()], [y_test_mcs.min(), y_test_mcs.max()], 'r--', lw=3)
plt.xlabel('真实MCS值')
plt.ylabel('预测MCS值')
plt.title('MCS真实值与预测值对比')
plt.grid(True)
plt.show()# NSS预测可视化
plt.figure(figsize=(10, 6))
plt.scatter(y_test_nss, y_pred_nss_test, alpha=0.6, color='b')
plt.plot([y_test_nss.min(), y_test_nss.max()], [y_test_nss.min(), y_test_nss.max()], 'r--', lw=3)
plt.xlabel('真实NSS值')
plt.ylabel('预测NSS值')
plt.title('NSS真实值与预测值对比')
plt.grid(True)
plt.show()# 可视化MCS的特征重要性
importances_mcs = model_mcs.feature_importances_
indices_mcs = np.argsort(importances_mcs)[::-1]
feature_names = np.array(features)plt.figure(figsize=(10, 6))
sns.barplot(x=importances_mcs[indices_mcs], y=feature_names[indices_mcs], palette="viridis")
plt.title('MCS特征重要性')
plt.xlabel('重要性得分')
plt.ylabel('特征')
plt.grid(True)
plt.show()# 可视化NSS的特征重要性
importances_nss = model_nss.feature_importances_
indices_nss = np.argsort(importances_nss)[::-1]plt.figure(figsize=(10, 6))
sns.barplot(x=importances_nss[indices_nss], y=feature_names[indices_nss], palette="viridis")
plt.title('NSS特征重要性')
plt.xlabel('重要性得分')
plt.ylabel('特征')
plt.grid(True)
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428854.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在SpringBoot项目中利用Redission实现布隆过滤器(布隆过滤器的应用场景、布隆过滤器误判的情况、与位图相关的操作)

文章目录 1. 布隆过滤器的应用场景2. 在SpringBoot项目利用Redission实现布隆过滤器3. 布隆过滤器误判的情况4. 与位图相关的操作5. 可能遇到的问题(Redission是如何记录布隆过滤器的配置参数的)5.1 问题产生的原因5.2 解决方案5.2.1 方案一:…

夏日遛娃绝佳之地:气膜儿童乐园—轻空间

随着夏季的到来,炎炎烈日让户外活动变得有些艰难。然而,在城市的某个角落,一座气膜儿童乐园却为家长和孩子们提供了一个理想的避暑天堂。这里的恒温控制保持在舒适的27℃,让孩子们在欢乐中享受每一个夏日的阳光,而家长…

由于安全风险,安全领导者考虑禁止人工智能编码

安全团队与开发团队之间的紧张关系 83% 的安全领导者表示,他们的开发人员目前使用人工智能来生成代码,57% 的人表示这已成为一种常见做法。 然而,72% 的人认为他们别无选择,只能允许开发人员使用人工智能来保持竞争力&#xff0…

IDA Pro基本使用

IDA Pro基本使用 1.DllMain的地址是什么? 打开默认在的位置1000D02E就是DllMain地址 按空格键可以看到图形化界面选择options、general勾选对应的选项在图像化也能看到 2.使用Imports 窗口并浏览到 gethostbyname,导入函数定位到什么地址? 这里可以打开Impo…

为人机交互保持预见性丨基于G32A1445的T-BOX应用方案

T-BOX是一种集成了通信、计算和控制功能的车载信息处理终端,通过车辆与云端、移动网络等进行数据交互,用于车、人、外部环境的互联互通,支持车辆定位、车载通信、远程控制、故障诊断、数据传输、紧急呼叫等功能,帮助车辆实现更加智…

OpenCV_最简单的鼠标截取ROI区域

在OpenCV中也存在鼠标的操作,今天我们先介绍一下鼠标中的操作事件 void setMousecallback(const string& winname, MouseCallback onMouse, void* userdata0) setMousecallback参数说明: winname:窗口的名字 onMouse:鼠标响应函数,回调…

计算机毕业设计 社区医疗服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

线性代数书中求解线性方程组的三种方法的实例

目录 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65) 一、克拉默法则(P45) 二、逆矩阵(P46) 三、高斯-约旦消元法(P65)

刷题训练之字符串

> 作者:დ旧言~ > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握字符串算法。 > 毒鸡汤:学习,学习,再学习 ! 学,然后知不足。 > 专栏选自:刷题…

【笔记】1.3 塑性变形

一、塑性变形的方式 DDWs(Dislocation-Dipole Walls,位错偶极墙):指由两个位错构成的结构,它们以一种特定的方式排列在一起,形成一个稳定的结构单元。 DTs(Dislocation Tangles,位错…

allWebPlugin中间件自定义alert、confirm及prompt使用

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

关于 NLP 深度学习的核心流程

基本流程实现的先后顺序(每一步都包含很多技术点): 选定语言模型结构 关于语言模型: 作用 判断那一句话相对更合理,相对不合理的会得到较底的分值: 挑选成句概率分值最高的评价指标:PPL&…

在线查看 Android 系统源代码 Git repositories on android

在线查看 Android 系统源代码 Git repositories on android 1. Git repositories on android1.1. Android Make Build System1.2. Android Open Source Project Code Review References 1. Git repositories on android https://android.googlesource.com/ 1.1. Android Make …

Git rebase 的使用(结合图与案例)

目录 Git rebase 的使用Git rebase 概念Git rebase 原理rebase和merge的选择 Git rebase 的使用 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase Git rebase 概念 **rebase概念:**用来重新应用提交(commits&#xff09…

一文入门生成式AI(理解ChatGPT的原理)

一、什么是生成式AI? 以ChatGPT为代表的生成式AI,是对已有的数据和知识进行向量化的归纳,总结出数据的联合概率。从而在生成内容时,根据用户需求,结合关联字词的概率,生成新的内容。 可以这么联想&#x…

浅析OceanBase数据库的向量化执行引擎

本篇博客是偏数据库系统概念性的内容,不会深入到 OceanBase 中各个算子和表达式的在向量化中的详细设计和实现。 背景 为了提升OceanBase社区版用户解决问题的效率,OceanBase官方不久前推出了《OceanBase 从入门到实践》系列课程。在第七期直播课程后&a…

嵌入式 开发技巧和经验分享

文章目录 前言嵌入式 开发技巧和经验分享目录1.1嵌入式 系统的 定义1.2 嵌入式 操作系统的介绍1.3 嵌入式 开发环境1.4 编译工具链和优化1.5 嵌入式系统软件开发1.6 嵌入式SDK开发2.1选择移植的系统-FreeRtos2.2FreeRtos 移植步骤2.3 系统移植之中断处理2.4系统移植之内存管理2…

【数据结构与算法 | 灵神题单 | 自底向上DFS篇】力扣965, 2331, 100, 1379

1. 力扣965:单值二叉树 1.1 题目: 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1: 输入:[1,1,1,1,1,n…

Jenkins学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程:封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

vue table id一样的列合并

合并场景:如果id一样,则主表列合并,子表列不做合并,可实现单行、多行合并,亲测!!! 展示效果如图示: 组件代码: // table组件 :span-method"objectSpa…