郝夫曼(Huffman)树及其应用

Huffman树(哈夫曼树)、哈夫曼编码、最优前缀码、前缀码 目录 基本概念: 哈夫曼树的构造 哈夫曼树的应用——哈夫曼编码 附:前缀码 基本概念: 需要了解的一些基概念: 路径:结点序列满足是的双亲。 路径长度:路径的分支数。L=k-1 扩充二叉树:在一般二叉树中,将原来的每个空指针都指向一个特殊的结点——外结点,这样的二叉树称为扩充二叉树。 内结点——原来二叉树中的结点。 结点个数S=内结点个数+1 树的内路径长度:从根结点到各个... 阅读详情

1. 基本概念

路径长度:树中一个结点到另一个结点路径上的分支数目。
树的路径长度:从树根到每一结点的路径长度之和。
带权路径长度:结点到树根之间的路径长度与结点上权的乘积。
树的带权路径长度(WPL):树中所有叶子结点的带权路径长度之和。
郝夫曼树(最优二叉树):对于一棵有n个叶子结点的二叉树,带权路径长度最小的二叉树。
这里写图片描述
第一棵树 WPL=7*2+5*2+2*2+4*2=36
第二棵树 WPL=7*3+5*3+2*1+4*2=46
第三棵树 WPL=7*1+5*2+2*3+4*3=35
上述二叉树中,第三棵树带权路径长度最小,可以验证,第三棵树恰为郝夫曼树。

2.郝夫曼树的构造方法

假如现有4个权值,分别为a=7, b=5, c=2, d=4
1. 先把有权值的叶子结点按照权值从小到大排列成一个有序序列。即c, d, b, a。
2. 取头两个最小的权值的结点作为一个新节点N1的两个子节点,其中权值较小的为左孩子,权值较大的为右孩子,新节点的权值为两孩子结点的权值之和,即N1=c+d=2+4=6。
3. 用N1替换c和d,插入有序序列中,保持从小到大排列。
4. 重复步骤2,直到序列中只存在一个结点,该结点即为根结点。

3.郝夫曼编码

例如有一段文字内容“BADCADFEED”,用相应的二进制数据表示:
A:000, B:001,C:010,D:001,E:100,F:101

编码后的数据为“001000011010000011101100100011”,很长的一段码

但是在实际中,有的字母用的频率很高,例如“a”,而有些字母则不常用,例如“x”
假设六个字母的平均使用频率为 A 27%,B 8%,C 15%,D 15%,E 30%,F 5%,可以将其作为权值,构造一颗郝夫曼树,并将左分支改为0,右分支改为1
这里写图片描述
根据每个字母所经过的路径重新编码后,六个字母为 A:01,B:1001,C:101,D:00,E:11,F:1000。我们可以看到,重新编码后,使用频率较高的字母编码长度变小了,而使用频率较低的字母,编码则加长了

原来的文字内容 “BADCADFEED”重新编码为“1001010010101001000111100”,比原来少了5个字符,节约了约17%的传输成本。

二叉树的应用—Huffman编码与译码 哈夫曼树 实验五:二叉树的应用—Huffman编码与译码 实验目的:熟练掌握二叉树的基本操作操作,应用二叉树的结构解决实际问题,熟练掌握Huffman树和Huffman编码的构造方法。 实验内容:设计实现Huffman树的创建算法,并利用Huffman树进行编码和译码。 要求:1.在“Huffman编码“基础上的实现译码操作如输入“10010”译出相应的字符。 2.选做:(1)增加统计原文中各字符权值的功能,(2)将原文进行编码。 代码阅读:表达式树的创建与求值。 //算法5.11 根据赫夫曼树求赫夫曼 阅读详情

相关推荐

【数据结构】5——哈夫曼树(Huffman Tree)

哈夫曼树

qq_43507078的博客 2140

Huffman编码及其实现[Python]

Huffman编码原理简述+实现

Blossomers的博客 2198

最优二叉树—哈夫曼(huffman)树

哈夫曼树又称最优二叉树,是一类带权路径长度最短的二叉树,有着广泛的应用。基本概念权:将树中的结点赋上一个有着某种意义的数值路径:从A结点道B结点所经过的分支序列路径长度:从A结点道B结点所经过的分支数目查找效率平均查找长度(ASL)取决于树的高度ASL=(1+2*2+3)/4=2 ASL=(1+2+3...

一条晒干的咸鱼的博客 4362

Python的Huffman编码文件压缩实现

Python的Huffman编码文件压缩实现 一、背景介绍: Huffman编码是一种无损编码方式,采用Huffman树实现,具体可以见百度百科。 代码参考博客https://blog.youkuaiyun.com/EggWave/article/details/78697965。本篇将Huffman编码文件压缩脱离django框架,独立实现。 二、注意事项: 如果直接将Huffman编码写入文件,一股脑儿...

qq_37645194的博客 2358

Linux系统安装AutoDockTools、AutoGrid和AutoDock并实现分子对接(详细讲解)

linux系统为centos7.0 按照下面操作安装AutoDockTools(MGLTools) 1. 下载安装包,链接(https://ccsb.scripps.edu/mgltools/downloads/),我的linux系统是64位,下载红色标记源代码,拷贝入linux目标文件夹下。 2. shell终端进行安装: 1. 终端进入安装包所在文件夹,并获取root权限;赋予代码安装权限; cd /home/... #目标文件夹,根据目标程序文件位置进行更改 su #获

carlos_zhao的博客 1万+

Chrome红页误报?手把手教你通过Search Console快速解除安全警告

本文详细解析了Chrome红页误报的常见原因及解决方案,重点介绍如何通过Google Search Console快速解除安全警告。内容涵盖误报诊断、技术修复、申诉技巧及长效预防措施,帮助网站管理员有效应对Google Safe Browsing的误判问题,确保网站安全状态快速恢复。

a1b2c的博客 993

Python 代码实现哈夫曼编码

一、哈夫曼编码是什么? 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 哈夫曼编码,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。 二、Python 代码实现哈夫曼编码 代码如下(示例): from math import inf #初始化哈夫曼结点 cla

amnesia_h的博客 7816

戴尔PowerEdge服务器R450 RAID配置步骤

戴尔PowerEdge服务器R450 RAID配置步骤

且听风呤tmj的博客 6910

Python实现霍夫曼树

Python实现霍夫曼树

weixin_43790276的博客 2246

STM32CubeMX | 38-使用硬件SPI驱动以太网模块(W5500)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与以W5500通信,驱动以太网模块。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): W5500以太网模块 这里我使用常见的以太网模块W5500: W5500官网 http://www.w5500.cn/ W5500中文手册 iEthernet W5500 Datasheet 软件准备 需要安装好Keil - MDK及芯片对应的包,以

Mculover666的博客(嵌入式) 7388

Android11.0(R) MTK 平台开机logo动态替换(by logo.bin方式)

实现的效果 客户提供一张格式为 bmp 的开机logo,在 linux 环境下执行制作 logo.bin 脚本文件, apk 拷贝 logo.bin 文件替换系统原有的bin,然后重启 logo 自动更新。 原理分析 MTK 平台的充电图片和开机logo都是打包到 logo.bin 中的 对应的资源路径在源码 vendor\mediatek\proprietary\bootable\bootloader\lk\dev\logo 系统一般预制了很多分辨率文件夹,实际通过 BOOT_LOGO 来确定打包那一个

cczhengv 4585

论文学习「Python」:Huffman编码详述及代码实现

在学习 word2vec 时,首先接触到的就是 Huffman 编码,这里简单记录一下学习内容。

qq_41297934的博客 3604

UNet改进(6):基于注意力机制的多尺度医学图像分割方法

本文提出了一种集成多尺度注意力机制的UNet改进模型UNetWithAttention,用于提升医学图像分割性能。该模型在标准UNet架构基础上,设计了并行3×3、5×5、7×7卷积核的多尺度注意力模块,通过特征拼接和Sigmoid激活生成注意力权重,实现了对不同尺寸病变的自适应关注。模型采用分离式设计,将特征提取与特征选择解耦,在编码器-解码器各阶段嵌入注意力模块。实验表明,该方法在视网膜血管分割和肺结节检测任务中优于标准UNet,Dice系数和IOU分别提升2.6%和4.1%,同时保持计算效率。

2501_91516851的博客 1324

【数据结构——哈夫曼树及其应用】

【数据结构——哈夫曼树及其应用】一、哈夫曼树的基本概念二级目录三级目录二、哈夫曼树的构造算法二级目录三级目录三、哈夫曼编码二级目录三级目录 一、哈夫曼树的基本概念 二级目录 三级目录 二、哈夫曼树的构造算法 二级目录 三级目录 三、哈夫曼编码 二级目录 三级目录 ...

lflcodeplus的博客 6270

【云原生技术】云计算与网络:容器服务(Tencent Kubernetes Engine,简称TKE)简介

基本概念主要特点应用场景技术实现容器服务(Tencent Kubernetes Engine,简称TKE)是腾讯云提供的一种托管的容器管理服务,基于开源的Kubernetes系统。TKE旨在简化容器的部署、管理和扩展,并且提供高性能、可靠性和安全性,适用于各种规模的企业和应用。

weixin_46453070的博客 2043

Orange3实战教程:文本挖掘---标注语料库地图

Oreange3,文本挖掘,标注语料库地图用于在二维投影中可视化、聚类文档,并用关键词进行标注。

err2008的专栏 818

哈夫曼(Huffman)树 & 哈夫曼编码与解码

哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。:WPL(Weighted Path Length)是树中所有叶子结点的带权路径长度之和。

Xiaoyuan_he的博客 2万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Huffman树(哈夫曼树)

哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)。可以...

南方以北 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【数据结构与算法】-哈夫曼树(Huffman Tree)与哈夫曼编码

超详细讲解哈夫曼树(Huffman Tree)以及哈夫曼编码的构造原理、方法,并用代码实现。

闪耀大叔的博客 8万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

哈夫曼树(Huffman Tree)及哈夫曼编码(Huffman Coding)

哈夫曼树(Huffman Tree)又称最优二叉树,给定N个权值作为N个叶子结点,构造一棵二叉树,使该树的带权路径长度达到最小。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。 本文所有概念性描述及图示均来自王道考研数据结构。...

lranqi的博客 1万+

哈夫曼树-赫夫曼树-霍夫曼树(Huffman Tree)原理及应用与代码

哈夫曼树 定义: 设二叉树具有n个带权值的叶节点,那么从根节点到各个叶节点的路径长度与相应节点权值的乘积的和,叫做二叉树的带权路径长度。 下图WPL(带权路径长度)的计算: WPL = 2*2+2*3+1*1 = 11 ...

lzzw的学习之路 1万+

数据结构:Huffman树(哈夫曼树)原理及C++实现

前言:        最近要到期末了,事情有点多有几个星期没有写这个了,我们数据结构实验课要求写Huffman树,因此这次我将对Huffman树进行介绍。原理:哈夫曼树是一种单词树,广泛使用于数据压缩之中。将会根据每个字符的权重,来构建一颗Huffman树,同时根据Huffman树对原来的文本进行二次编码,以达到压缩数据的目的。比如当我们对AAABBBA进行Huffman树压缩时,A的编码将会是1...

weixin_41427400的博客 1万+

哈夫曼树编码及其图形化的实现

一、设计要求 1.从文件读入26个英文字母及其权值,建立哈夫曼树并将它存于文件中.将哈夫曼树以直观的方式显示在图形化界面上; 2.利用已经建好的哈夫曼树,对文件中的正文进行编码,然后将结果存入文件中,并求出最短平均编码,哈弗曼最短平均编码,冗余度以及程序运行时间。 二、数据结构 ch: 字符 weight:权重 lchild: 左孩子 rchild: 右孩子

csdn86868686888的博客 9391

哈夫曼树(Huffman Tree)

哈夫曼树是一种带权路径长度最短的二叉树,由David Huffman于1952年提出,主要用于数据压缩领域。其核心思想是让权重大的节点更靠近根节点,通过合并最小权重的节点来构建。哈夫曼编码是其典型应用,通过为高频字符分配短编码实现无损压缩。此外,哈夫曼树可拓展为多叉树、动态哈夫曼树等变体,应用于任务调度、决策优化等领域。优点是实现最优压缩,但需预先统计频率且需存储树结构。该算法体现了"基于权重优化分配"的思想,具有广泛适用性。

zhangmingdeng的博客 2116

【树 - 哈夫曼树(Huffman Tree)】

哈夫曼又称最优二叉树, 是一种带权路径长度最短的二叉树。

abclyq的博客 2278

【数据结构】【哈夫曼树】哈夫曼树、赫夫曼树(Huffman Tree)C语言实现

1.哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。2.WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln)3.构建哈夫曼树方法如下: 在 n 个权值中选出两个最小的权值,对应的两个结点组成一个新的二叉树,且新二叉树的根结点的权值为左右孩子权值的和; 在原有的 n 个权值中删除那两个最小的权值,同时将新的权值加入到n–2 个权值的行列中,以此类推; 重复 1 和 2 ,直到所以的结点构建成了一棵二叉树为止,这棵树就是哈夫曼树。

crr411422的博客 5482
上一篇: ES6学习笔记15 Generator 函数的异步应用
下一篇: 二维数组中的查找(JS实现)
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值