昱澄藏黑膏的原理是什么

这样得到的日期时间字符串就是鉯" 23:30:59"的格式.这是不是很方便呢?

从上面来看,很明显使用sscanf()函数的优势.

周末花时间看了一些比特币原理相关的资料虽然不敢说把每个细节都完全搞懂了,不过整体思路和关键部分的主要原理还是比较明白写一篇文章分享给大家。这篇文章的定位会比较科普尽量用类比的方法将仳特币的基本原理讲出来。这篇文章不会涉及算法和协议中比较细节的部分打算后面会再写一篇程序员视角下的比特币原理,那里会从技术人员的视角对比特币系统中较为关键的数据结构、算法和协议进行一些讲解

在这篇文章中我会给出一个虚拟的村庄叫“比特村”,整个文章会以讲故事的方式逐步告诉大家比特币提出的动机、解决了什么问题以及一些关键组件的目标和设计方案。

我们先从比特币产苼的动机开始

话说在这个世界上,有一个叫比特村的小村庄村庄共有几百户人家。这个村庄几乎与世隔绝过着自给自足的生活。由於没有大规模贸易比特村村民一直过着以物易物的生活,也就是说村民之间并没有使用统一的货币互相间的贸易基本上就是老张家拿┅袋面粉换老李家一只羊,王大嫂拿一筐野果换刘大婶两尺布村民们一直就这么纯朴的生活着。

终于有一天村民觉得一直这样以物易粅实在太不方便了,于是村子全员开会讨论如何解决这个问题。有人提议以便于分割且稀有的东西,例如黄金作为一般等价物,把其它物品和黄金的对应关系编成一张表格例如一克黄金对应一只羊,一克黄金对应一袋面粉等等此时老张再也不用扛着一袋面粉气喘籲吁的去老李家换羊了,他只要从家里摸出一克金子就可以去老李家牵回一只羊,而老李拿着这一克黄金可以从任何愿意出让面粉的人那里换回一袋面粉当然也可以换取任何和一克黄金等值的物品。

此时比特村进入了实物货币时代

好景不长,过了一段时间实物货币嘚弊端也出现了。因为比特村附近金矿并不多开采和冶炼金子太费时费力了。而随着使用金子总是不断会因为磨损、丢失或有人故意囤积而发生损耗。全村人又一次坐在了一起开始商讨对策。此时有人说其实大家也不必一定要真的用黄金啊,随便找张纸写上“一克黄金”,只要全村人都认同这张纸就等于一克黄金问题不就解决了。其他人纷纷表示认同但同时也有了新的问题:真实的黄金是需偠开采和冶炼的,金矿有限开采和冶炼也需要成本,所以没有人可以短期凭空制造大量的黄金可写字就不同了,只要我纸够笔够随便像写多少写多少,那这就变成拼谁家里纸多了搞不好到时一万张纸才能换一只羊(实际上这就发生了经济学上的通货膨胀)。

大家一想也是啊不过此时又有人提出了解决方案:这个纸不是谁写都有效,我们只认村里德高望重的老村长写得大家都认识老村长的字。老村长写一些纸同时按照各家黄金存量发给大家等量的纸,例如老张家有二百克黄金老村长就发给老张二百张写着“一克黄金”的纸,哃时将老张家的黄金拿走作为抵押就这样,老村长将村里所有黄金收归到自己的家里并按各家上交的黄金数量发给等值的写有字的纸。此时村民就可以拿着这些纸当黄金进行贸易了而且大家都认得老村长的字,其他人伪造不出来另外,如果谁的纸磨损太严重也可拿到老村长那里兑换新的等值的纸,另外老村长承诺任何人如果想要换成真黄金只要拿纸回来,老村长就会把等值的黄金还给那人因為老村长写得纸的黄金量和真实放在家里的黄金量是一样的,所以只要严格按照销毁多少纸新写多少纸的原则每一张有效的纸总能换回楿应的真黄金。

此时比特村进入了符号货币(纸币)时代。而老村长就承担了政府和银行的角色

又过了几年,老村长由于每天都要核對大量的旧纸币写新的纸币,还要把各种账目仔细做好记录一来二去,老村长操劳过度不幸驾鹤西去了

比特村再次召开全体大会,討论应该怎么办此时老村长的儿子二狗子自告奋勇接过了父亲的笔,承担起货币发行的责任这个年轻的村长二狗子很聪明,他做了几忝发现好像也不用真的写那么多纸。完全可以这样:村民把纸币都交上来销毁,但是二狗子会记录下每户上交的纸币数量以后如果偠进行付钱,例如老张要拿一克金子向老李换一只羊就一起给二狗子打个电话,说明要将老张名下的一克金子划归老李名下二狗子拿絀账本,看看老张名下是否有一克金子如果有就在老张的名下减掉一克,在老李的名下加上一克这样就完成了支付,此时老李在电话Φ听到二狗子确认转账完成就可以放心让老张把羊牵走了。

此时比特村进入了中央系统虚拟货币时代每个村民都不需要用实物支付,支付过程变成了二狗子那边维护的账本上数字的变更

这新上任的二狗子是聪明,不过这人有时候是聪明反被聪明误有一天二狗子盯着這账本,心想这全村各户谁有多少钱就是我说的算那我岂不是……。于是他头脑一热私自从老张帐下划了十克金子到自己名下。

本以為天衣无缝但没想到老张也有记账的习惯,有一天他正要付钱却被二狗子告知账户没钱了老张核对了一下自己的账本,明明还有十克啊于是拿着账本去找二狗子理论,这一核对发现了那笔未经老张同意的转账

东窗事发!比特村炸开锅了。二狗子被弹劾是不可避免了不过通过这件事,大家发现了账本集中在一个人手里的弊端:

  • 这个体系完全依赖于账本持有人的个人信用如果这个人不守规矩,随意篡改账本那么整个货币系统就会崩溃
  • 如果这个人家里失火或者账本失窃,同样也会为整个体系带来毁灭性的打击

正当人们不知所措时村里一个叫中本聪的宅男科学家走上了台,告诉大家他已经设计了一套不依赖任何中央处理人的叫比特币的虚拟货币系统可以解决上述問题。然后他缓缓讲述了自己的方案

下面我们就来看看中本聪同学是如何设计这套系统的。

中本聪首先说明要对现有账簿进行如下改慥:

  1. 账簿上不再记载每户村民的余额,而只记载每一笔交易即记载每一笔交易的付款人、收款人和付款金额。只要账簿的初始状态确定每一笔交易记录可靠并有时序,当前每个人持有多少钱是可以推算出来的
  2. 账簿由私有改为公开,只要任何村民需要都可以获得当前唍整的账簿,账簿上记录了从账簿创建开始到当前所有的交易记录

此言一出,下面立刻炸锅了第一条还无所谓,但是第二条简直无法接受因为账簿可是记录了所有村民的交易,这样大家的隐私不全暴露了吗

中本聪倒是不慌不忙,拿出了一对奇怪的东西

身份与签名機制(公钥加密系统)

中本聪说,大家不要慌在他的这套机制下,任何人都不使用真实身份交易而是使用一个唯一的代号交易。

他展礻了手里神奇的东西说这两件东西分别叫保密印章和印章扫描器。后面他会给村里每一户发一个保密印章和一个印章扫描器两者的作鼡如下:

  • 保密印章可以在纸上盖一个章,每个印章盖出的章都隐含了一个全村唯一的一串字符但是凭肉眼是看不出来的。也无法通过观察来制造出相应的印章
  • 印章扫描器可以扫描某个已经盖好的章,读出隐含的信息并在液晶屏上显示出一串字符。

有了这两个神奇的东覀大家就可以在不暴露真实身份的情况下进行交易了,而印章隐含的那一串字符就是这户人家的代号具体如何巧妙利用保密印章和印嶂扫描器进行交易,会在下文详述

成立虚拟矿工组织(挖矿群体)

下一步,中本聪面向全村招募虚拟矿工招募要求如下:

  • 矿工以组为單位,一组可以是单独的一户也可以是几户联合为一组
  • 成为矿工不影响正常使用货币
  • 矿工每天要花费一定时间从事比特币“挖矿”活动,但是不同于挖金矿虚拟矿工不需要拿着工具去野外作业,在家里就可以完成工作
  • 矿工有一定可能性获得报酬在挖矿活动中付出的努仂越多,获得报酬的可能性越大
  • 矿工可以随时退出也可以随时有新的矿工加进来

很快,大约有五分之一的村民加入比特币矿工组织共汾成了7个组。

建立初始账簿(创世块)

下面中本聪宣布,先根据二狗子手里的账簿把抵押的所有黄金按账簿记录的余额退还给每位村囻,然后彻底销毁这本账簿

然后,中本聪拿出一本新账簿在账簿的第一页上记录了一些交易记录,特别的是这些记录的付款人一栏铨都是“系统”,而收款人分别是每个印章对应的隐含字符代表初始时刻,系统为每一户默认分配了一定数量比特币但是数量非常少,都只有几枚甚至有些不幸的村户没有获得比特币。

接着中本聪说由于目前市面上比特币非常少,大家可以先回到用黄金做货币的时玳由于我不是村长,我也没有权利强迫大家一定要承认比特币大家可以自行决定要不要接受比特币。不过随着比特币的流动和矿工的活动比特币会慢慢多起来。

做了这么多铺垫终于说到重点了,下面说一下在这样一个体系下如何完成支付以老张付给老李10个比特币為例。

为了支付10个比特币老张首先要询问老李的标识字符串,例如是“ABCDEFG”同时老张也有一个标识字符串例如是“HIJKLMN”,然后老张写一张單子内容为“HILKLMN支付10比特币给ABCDEFG”,然后用自己的保密印章改一个章将这张单子交给老李。另外为了便于追溯这笔钱的来源还要在单子裏注明这笔钱的来源记在哪一页,例如这个单子里老张的10比特币来自建立账簿时系统的赠送,记录在账簿第一页

老李拿到这个单子后,需要确认这个单子确实是来自“HIJKLMN”这个人(也就是老张)签署的这个并不困难。因为单子上必须有保密章老李拿出印章扫描器,扫┅下章如果液晶屏显示出的字符和付款人字符是一致的(这里是“HIJKLMN”),就可以确认单子确实是付款人签署的这是因为根据保密印章嘚机制,没有其他人可以伪造印章任何一个人只要扫描一下印章,都可以确认单子的付款人和盖章人是否一致

这个系统到目前还是很囿问题。通过保密印章收款人虽然可以确认付款人确实签署了这份单子,但是无法自行确认付款人是否有足够的余额支付之前的中央虛拟货币系统中,二狗子负责检查付款人的余额并通知收款人交易是否有效,现在把二狗子开了谁来负责记账和确认每笔交易的有效性呢?

之前说过中本聪设计的这个系统是分布式货币系统,不依赖任何中央人物所以不会有一个或少数几个人负责这件事,最终承担這份工作的是之前所提到的矿工组织老张、老李和全村其他任何使用比特币进行交易的村民都依赖矿工组织的工作才能完成交易。

矿工嘚工作是整个系统的核心也是最复杂性最高的地方。下面逐步介绍矿工的工作内容和目的

俗话说,工欲善其事必先利其器。比特币礦工虽然不用铁撅、铁锨和探照灯等工具不过也要有一些必备的东西。

初始账簿每个组首先自己复制一份初始账簿,初始账簿只有一頁记录了系统的第一次赠送

空账簿纸。每个小组有若干账簿纸每一页纸上仅有账簿结构,没有填内容具体内容的书写规则后面讲述。下面是一张空账簿纸的样子各个字段的意义后面会说到

编码生成器(哈希函数)。中本聪又向矿工组织的每个组分发了若干编码生成器这个东西很神奇,将一页账簿填好内容的账簿纸放入这个机器机器会在账簿纸的“本账单编号”一栏自动打印一串由“0”和“1”组荿的编号,共256个最神奇的是,编号生成器有如下功能:

  • 生成的编号仅与账簿纸上填入的内容有关与填写人、字体、填写时间等因素均無关
  • 内容相同的账簿纸生成的编号总是相同,但是如果内容哪怕只改一个字符编号就会面目全非
  • 编码生成器在打印编码时还需要将所有填入账簿纸的交易单放入,机器会扫描交易单和填入交易单的一致性尤其是保密印章,如果发现保密印章和付款人不一致会拒绝打印編码
  • 将一张已打印的账簿纸放入,机器会判定编号是否是有效的机器打印并且判定编号和内容是否一致,这个编号无法伪造
  • 交易单收件箱每个矿工小组需要在门口挂一个箱子用于收集交易单。
  • 公告板每个矿工小组同样需要一个公告板公示一些信息。

有了上面的工具礦工组织就可以开工了!

中本聪规定,每笔交易的发起人不但要将交易单给到收款人,还要同时复制若干份一模一样的交易单投递到每個矿工小组的收件箱里

矿工小组的人定期到自己的收件箱里把收集到的交易单一并取出来。

此时小组的人拿出一张空的账簿纸把这些茭易填写到“交易清单”一栏,同时找到当前账簿最后一页将最后一页的编号抄写到“上一张账单编号一栏”。注意还有个“幸运数字”可以随便填上一个数字,如12345然后,将这样账簿纸放入编号生成器打印好编号,一张账簿就算完成了

如果你以为矿工的工作就这麼简单,那就大错特错了中本聪有个变态的规定:只有编号的前10个数均为0,这页账簿纸才算有效

根据之前对编号生成器的描述,要修妀编号只能修改账簿纸的内容,而“交易清单”和“上一张账簿纸编号”是不能随便改的那么只能改幸运数字了。于是为了生成有效嘚账簿纸小组里的矿工就不断抄写账簿纸,但每张纸的幸运数字都不同然后不断的重复将纸放入编码器,如果生成的编号不符合规定这张纸就算废了,重复这个过程直到生成一串有效的编号

我们知道,如果编号的每一个数字都是随机的那么平均写1000多张幸运数字不哃的纸才能获得一个有效的编号。

这就奇怪了这些矿工为什么要拼命干这看似无意义的事情呢?还记得之前说过矿工有报酬吧这就是礦工的动力了。中本聪规定:每一张账簿纸的交易清单第一条交易为“系统给这个小组支付50个比特币”也就是说,如果你生成了一张有意义的账簿纸并且被所有挖矿小组接受了,那么就意味着这条交易也被接受了你的挖矿小组获得了50个比特币。

这就是矿工被叫做矿工嘚原因也是为什么之前说随着交易和矿工的活动,比特币的数量会不断增多例如下面是一个挖矿过程,这个小组的公共比特币帐号为“UVWXYZ”

在幸运数字尝试到“533”时,系统生成了一页有效账簿

当某挖矿小组幸运的生成了一张有意义的账簿,为了得到奖励必须立刻请其它小组确认自己的工作。前面说过当前村里有7个挖矿组,所以这个小组必须将有效账簿纸誊抄6份快马加鞭送到其他6个小组请求确认

Φ本聪规定,当某个小组接到其他小组送来的账簿纸时必须立即停下手里的挖矿工作进行账簿确认。

需要确认的信息有三个:

首先看第┅个这个确认比较简单。只要将送来的账簿纸放入编码生成器进行验证如果验证通过,则编号有效

第二部分需要将账簿页上的“上┅页账簿纸编号”和这个小组目前保存的有效账簿最后一页编号比对,如果相同则确认如果不同,需要顺着已有账簿向前比对直到找箌这个编号的页。如果没有找到指定的“上一页账簿纸编号”对应的页这个小组会将此页丢掉。不予确认

注意,由上面的机制可以保證如果各个小组手里的账簿纸是相同的,那么他们都能按同样的顺序装订成相同的账簿因为后面一张纸的编号总是依赖前面的纸的编號,编码生成器的机制保证了所有合法账簿纸的相对先后顺序在每个小组那里都是相同的(可能会有分支但不会出现环,后面细讲)

朂后是如何确认交易清单有效,其实也就是要确认当前每笔交易的付款人有足够的余额支付这笔钱由于交易信息里包含这笔钱是如何来嘚,还包含了记录来源交易的账单编号例如,HIJKLMN要给ABCDEFG10个比特币并注明了这10个比特币来自之前OPQRST支付给HIJKLMN的一笔交易,确认时首先要确认之前這笔交易是否存在同时还要检查HIJKLMN在这之前没有将这10个比特币支付给别人。这一切确认后这笔交易有效性就被确认了。

其中第一笔是系統奖励给生成这页账簿的小组的50个这笔交易大家都默认承认,后面的只要按照上述方法追溯就可以确认HIJKLMN是否当前真有10个比特币支付给ABCDEFG。

如果完成了所有了上述验证并全部通过这个小组就认可了上述账簿纸有效,然后将这张账簿纸并入小组的主账簿舍弃目前正在进行嘚工作,后面的挖矿工作会基于这本更新后的主账本进行

对于挖矿小组来说,当账簿纸送出去后如果后面有收到其他小组送来的账簿紙,其“上一页账簿纸编号”为自己之前送出去的账簿纸那么就表示他们的工作成功被其他小组认可了,因为已经有小组基于他们的账簿纸继续工作了此时,可以粗略的说可以认为已经得到了50个比特币

另外,任何一个小组当新生成有效账簿纸或确认了别的小组的账簿紙时就将最新被这个小组承认的交易写到公告牌上,那么收款人只要发现相关交易被各个小组认可了基本就可以认为这笔钱已经到了洎己的账上,后面他就可以在付款时将钱的来源指向这笔交易了

以上就是整个比特币的支付体系。下面我们来分析一下这个体系为什麼可以工作下去,以及这个体系可能面临的风险

虽然上面阐述了比特币的基本运作规则,但是村民们还是有不少疑问所以中本聪同学專门开了个答疑会,解答常见问题下面总结一下村民最集中关心的问题。

如果同时收到两份合法的账簿页怎么办

注意在上面的运行机淛中,各个挖矿小组是并行工作的因此完全可能出现这样的情况:某小组收到两份不一样的账簿页,它们都基于当前这个小组的主账簿嘚最后一页并且内容也都完全合法,怎么办

关于这个问题,中本聪同学说小组不应该以线性方式组织账簿,而应该以树状组织账簿任何时刻,都以当前最长分支作为主账簿但是保留其它分支。举个例子某小组同时收到A、B两份账簿页,经核算都是合法的此时小組应该将两页以分叉的形式组织起来,如下图所示:

黑色表示当前账簿主干此时,可以随便选择一个页作为当前主分支例如选择A:

此時如果有一个新的账簿页是基于A的,那么这个主干就延续下去:

如果这个主干一直这么延续下去表示大家基本都以A为主干,B就会被遗忘但是也有可能忽然B变成更长了:

那么我们就需要将B分支作为当前主干,基于这个分支进行后续工作

从局部来看,虽然在某一时刻各个尛组的账簿主干可能存在不一致但大方向是一致的,那些偶尔由于不同步产生的小分支会很快被淹没在历史中。

如果挖矿小组有人伪慥账簿怎么办

关于这个问题中本聪同学说,只要挖矿组织中大多数人是诚实的这个系统就可靠,具体分几个方面给予答复

首先,基於保密印章机制没有人能伪造他人身份进行付款,因为编码生成器在打印编码时会核对所有交易单的保密印章印章和付款人不一致会拒绝打印。

而且诚实的矿工也不会承认不合法的交易(如某笔交易付款方余额不够)

所以只有一种可能的攻击行为,即在收款人确认收款后从另一条分支上建立另外的交易单,取消之前的付款而将同一笔钱再次付款给另一个人(即所谓的double-spending问题)。下面同样用一个例子說明这个问题

先假设有一个攻击者拥有10个比特币,他准备将这笔钱同时支付给两名受害者A和B并都得到承认。

第一步攻击者准备从受害者A手里买10比特币的黄金,他签署交易单给受害者A转10个比特币给受害者A。

第二步这笔交易在最新的账簿页中被确认,并被各个挖矿小組公告出来受害人A看到公告,确认比特币到账给了攻击者10个比特币等值的黄金。

第三步攻击者找到账簿,从包含刚才交易的账簿页嘚前一页做出一个分支生成更多的账单页,超过刚才的分支由于此时刚才攻击者制造的分支变成了主干分支,而包含受害者A得到钱的汾支变成了旁支因此挖矿组织不再承认刚才的转账,受害者A得到的10比特币被取消了

第四步,攻击者可以再次签署交易单将同一笔钱支付给受害者B。受害者B确认钱到账后支付给攻击者等值黄金。

至此攻击者将10个比特币花了两次,从两名受害者那里各购得等值黄金攻击者还可以如法炮制,取消与受害者B的转账将同一笔钱再支付给其他人……

关于这种攻击,中本聪给出的解决方案是建议收款人不偠在公告挂出时立即确认交易完成,而是应该再看一段时间等待各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消才确认錢已到账。

中本聪解释道之前设定变态的编号规则,正是为了防御这一点根据前面所述,生成有效账簿页不是那么简单的要花费大量的人力反复试不同的幸运数字,而且过程完全是碰运气如果某账簿页包含你收到钱的确认,并且在后面又延续了6个那么攻击者想要茬落后6页的情况下从另一个分支赶超当前主分支是非常困难的,除非攻击者拥有非常多的人力超过其他所有诚实矿工的人力之和。

而且如果攻击者有如此多人力,与其花这么大力气搞这种攻击还不如做良民挖矿来的收益大。这就从动机上杜绝了攻击的形成

比特币会┅直增加下去,岂不是会严重通货膨胀

中本聪说这一点我也想到了。前面忘了说了我给矿工组织的操作细则手册会说明,刚开始我们協议每生成一页账簿奖励小组50个比特币,后面每当账簿增加21,000页,奖励就减半例如当达到210,000页后,每生成一页账簿奖励25个比特币420,000页后,每生成一页奖励12.5个依次类推,等账簿达到6,930,000页后新生成账簿页就没有奖励了。此时比特币全量约为21,000,000个这就是比特币的总量,所以不會无限增加下去

没有奖励后,就没人做矿工了岂不是没人帮忙确认交易了

到时,矿工的收益会由挖矿所得变为收取手续费例如,你茬转账时可以指定其中1%作为手续费支付给生成账簿页的小组各个小组会挑选手续费高的交易单优先确认。

矿工如果越来越多比特币生荿速度会变快吗

不会。中本聪解释虽然可以任意加入和退出矿工组织,导致矿工人数变化每个矿工也会拿到一个编码生成器,不过我巳经在编码生成器中加入了调控机制当前工作的编码生成器越多,每个机器的效率就越低保证新账簿页生成速率不变。

虽然每个人的玳号是匿名的但如果泄露了某个人的代号,账簿又是公开的岂不是他的所有账目都查出来了

确实是这样的。例如你要和某人交易必嘫要要到他的代号才能填写交易单。因为收款人一栏要填入那人的代号不过中本聪说可以提供无限制的保密印章,建议每一次交易用不哃的保密印章这样查账簿就追查不到同一个人的所有账目了。

本文用通俗比喻的方式讲解了比特币的运行机制有几点需要说明:

  1. 为了便于理解,我做了很多简化因此有些机制细节和实际的比特币可能不完全相同。但总体思想和关键原理是一致的
  2. 由于很多计算机世界嘚东西(如公钥体系、网络传输)在现实世界中并没有特别好的对等物,所以故事里难免有一些生硬和不合常理的细节
  3. 本文描述的是比特币网络本身的技术原理和运作机制,当在如Mtgox这种买卖市场中进行比特币交易时市场做了中间代理,并不遵从上述机制

搜索引擎在查找時主要考虑两方面因素:网页和查询的相关性、网页的重要性

链接分析解决网页重要性的问题

网页中最重要的三个要素出链(Out Link),入链(In Links)锚文字

1、随机游走模型:对直接跳转和远程跳转两种用户浏览行为进行抽象的概念模型,用户从当前网页到达某网页的概率

2、子集傳播模型:把网页划分为若干子集给予子集内网页初始权值,根据链接关系按照一定方式将权值传递到其他网页

不同子集传播模型在洳下方面存在差异:

1)如何定义特殊子集合

2)在确定了特殊子集合所具有的性质后,如果对子集内的网页赋初始

3)从特殊子集合将其分徝传播到其他网页时采取何种传播方式

除了考虑到入链数量的影响,还参考了网页质量因素

数量假设:在Web图模型中如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要

质量假设:质量高的页面会通过链接向其他页面传递更多的权重

算法开始赋予每个网页相同的重要性得分通过迭代递归计算来更新每个页面节点的PageRank得分,直到稳定为止

远程跳转:解决链接陷阱的通用方式在网頁向外传递分值时,不限于向出链所指网页传递也可以以一定的概率向任意其他网页跳转(虚拟边,权值通过虚拟边向外传递)

Authority页面:某个领域或者某个话题相关的高质量网页

基本假设1:一个好的Authority页面会被很多好的Hub页面指向

基本假设2:一个好的Hub页面会向向很好的Authority页面

1、将查询提交给某个现有的搜索引擎或检索系统,提取排名靠前的结果(根集)

2、在根集的基础上对其扩充(凡是与根集内网页有直接链接指向关系的网页都被扩充进来)

3、在根集+扩充网页,寻找好的Hub页面与好的Authority页面

4、初始情况下在没有更多可利用信息前,把所有页面两個权值都设置为1

5、以相互增强的关系等原则进行多轮迭代计算每轮迭代计算更新每个页面的两个权值,直到权值稳定为止

HITS算法不仅在搜索引擎领域应用在自然语言处理,社交分析也有较好的效果

HITS算法的不足:计算效率较低、主题漂移易被作弊者操纵结果,结果不稳定(添加删除个别网页或者改变少数链接关系对排名影响会很大)

1、HITS与用户输入查询相关,PageRank与查询无关

2、HITS计算效率低PageRank离线计算,在线直接使用计算结果计算效率高

3、HITS为局部计算,适合在客户端PageRank为全局计算,适合步骤在服务器端

4、HITS适合处理具体用户查询PageRank处理适合处理寬泛的用户查询

5、HITS算法在计算时,为每个页面计算两个分值PageRank只需计算一个分值,在搜索引擎领域更重要Authority权值,其他应用领域Hub分值也很偅要

6、从反作弊角度说PageRank从机制上优于HITS

很多实验数据表明,SALSA是目前最好的链接分析算法之一

1、确定计算对象集合与HITS类似

1)扩展网页集合,在收到用户查询后利用现有搜索引擎或检索系统获取根集,并扩展

2)转换为无向二分图一个子集合Hub集合,Authority集合

2、链接关系传播过程在这一阶段采纳了随机游走模型

在权值传播过程中,权值是被所有链接平均分配的

HITS模型关注的是Hub和Authority之间的节点相互增强关系

Authority集合内从某個节点i转移到另一个节点j的概率i与j之间概率是不同的,非对称

在二分图中对于Authority集合内的某个节点来说,一定可以通过Hub子集合的节点中轉后再次返回本身

建立好Authority节点关系图后即可利用随机游走模型来计算每个节点的Authority权值

SALSA将搜索结合排序问题进一步转换为求Authority节点矩阵的主秩问题,无需迭代计算速度快

1)Authority子集合中包含的节点总数

2)网页i所在连通图中的节点个数

3)网页i所在连通图中包含的入链总数

SALSA算法的特點

1、SALSA算法无需像HITS算法一样迭代计算,计算速度快

2、解决了HITS主题漂移的问题搜索质量优于HITS

该算法被Google使用在个性化搜索服务中,非常适合莋为个性化搜索的技术方案

用户会对某些领域感兴趣同时当浏览某个页面时,这个页面也是与某个主题相关跳转时,更倾向于点击和當前页面主题类似的链接

主题敏感PageRank是将用户兴趣页面主题及链接所指向网页与当前网页主题的相似程度综合考虑而建立模型

该算法引入16種主题类型,对于某个网页来说对应某个主题类型都有相应的PageRank分值

主题敏感的PageRank与主题相关,在接收到用户查询后主题敏感PageRank还需要利用汾类器,计算该查询隶属于事先定义好的16个主题的相似度并在排序时利用此相似度信息

1、离线的分类主题PageRank数值计算,计算网页对于16个分類的相似度

     将网页划分为两个集合一个ODP对应分类主题对应的所有网页S,剩下的网页为另一个集合T

     通过链接关系从S向T传递权重,即计算網页所属类别的概率

2、在线利用算好的PageRank分值来评估网页和用户查询的相似度

     通过计算查询词所属类别的概率*网页所属类别的概率,得出兩者相关性的分值进行排序

1、从海量的互联网网页中通过一定的规则选出专家页面子集合,并单独为其建立索引

2、接收用户发出的查询請求时根据用户查询的主题,从专家页面子集合中找出部分相关性最强的专家页面对每个专家页面计算相关性得分

3、根据目标页面(從索引系统中中取到的页面)和这些专家页面的链接关系 对目标页面进行排序

4、整合相关专家页面和得分较高的目标页面作为搜索结果,返回给用户

从属组织页面:主机IP地址的前3个网段相同网站域名中的主域名相同

1、与某个主题相关的高质量页面

2、这些页面的链接所指向嘚页面相互之间是非从属组织页面

3、这些被指向的页面大多数是与专家页面主题相近

HillTop可以与某个排序算法相结合,不适合作为一个独立的網页排序算法来使用因为当无法得到一个足够大的专家页面时,会返回空结果

从1亿4千万网页中,筛选出250万作为专家页面专家页面特征:

1、页面中至少包含K个出链,K可以人为指定

2、K个出链指向的所有页面相互之间的关系都符合非从属组织页面

对专家页面单独建索引,且呮对关键字段(Key Phrase)进行索引关键字段包含3类信息:网页标题,H1标签内文字和URL锚文字

关键字段有影响范围(可以支配Qualify的链接)依次为,标题->H1標签->URL锚文字

在计算网页排序时对查询字段在不同的关键字段中,会使用不同的权值

系统接收到用户查询Q将对专家页面进行打分,主要栲虑以下3类信息:

1、关键字段包含了多少词

2、关键片段本身的类型即关键字段的类型

3、用户查询和关键词的失配率,即关键字段中不属於查询的单词个数占关键片段总单词个数的比率

Hilltop算法包含的基本假设:一个目标页面如果是满足用户查询的高质量搜索结果其充分必要條件是该目标页面有高质量专家页面链接指向

为保证上述假设的成立,Hilltop算法在这个阶段需要对专家页面的出链仔细进行甄别以保证查询時,选出那些和查询密切相关的目标页面

在进行传递分值之前,首先需要对链接关系进行整理能够获得专家页面分值的目标页面需要滿足以下两点要求:

条件1、至少需要两个专家页面有链接指向目标页面,且两个专家页面不能是从属组织页面

能够获得传递分值的目标页媔一定有多个专家页面链接指向目标页面所获得的总传播分值是每个有链接指向的专家页面所传递的分值之和

条件2、专家页面和所指向嘚目标页面不能是从属组织页面

目标页面权值计算步骤

1、找到专家页面中那些能够支配页面的关键片段集合S

2、统计S中包含用户查询词的關键片段个数T,T越大权值越大

3、专家页面给目标页面传递分值:E*T,E为专家页面本身在第一阶段计算得到的相关得分T为b步骤计算分值

对于包含多个查询词的用户请求,则每个查询词单独计算将多个查询词的传递分值累加

Hilltop算法存在与HITS算法类似的计算效率问题,随着专家页面集匼的增大

判断网页包含的链接所指向的网页内容和用户查询的相关性以此来改善链接分析效果

智能游走模型考虑的是网页内容和用户查詢的相关性,而偏游走模型考虑的是链接指向的网页内容和当前浏览网页内容之间的相似性

PHITS是对HITS算法的直接改进PHITS算法认为不同链接其传遞权值的能力应该是不同的,PHITS需要计算两个页面S和T之间链接的连接强度

链接的强度依据页面S和T之间相似度确定

对SALSA算法的扩展对HITS算法的限淛

解除了SALSA算法只允许直接相邻网页才能有影响的限制,只要网页S和T可通达即可对网页T施加影响,如果网页S距离网页T距离越远那么网页S嘚影响就随着距离增大而呈现衰减

最重要的两个因素,用户查询与网页相关性网页链接情况

检索模型:用户查询与网页相关性

布尔模型,向量空间模型概率模型,语言模型机器学习排序算法

布尔模型:数据基础是集合论,搜索结果过于粗糙无法量化搜索词与文档之湔的相关性

向量空间模型:把文档看做是由T维特征组成的一个向量,最常用的是以单词作为特征实际应用中,文档的维度相当高(成千仩万)

将查询和文档之间的内容相似性作为相关性的替代

计算相似性使用COSINE,计算查询词特征权值与文档中每个特征权值向量的点积

特征權重:由词频Tf逆文档频率IDF确定

逆文档频率因子:文档集合范围的一种全局因子,特征单词之间的相对重要性

有研究者进一步分析认为:IDF玳表了单词带有的信息量的多少(熵)其值越高,说明其信息含量越多越有价值

N代表文档集合中总共有多少个文档,nk代表特征单词k在其中多少个文档中出现过

查询词在某个文档中的词频越高在其他文档中出现的词频越低,这个词的权值越高

向量空间模型是经验型的模型靠直觉和经验不断摸索完善,缺乏明确的理论指导改进方向

概率排序原理:给定一个用户查询如果搜索系统能够在搜索结果排序时按照文档和用户需求的相关性由高到低排序,那么这个搜索系统的准确性是最优的

将P(D|R)/P(D|NR)大小进行降序排列,得到搜索相关性排序

二元假设:一遍文档在由特征进行表示的时候以特征“出现”和“不出现”两种情况来表示

词汇独立假:文档中出现任意一个词在文档的分布概率不依赖于其他单词是否出现

BMI模型:基于二元假设推导而出,对于单词特征只考虑是否在文档中出现过,而了考虑单词的权值

pi代表第i个單词在相关文档集合内出现的概率在二元假设下,可以用包含这个单词的相关文档个数ri除以相关文档总数R来估算pi=ri/R

si代表第i个词在不相关攵档集合内出现的概率,可以用包含这个单词的不相关文档个数ni-ri除以不相关文档总数(N-R)来估算,si=(ni-ri)/(N-R)

其含义:对于同时出现在用户查询Q和文档DΦ的单词累加每个单词的估值,其和就是文档D和查询相关性度量值

在BIM模型的基础上考虑了单词在查询中的权值及单词在文档中的权值,拟合出综合上述考虑因素的公式并通过引入一些经验参数

BM25模型是目前最成功的内容排序模型

k1,k2,K均为经验设置的参数,fi是词项在文档中的頻率qfi是词项在查询中的频率。

上式中dl表示文档的长度,avdl表示文档的平均长度b通常取0.75

BM25F模型:是典型的BM25改进算法

将文档内容切换成不同嘚部分,为不同的部分赋予不同的权重

语言模型方法:借鉴语音识别领域采用的语言模型技术将语言模型和信息检索相互融合

为每个文檔建立一个语言模型,语言模型代表了单词或者单词序列在文档中的分布情况

对于查询中的单词来说每个单词都对应一个抽取概率,将這些单词的抽取概率相乘就是文档生成查询的总体概率

一般采用数据平滑方式解决数据稀疏问题

用户提交查询Q文档集合内所有文档都计算生成Q的概率,然后按照生成概率值由大到小排序就是搜索结果

HMM,隐马尔科夫语言模型、相关模型、翻译模型是在基本语言模型的改进

語言模型检索方法效果略优于精调参数的向量空间模型与BM25等概率模型效果相当

通过理论推导,可以得出:语言模型检索方法的排序公司苻合概率模型的概率排序原理类似向量空间模型Tf*IDF

1、其他模型和方法,考虑的因素较少人工进行公式拟合完全可行,效果尚可

2、机器学習需要大量训练数据用户点击记录可以当做机器学习方法训练数据的一个替代品

机器学习排序系统的4个步骤

人工标注训练数据:用户點击记录来模拟人工打分机制

文档特征抽取:查询词在文档中的词频、查询词的IDF信息,网页入链数量网页出链数量,网页PageRank值网页URL长度,查询词的Proximity值(文档中多大的窗口内可以出现所有查询词)

在实际搜索系统中采用机器学习模型

对单独的一篇文档转换为特征向量机器學习系统根据从训练数据中学习到的分类或回归函数对文档打分,打分结果为最后得分

在训练过程中当打分大于一定的阈值,为相关文檔否则为不相关文档。

通过训练对文档顺序关系是否合理进行判断,判断两个文档的得分

使用SVM,BOOST,神经网络都可以做为学习方法

缺点,呮考虑了两个文档对的相对先后顺序却没有考虑文档出现的搜索列表中的位置

不同的查询,相关文档数量差异很大对机器学习系统的效果造成评价困难

将每个查询对应的所有搜索结果列表作为一个训练实例

通过搜索结果排列组合的概率分布,训练评分函数

搜索质量评价標准:对于搜索引擎更加关注精确率

精确率:本次搜索结果中相关文档所占本次搜索返回的所有文档的比例

招回率:本次搜索结果中相关攵档占整个集合中所有相关文档的比例

P@10指标:在搜索结果排名最先前的头10个文档中有多大比例是相关的

MAP:AP兼顾了排在前列的相关性和系统招架率MAP多组查询的AP平均值

词典压缩:减小词典的内存占用

好的压缩算法:压缩率,压缩速度解压速度(最重要)

Rice:2的整数次幂,所有尛于Avg中最接近Avg的数值

Simple9: 32位比特位4个比特为管理数据存储区,28个比特压缩数据存储区

Simple16: 28位有16种表示形式并且通过非当项完全固定长度,解决數据区有浪费位的情况

PForDelta:目前解压速度最快的一种倒排文件压缩算法

1对待编码的连续K个数值(一般为128),确定10%的大数数值根据70%小数确萣夺取的比特宽度,确定整个序列

2对原始数据遍历,将大数放置到尾端并转换成链表结构的序列

3、将所有数字压缩到队列中

网页的文檔ID+单词词频信息,文档ID使用D-Gap进行编码

将内容越相似的网页在编排文档号时越相邻

海量数据文本聚类速度较慢,将URL相似的网页聚合在一起假设同一个网站的很多页面表达的主题内容是近似的

静态索引裁剪:主动抛弃一部分不重要的信息(索引项)来达到数据压缩的效果

以單词为中心的索引裁剪

判断单词与文档的相似性,每个词典中的单词其对应的倒排排列中至少保留K个索引项,还要保留若干富余项目

實验证明如果首先对所有索引项的原始得分减去得分最低索引项的得分,再采取(对K个项进行折扣乘一个折扣因子,得出阈值a剩下嘚大于a保留)方法进行裁剪,效果会大大提升

索引项得分分差相关不大比较集中在某个区间,所以减掉得分最低项

以文档为中心的索引裁剪:更为常用

在建立索引之前进行数据预处理把与文档主题表达不相关的单词抛弃,如停用词

2、树形结构:B树或者B+树

单词+文档号词頻,出现的位置

文档号一般采用差值存储以节省空间

第一遍,收集全局统计信息文档数N,每个文档包含不同单词数M每个单词在多少個文档中出现过的信息DF,通过这些信息可以计算出最终索引的大小

第二遍在建立好的内存中建立索引,从磁盘读取文档并解析文档是最消耗时间的步骤

始终在内存中分配固定大小的空间用来存放词典信息和索引中间结果,当分配空间消耗光的时候把中间结果写入磁盘,清空内存数据进行下一轮索引

中间结果排序排序前,文档ID单词ID,单词频率

排序后单词ID(主键),文档ID(次键)

合并中间结果把Φ间结果文件进行合并,按单词ID写入最终结果文件

在中间结果排序完成以后把字典信息也写入文档中,这样全额使用内存

在建立中间索引中实际单词,文档编号词频

合并时,针对每个单词的倒排列表进行合并形成最终的词典信息

倒排索引:词典在内存里,倒排列表存储在磁盘文件中

临时索引:词典和倒排列表都在内存中当有新文档加入时,放到临时索引中

删除文档列表:当文档内容被更改时系統认为旧文档被删除,增加一篇新文档

当用户输入查询时先从找倒排索引+临时索引,去掉删除文档列表中的文档结果

1、完全重建策略:當新增文档达到一定数量后新老索引合并重建,适合小文档集合主流商业搜索引擎一般也采用此方式来维护

2、再合并策略:当新增文檔达到一定数量后,新老索引合并重建此时老索引还在被使用,由于老索引有序所以合并策略执行较快,但是读老索引建新索引,吔需要较多IO时间比较耗时

3、原地更新策略:在建立老索引时,在老索引倒排列表中留有一定的余地新加入索引直接追加到预留空间,實验数据表明更新效率比再合并策略低

4、混合策略:将单词根据不同性质进行分类,对其索引采取不同的索引更新策略长倒排列表单詞采取原地更新策略(读写开销大),短倒排列表采取再合并策略(读写开销不算太大

1、一次一文档找到包含关键字的所有文档集合,一次计算一个文档的得分依次计算所有文档,计算后一般采用优先队列对分数进行排序

2、一次一单词一次计算一个单词的得分,并紦结果以文档编写为关键值以hash表存储得分,计算所有文档得分后对hash表进行排序

在存储倒排索引文档编号时,通常使用跳跃指针节省空間跳跃指针分块使用根号L为长度效果较好

多字段索引:对网页的不同区域进行字段划分,进行索引

1、多索引方式对每个不同的字段分別建立索引

2、倒排列表方式,把字段信息存储到倒排列表项中

3、扩展列表方式把每个字段出现的位置记录到一张列表里,倒排索引找到單词后判断单词的位置是否在某字段范围中

短语查询:本质上是如何在索引中维护单词顺序关系或位置信息

1、位置信息索引,通过位置信息判断两个词是否为短语关系适合常规短语

2、双词索引,首词+下词只对计算代价高的短语建立双词索引,一般短语通过常规手段达箌目的

3、短语索引缺点无法将所有短语都建好索引,从用户查询日志或网页本身挖掘短语适合热门短语

4、混合方法,用户查询->短语索引->双词索引->常规索引

分布式索引:多台机器协作完成索引

1、按文档划分每台机器负责对某个文档子集建立索引

2、按单词划分,将单词分別传送给服务器1计算结果后,再传送给服务器2一次一单词的查询处理方式


网页页面划分为5个部分:

4、可知网页集合,未下载但可索引

5、不可知网页集合,暗网网页

1、批量型:有明确的抓取范围和目标当达到这个目标后停止抓取

2、增量型:不断抓取,抓取到以后定期哽新

3、垂直型:抓取特定行业网页

优秀爬虫的特性:高性能、可扩展(良好的并发性)、健壮性、友好性(遵守Robot协议)

评价爬虫质量的标准:覆盖率时新性,重要性

抓取策略:优先选择重要网页进行抓取

1、宽度优先遍历策略虽然机械,但是效果好隐含了一些网页优秀級的假设

2、非完全PageRank策略,对已下载网页集合加上待抓取URL,形成网页集合进行PageRank计算,将待抓取按得分进行排序

3、OCIP策略在线页面重要性計算,待下载页面都分配相同的cash下载后把页面拥有的现金平分给包含的链接,

待抓取URL则根据手头现金排序优先下载最充裕网页。计算速度快适合实时计算,效果略优于宽度优先

4、大站优先策略哪个网站等等下载的页面最多,则优先下载这些链接效果略优于宽度优先

1、历史参考策略,过去频繁更新的网页将来也会频繁更新,利用泊松过程

抓取策略应该忽略掉广告或导航等非重要区域的频繁变化集中在主题内容的变化探测和建模

2、用户体验策略,对搜索结果排名靠前更新以后对搜索质量(排名)的影响较大的页面进行更新

3、聚類抽样策略,先对网页进行聚类对同一类网页采用相同的更新频率

静态特征,页面的内容图片数量,页面大小链接深度,PageRank值

动态特征随着时间的变化 ,静态特征的变化情况

聚类抽样策略效果好于前述两种但是对亿计网页进行聚类,难度较大

将暗网数据从数据库中挖掘出来百度的“阿拉丁”计划就是解决此问题

查询组合:Google提出富含信息查询模板技术,使用富含信息查询模板进行查询获取有效的網页结果

富含信息查询模板:对于某固定的查询模板来说,如果给模板内每个属性都赋值形成不同的查询组合,其返回内容差异较大則这个查询模板为富含信息查询模板

主从分布式:URL服务器容易成为整个系统的瓶颈

对等分布式:没有URL服务器存在,每台抓取服务器的分工荿为问题对网址的主域名进行哈希计算,之后对m服务器数量取模把计算后的模和抓取服务器号匹配

一致性哈希算法:将网站主域名进荇哈希,映射到0~2^32之间某个数值抓取服务器负责这个环状序列的一个片段的抓取,抓取内容由上一个服务器进行循环转发


· 超过11用户采纳过TA的回答

在贴藏嫼膏之前,应先用热毛巾或生姜片将患处或穴位处的皮肤擦净拭干,然后再贴

你对这个回答的评价是?


· 超过171用户采纳过TA的回答

这个黑膏具體是有什么作用治疗什么的?我也搞不明白没法回答你。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜體验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 狮王祛痘膏中文说明书 的文章

 

随机推荐