哈希表(散列表)之乘法哈希(散列)法

《算法导论》学习分享——11. 散列表(哈希表) 11. 散列表(哈希表) 文章目录11. 散列表(哈希表)直接寻址表散列表链接法散列分析散列函数除法散列乘法散列全域散列开放寻址法线性探查双重探查开放寻址法分析完全散列涉及数据结构 许多应用都需要一种动态集合,至少支持Insert,Search和Delete的字典操作。 散列表(Hash Table)是实现字典操作的一种有效数据结构。尽管最坏情况下散列表查询一个元素的时间和链表的查询时间相同,为Θ... 阅读详情

乘法哈希法对应的哈希函数h(k)=(A∗kmod  2w)rsh(w−r)h(k)=(A*k\mod 2^w )rsh(w-r)h(k)=(A∗kmod2w)rsh(w−r)

www为计算机的每一个字的字节长度,即计算机位数,常见的有32位和64位

AAA是一个常数,满足:AAA在二进制下的长度为www位

rrr是一个与哈希表大小有关的常数,设哈希表长度为mmm,r=⌈log⁡2m⌉r=\lceil\log_2 m\rceilr=⌈log2​m⌉

rshrshrsh是右移操作,在C++编程语言中的对应代码为>>

举例说明:
假定m=8m=8m=8,则r=3r=3r=3;假定w=7w=7w=7(世界上并不存在7位的计算机),选取A=1011001(2)A=1011001_{(2)}A=1011001(2)​,若k=1101011(2)k=1101011_{(2)}k=1101011(2)​。
哈希函数的计算如下:A∗k=1011001(2)∗1101011(2)=10010100110011(2)A*k=1011001_{(2)}*1101011_{(2)}=10010100110011 _{(2)}A∗k=1011001(2)​∗1101011(2)​=10010100110011(2)​,可以看到A∗kA*kA∗k在二进制下长度为2w2w2w,实际上,这不是偶然,两个www位二进制数相乘得到的是2w2w2w位的二进制数。
A∗kmod2w=10010100110011(2)mod  27A*kmod2^w=10010100110011_{(2)}\mod2^7A∗kmod2w=10010100110011(2)​mod27,二进制数对2w2^w2w取余,只需要截取原二进制数的后www位,这里得到0110011(2)0110011_{(2)}0110011(2)​
右移w−r位w-r位w−r位,即右移4位,得到011(2)011_{(2)}011(2)​,对应十进制数为3

乘法哈希法的优点在于其计算效率较高

数据结构学习笔记(十)哈希表(散列表) 散列表,也称哈希表,是一种实现字典操作的有效数据结构。它用一个散列函数把一个数对映射到一个哈希表的具体位置。如果数对p 的关键字是k,散列函数为f,那么理想情况下,p在散列表中的位置为f(k)。 阅读详情

相关推荐

算法导论---------------散列表(hash table)

摘要:   本章介绍了散列表(hash table)的概念、散列函数的设计及散列冲突的处理。散列表类似与字典的目录,查找的元素都有一个key与之对应,在实践当中,散列技术的效率是很高的,合理的设计散函数和冲突处理方法,可以使得在散列表中查找一个元素的期望时间为O(1)。散列表是普通数组概念的推广,在散列表中,不是直接把关键字用作数组下标,而是根据关键字通过散列函数计算出来的。书中介绍散列表非

chen 1581

Hash 浅谈哈希算法

hash 哈希算法

young_1217的博客 1378

机器学习预测土壤养分:从电导率、pH到随机森林与神经网络的农业实践

在智慧农业与精准农业领域,机器学习已成为处理复杂农业数据、挖掘潜在规律的关键技术。其核心原理在于通过算法从多维数据中自动学习特征与目标变量之间的映射关系,尤其擅长捕捉非线性关联。这项技术的核心价值在于能够将传统上依赖昂贵、耗时实验室分析的问题(如土壤养分检测),转化为基于易获取传感器数据(如电导率、pH值)的快速、低成本预测任务,为农业生产的实时决策与资源优化提供了全新可能。其典型应用场景包括作物生长监测、产量预测以及精准施肥管理等。本文聚焦于利用随机森林和神经网络等回归算法,构建通过土壤物理参数预测氮磷钾

weixin_33693070的博客 665

常见的hash算法及其原理

 Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。   哈希表是根据设定...

Beyond_2016的博客 28万+

HWSD中国土壤数据库

T_PH_H2O: Real (酸碱度) T_CEC_CLAY: Real (粘性层土壤的阳离子交换能力);T_CEC_SOIL: Real (土壤的阳离子交换能力) T_BS: Real (基本饱和度);T_CACO3: Real (碳酸盐或石灰含量) T_CASO4: Real (硫酸盐含量);ADD_PROP: Real (土壤单元中与农业用途有关的特定土壤类型);T_USDA_TEX: Real (USDA土壤质地分类);T_REF_BULK: Real (土壤容重);

地球资源数据云的官方博客 4651

Unity-Mirror网络框架-从入门到精通之MultipleMatches示例

Multiple Matches 示例主要讲述了如何在使用 Mirror 网路框架时管理多个游戏匹配。以及如何设置一个能够同时支持多个游戏会话的系统,使玩家能够加入他们所选择的比赛,而不是强制他们加入一个单一的匹配。

TxNet 964

谈谈hash算法

哈希算法的设计是一个需要考虑许多因素的复杂问题。然而对于某些要求不高的场景,我们也能设计一些简 单的哈希算法。:对输入的每个字符的 ASCII 码进行相加,将得到的总和作为哈希值。:利用了乘法的不相关性,每轮乘以一个常数,将各个字符的 ASCII 码累积到哈希值中。:将输入数据的每个元素通过异或操作累积到一个哈希值中。**旋转哈希 **:将每个字符的 ASCII 码累积到一个哈希值中,每次累积之前都会对哈希值进行旋转操作。

Leon的博客 1174

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

R语言coxph函数对加权数据集进行竞争风险模型拟合、regplot包的regplot函数可视化竞争风险回归模型的列线图nomogram、计算特定病例的事件概率(控制了竞争风险的累计事件概率)

statistics+insight+vista+power 358

哈希函数:除法与乘法

  最近在看CLRS的数据结构部分,感觉数据结构需要实现的部分不如算法部分多(或者说不如算法部分对着伪代码人肉翻译容易实现),有待于在具体的场景中使用,所以记录一下相关的概念。 一、基于除法的哈希函数:   h(k) = k mod m.   k作为标志值,哈希表共有m个位置。值得注意的是,在m值的选择中,不宜选择2的幂,因为这样做了取余数运算后,相当于直接拿出了k值的低比特位。如 m = ...

weixin_30693183的博客 768

【Python基础】FastAPI 从入门到项目实战操作详解

【Python基础】FastAPI从入门到使用实战操作详解

congge_study的博客 441

如何使用 Conda 安装 Qiskit(详细教程)

本文介绍了使用conda安装Qiskit量子计算工具包的完整流程。首先创建Python 3.10的conda虚拟环境(qiskit_env),然后安装Qiskit核心包及可视化组件(注意Mac用户的安装命令差异)。接着注册IPython内核并测试环境,通过量子电路创建与可视化演示验证安装成功。该教程为量子计算开发提供了简洁的环境配置指南,适合研究者和开发者快速搭建Qiskit开发环境。

猿小白的博客 565

【轻松掌握数据结构与算法】哈希(Hashing)

哈希表是一种非常高效的数据结构,适用于快速查找、插入和删除操作。通过合理设计哈希函数和冲突解决策略,可以显著提高哈希表的性能。布隆过滤器则是一种空间高效的概率型数据结构,适用于测试元素是否属于某个集合。希望这些示例代码和输入输出能帮助您更好地理解和应用哈希技术。

Whoisbug的博客 1467

笔试题-2023-加特兰-数字IC设计【纯净题目版】

笔试题-2023-加特兰-数字IC设计【纯净题目版】

w0shishabi的博客 2248

哈希表(Hash Table、散列表)实现原理(哈希映射HashMap、哈希函数(取余法、乘法法、加法法)、索引bucket桶、哈希冲突、链地址法、开放地址法(线性探测法)、负载因子、哈希表扩容)

线性探测法会按照桶的顺序从当前桶向后查找空位,直到找到一个空的桶为止。每当发生冲突时,哈希表会检查下一个桶,并依此类推直到找到一个空桶。实现简单:固定大小的数组便于通过哈希函数直接定位存储位置。内存管理简化:避免了动态调整数组大小的复杂性。哈希函数稳定性:哈希函数设计上要求固定大小的数组,以保证映射过程的高效性。负载因子和扩容机制:通过扩容和调整负载因子,保持哈希表在不同规模数据下的高效性能。尽管哈希表的大小在初始时是固定的,但它通过扩容机制能够动态调整,以适应更多的元素,确保哈希表操作的高效性。

Dontla的博客 1517

基于STM32设计的智能手环(ESP8266+华为云IOT)_178

为了满足用户对健康监测的需求,手环项目集成了血氧检测、心率检测、体温检测等功能。这些功能采用了专门的传感器模块,如MAX30102、DS18B20等,确保了测量数据的准确性和可靠性。同时,为了方便用户了解自己的运动情况,项目还加入了行走步数统计功能,通过MPU6050模块实现精确计步。

2402

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

散列表

定义        散列表(Hash Table)也叫哈希表,是根据关键字进行数据访问的数据结构。散列表将关键字映射到表中的某个位置来访问数据,提供映射的叫散列函数(Hash Function)。通过散列函数,我们可以实现对数据的快速访问(理想情况下是常数时间内,但这取决于散列函数、碰撞概率、负载系数等因素)。        实际上,散列表是普通数组概念的推广。由于对普通数组可以直接寻址,使得...

程序人生 1083

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数据结构-散列表

数据结构-散列表 两个重要的问题: 散列函数 散列冲突 散列函数的选择,使得尽可能少的发生散列冲突; 标准的散列关键字是正整数,散列函数可能是整数除以散列表的大小取余; 散列表的大小一般是素数,散列分布的更加均匀; 如果关键字是字符串的话,散列函数可以是把字符串的所有ascII码加起来; 几个散列函数 int hashs1(const string & key, int tablesize){ int hashval{0}; for(char x:key){

1862

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

深度学习工具包 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")

Java数据结构-哈希表讲解(Hash)

哈希表是我们经常频繁使用的数据结构,所以它的知识点比较重要,如HashMap啊,就是哈希表结构,哈希表的底层是数组+链表结构的,非常之聪明,两者优点结合,数组查询快,链表增删快,并且hash采用算法分析定位地址,而不用再像数组一样需要遍历。 哈希表为什么采用数组+链表的结构呢? 答:通过一定算法计算出来的数字就可以对应数组下标找到对应位置,假如现在计算完的数字是0需要定位到0坐标上,然后又有一...

dfBeautifulLive的博客 1892

Hash算法原理的简单分析

   哈希计算就是努力的把比较大的数据存放到相对较小的空间中。最常见的哈希算法是取模法。下面简单讲讲取模法的计算过程。比如:数组的长度是5。这时有一个数据是6。那么如何把这个6存放到长度只有5的数组中呢。按照取模法,计算6%5,结果是1,那么就把6放到数组下标是1的位置。那么,7就应该放到2这个位置。到此位置,哈斯冲突还没有出现。这时,有个数据是11,按照取模法,11%5=1,也等于1。那么原来...

weixin_33964094的博客 334

算法(C语言)-hash查询-学习笔记07

直接寻址表,记为T[0...m−1]T[0...m-1]T[0...m−1], 其中每个位置称为槽(Slot),对应全域U的一个关键字(Key),key指向satellite data,若没有key为k的satellite data,则T[k]=NILT[k]=NILT[k]=NIL。O(1)O(1)O(1) O(1)O(1)O(1) O(1)O(1)O(1) 优点 将对象直接存放在表的槽中,从而节约空间 只需要知道下标就可以找到元素,不必存储关键字。然而不存

baidu_41924187的博客 629

【C++】哈希表的实现(链地址法)

举个例子:乘法散列法对哈希表⼤⼩M是没有要求的,假设M为1024,key为1234,A = 0.6180339887, A*key = 762.6539420558,取⼩数部分为0.6539420558, M×((A×key)%1.0) = 0.6539420558*1024 = 669.6366651392,那么h(1234) = 669。散列函数,否则每次哈希都是随机选⼀个散列函数,那么插⼊是⼀个散列函数,查找⼜是另⼀个散列函数,就会导致找不到插⼊的key了。的情况,不能完全解决这个问题。

m0_74824865的博客 357

数据结构与算法分析:哈希表

哈希表又叫散列表,是实现字典操作的一种有效数据结构。哈希表的查询效率极高,在没有冲突(后面会介绍)的情况下可做到一次存取便能得到所查记录,在理想情况下,查找一个元素的平均时间为O(1)(最差情况下散列表中查找一个元素的时间与链表中查找的时间相同:O(n),但实际情况中一般散列表的性能是比较好的)。

liyuefeilong的专栏 9006

【算法技术】Hash深入学习

一、定义     Hash即“哈希”,是把任意长度的输入通过散列算法变换成固定长度的输出(该输出即散列值)。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。    关键字k:即输入值    散列函数H(key):为了完成转化的固定算法    散列表(也称哈希表):关键字经散列函数输出后的结果表 二、常用的hash函数 1. 直接寻址法:取关键字或关键字的某个线性函数

u010515761的专栏 645

算法导论学习笔记9_散列表

散列表1. 散列表 1. 散列表 散列表(Hash Table,又称哈希表)是一种根据关键字直接访问内存存储位置的数据结构。 在链表或者有根树等结构中,如果我们知道一个对象的关键字(key),我们需要与链表或者树中对象的关键字进行逐一比较,从而找到该对象的位置。散列表则不同,它通过将对象的关键字映射为一个地址,将该地址作为对象的存储地址,从而在查找对象时不需要进行关键字的比较。 假设所有关键字在...

weixin_43374723的博客 803
上一篇: 线性时间内找到第k小的元素:快排应用与BFPRT算法
下一篇: 【算法笔记】全域哈希表
RealWeakCoder
博客等级 码龄7年 236粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值