数据结构论坛

首页 » 分类 » 问答 » 数据结构与算法之绪论二
TUhjnbcbe - 2021/1/7 11:08:00
福州白癜风医院 https://m-mip.39.net/nk/mip_6223398.html

Filecoin问题全集:永不止步IPFS洞察秋毫一知半解的你请看

Filecoin上线已经一个多月。此前,FIL的涨幅超过了40%,使一些投资者重新充满希望。这些人中有不少改变了以往的沉静,考虑到业界不少投资者对Filecoin还是一知半解,将收集到的问题整理如下:

Filecoin挖矿技术和比特币挖矿技术有什么区别?

Filecoin和比特币的挖矿机制、参与门槛和收益分配都有所不同。

1、Filecoin采用PoRep+PoSt+Ec共识机制,BTC采用PoW机制

2、Filecoin挖矿需要矿机和前置质押代币FIL,BTC仅需矿机即可参与

3、Filecoin挖矿收益分配机制,先释放25%,剩余75%需天线性释放;BTC立即获得挖矿收益

另外,“单T算力挖矿效率”在比特币挖矿系统中表现为最大值,在Filecoin挖矿系统中则需要时间等待有效算力增长,数据被填满才能达到最大值(工作效率最高)。

硬盘容量大小等于算力大小吗?

矿机上硬盘容量大小是指可获得的有效存储量的最大值,表示的是有效存储达到最高时候算力的大小。cjxy即使你现在拥有T的硬盘容量,但是当前存储的有效数据只有15T,那么算力也只有15T。但是随着有效存储器的不断提升,计算力理论上可以达到最大T。

为什么需要前置质押?

Filecoin的经济模型中,引入了前置质押担保机制,即矿工们为了获得激励,必须在挖矿之前存入一定数量的FIL作为“质押担保”。只有通过对FIL进行质押才能提高有效算力。

设置质押机制,一方面可以提高矿工作恶的代价,通过保证机制约束矿工挖矿行为,维护链上生态的稳健发展;另一方面可以提高链上攻击的代价,保证网络的安全。

怎样了解存储市场的运作过程?

存储市场的运作过程,先由矿工列出报价单,由区块链网络进行自动报价匹配,匹配成功后矿工将进行数据存储,最终完成交易。更多关于币圈资讯可+cjxy获取最新消息。储存矿工收入来源:储存费+打包区块所获区块链回报。

Filecoin的共识机制有哪些?

复制证明(PoRep)+时空证明(PoSt)+预期共识(EC)

复制证明是PoS(Proof-of-Storage)的一个优化版本,在PoRep下可以有效防御三种常见的去中心化网络攻击,三者的共同点是攻击矿工实际存储的数据大小要比声称存储的小,这样就获得了本不该获得的系统奖励。

时空证明全称为Proof-of-Space-time,提出了证明链(Proof-chain)的数据结构,它将一些挑战和证明连接起来形成,根据一个证明链增加一个时间段,从而得到一个时间段内矿工储存数据的证明。时空证明可以很方便地验证矿工在某段时间内是否存储了特定的数据,使用时间戳来锚定证明链。

预期共识(ExpectedConsensus,EC),新的区块创建权,通过每轮选举,矿工获得选举机会的可能性与其目前有效存储(算力)成正比,也就是将网络中矿工当前的存储量数据占网络总存储量的比例转换为矿工投票。

Filecoin还提出了一个名为时限性(TimeBounded)的协议,它可以有效地解决去中心化网络中常见的三种攻击。因此,Filecoin与比特币和以太坊相比,其共识机制更加复杂。

第一年的FIL释放量是多少,是如何计算出来的?

FIL总发行量20亿,其中总量的70%作为挖矿释放,也就是14亿枚由矿工挖矿产出,六年后线性减半。

1、协议实验室占比15%,六年释放完毕,第一年释放5千万枚,平均每天释放,枚

2、基金会占比5%,六年释放完毕,第一年释放16,,枚,平均每天释放45,枚

3、投资者占10%,三年释放完毕,第一年释放66,,枚,平均每天释放,枚

4、矿工挖矿产出占比70%,第一年预计产出,,枚,平均每天释放,枚

从总体上看,第一年FIL的释放量为,,枚。基于上述结论,我们可以得出FIL第一年的每日释放量为,枚。

“封装速度”该如何理解?

了解“封装速度”,在FIL的挖矿过程中,需要对数据进行封装,完成P1,P2,C1,C2等步骤,将文件切割成数不清的KB大小的碎片,最终完成封口。这几步中最快的就是“封装速度”。比如今天封装了1T数据,那么算力大小也就是1T。

如何更好地理解天线性释放?

所挖到的矿,平均分成份,每天释放一份。

第二天除了获得当日挖矿释放的那一份之外,还会获得第一天挖矿部分释放的份额。

同样,第三天获得当日所挖矿释放的份额外,还会获得第一第二天挖矿所释放的部分……以此类推,只要持续挖矿,越往后每天获得的解锁收益越多。

在第天可以拿到的释放奖励为(第1天+第2天+第3天+第4天+…+第天+第天)的每日释放,天为一个峰值。

Filecoin的未来价值

Filecoin未来的价值,来自于官方的严谨和用心。从年开始,Filecoin进行了唯一一轮私募,到目前为止,已有三年时间,几乎没有什么担保策略和释放机制,而且还试图阻止那些短期投机者进入市场,毕竟,如果当前市场价格过高或波动过大,这对Filecoin这一新项目来说并不好。更多关于币圈资讯可+cjxy获取最新消息。此外,如果交易限制被完全放开,还会造成资本逐利的侵蚀,严重影响Filecoin网络的发展速度和未来价值,最终导致预期时间节点的延迟或无法实现。

这就是为什么Filecoin网络的真正价值,其核心是“安全、高效、实惠的数据存储方式”,而这正是Filecoin网络受到市场青睐的原因。因此,如果在网络初期就取消了挖矿门槛,只会过度透支项目本身的预期价值和未来的潜力,开发道路就会变得坎坷无比。就拿比特币来说,BTC的市场价格从没有人

TUhjnbcbe - 2021/1/7 11:08:00

我们继续来学习数据结构与算法,前面我们大概讲了一下数据结构是什么,有了一个大概的认知。

常用数据结构

现在我们来介绍一下我们在接下来的学习中要学习的数据结构:

当然,这里面又可以分成若干个小点,比如线性表又可以分成数组和链表;树可以分成二叉树、一般树;图又可以分成有向图和无向图;听起来好像很多很难,但是只要你们认真看认真学是肯定能够学会的(学不会私聊我亲自教你)。

逻辑结构和物理结构是什么?

这里又要介绍两个概念:逻辑结构和物理结构,他们是描述数据结构的两个方面

先看看啰嗦的数学概念吧:

举个简单的栗子:

定义一个复数的数据结构Complex=(C,R)其中C={C1,C2}//C是两个实数的集合R={C1,C2}//这个表示C1在前,是该复数的实部;C2在后,是该复数的虚部

像这种定义了先后顺序的关系就叫做逻辑结构,要注意的是逻辑结构是相对于数据元素而言,我上面举的例子中C1、C2都是数据元素。

至于物理结构,其实就是字面意思,就是物理块是怎么组织的。

其实用数组和链表可以很好地解释逻辑结构和物理结构:

数组的逻辑结构是顺序的、物理结构也是顺序的(这就是它可以使用下标快速定位某个数据元素的原因);

链表在逻辑上是连续的但是在物理上却不是连续的(因为链表的结点是通过指针来找到下一块结点的,所以它查找元素比数组要慢得多)

关系的映像方法

既然讲到数组和链表,那就顺带提一下两种映像方法:

代表人物---数组

代表人物---链表

数据类型

数据类型学过C++或者其他语言的同学肯定都接触过,无非就是Char(字符)变量、Int(整形)变量、Double(双精度浮点数)变量等等,这里就不再多叙述了。

抽象数据类型(AbstractDataType)

抽象数据类型也叫ADT,它是用来描述一个数学模型以及定义在该模型的一组操作,其实它跟伪代码差不多,我们可以用(D,S,P)三元组来表示一个抽象数据类型(ADT),具体是这样的:(建议先看看下面的栗子)

用(D,S,P)三元组表示其中,D是数据对象,S是D上的关系集,P是D上的基本操作集。再具体一点:ADT抽象数据类型名{数据对象:〈数据对象的定义〉数据关系:〈数据关系的定义〉基本操作:〈基本操作的定义〉}ADT抽象数据类型名其中基本操作的定义格式为:基本操作名(参数表)初始条件:〈初始条件描述〉操作结果:〈操作结果描述〉参数表可以出现的参数:赋值参数:只为操作提供输入值。引用参数:以打头,除可提供输入值外,还将返回操作结果(和C++的引用差不多)。初始条件:描述操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并且返回相应的出错信息。操作结果:说明操作正常完成之后,数据结构的变化状况和应返回的结果。若初始条件为空,则省略之。

这玩意在数据结构的书上到处都是,考试的时候也会要求写出来,所以务必要掌握。

看了定义可能会觉得有点懵,下面举个具体栗子:

算法

这里再提一下算法这个概念,值得一提的是当我看完整本数据结构的时候,我发现算法与结构是并存的、息息相关的,也就是说不同的数据结构有不同的算法。

比如对于数组的遍历算法用到的是下标的增长,而链表的遍历算法则是指针的不断变换。

(数组与链表,图来源于网络)

算法的要求(这个有时会出填空题噢)

这小节都是概念性的东西,背一下就好了

(一)算法一定要满足的五个重要的特性:1.有穷性2.确定性3.可行性4.有输入5.有输出1、有穷性,就是你写的算法要能在有限时间内输出结果2、确定性,就是对于相同的输入输出必定相同3、可行性,算法中的所有操作都必须足够基本,即都可以通过已经实现的基本运算执行有限次来实现。4、有输入,作为算法加工的数据对象,通常体现为算法中的一组变量。有些变量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入到算法之中。5、有输出,这个不用说了,没输出的话我不知道你写这个算法是图啥(二)算法设计的目标正确性、可读性、健壮性、高效率与低存储量需求

如何评估算法的好坏

一个算法的好坏取决于时间与空间这两个维度

一般有两种评估方法

一种是事后统计法,就是你先跑一下这个程序,拿计时器计时,然后打开你的任务管理器看看你的程序占多少内存。

另一种是事前统计法,我带着大家算一下下面这个栗子就知道了

for(inti=0;in;i++){//这里也要执行n+1次,为什么是n+1而不是n呢?for(intj=0;jn;j++){//这里要执行n(n+1)次,为什么不是(n+1)2呢}}所以这个程序总共要执行n+1+n(n+1)次,所以这个程序的时间复杂度是O(n2)问题1:为什么第一层的循环是执行n+1次而不是n次?答:这里我假设n=1,首先j=0的时候会判断一下是否J1,这里就算一次,然后J自增1,然后继续判断,这里又算一次,此时j不小于1跳出循环,所以总共是2次,即n+1次。也就是算判断的语句也要算进去。但实际上不用算这么清楚,因为时间复杂度只算到最高次就可以了。问题2:为什么第二层的循环是n(n+1)而不是(n+1)2?答:很明显,他的上层循环除去判断操作只会执行n次,所以是n(n+1)问题2:为什么时间复杂度是O(n2)而不是O(n+1+n(n+1))2答:只算最高次,其他低次幂的都被省略了。

至于空间复杂度怎么计算,无非和上面差不多,只不过换成了数用了多少个变量罢了

常见的时间复杂度

在这里引入一个术语:问题规模,通俗地讲就是上面例子中的n,问题规模一般与输入数据量成正比。比如你要遍历一个链表里的所有数,这个链表里有5个结点那么n=5,如果有50个结点那么n=50。当然我们不会写成O(5)或者O(50),而是写成O(n),这样才具有一般性。

要注意的是,O(1)的意思并不是只执行了一次,而是执行了常数次,这个常数是确定的、不随着n的变化而变化,比如数组的查找就是O(1)时间复杂度的,因为只需进行下标的计算然后根据下标找到目标元素即可。

绪论的内容大概是这么多,下一章我们将学习线性表。觉得有用的别忘记转发还有点个在看和赞噢!

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: 数据结构与算法之绪论二