《《雨林算法框架》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《雨林算法框架》PPT课件.ppt(22页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、n nRainForest 雨林算法框架 大数据集决策树快速生成框架报告人:李岱决策树简介n n略Sprint算法的缺点n n为每个node都保存属性表,这个表的大小有可能是数据库中原始数据大小的好几倍。n n维护每个node属性表的hash表的开销很大(该表的大小与该node所具有的纪录成正比)。雨林算法框架综述 过去的研究提出了多种决策树算法,但是到目前为止过去的研究提出了多种决策树算法,但是到目前为止并没有一种算法在任何数据集合下生成决策树的质量并没有一种算法在任何数据集合下生成决策树的质量方面超过所有其他的算法方面超过所有其他的算法 雨林算法框架关注于提高决策树算法的伸缩性,该框雨林算
2、法框架关注于提高决策树算法的伸缩性,该框架可运用于大多数决策树算法架可运用于大多数决策树算法(例如例如SprintSprint和和SLIQ)SLIQ),使,使算法获得的结果与将全部的数据放置于内存所得到的算法获得的结果与将全部的数据放置于内存所得到的结果一致,但是在运行时可以使用较少的内存。而在结果一致,但是在运行时可以使用较少的内存。而在内存一定的情况下,也可以更好的满足算法的需求内存一定的情况下,也可以更好的满足算法的需求。生成的决策树的质量取决于具体的决策树算法,于本生成的决策树的质量取决于具体的决策树算法,于本框架无关。框架无关。雨林算法框架n n数据结构:数据结构:AVC-set:A
3、VC-set:节点节点n n包含的所有纪录在某个属性上包含的所有纪录在某个属性上的投影,其中该的投影,其中该AVC-setAVC-set包括了属性的不同包括了属性的不同值在每个类别上的计数。值在每个类别上的计数。AVC-group:AVC-group:一个节点一个节点n n上所有的上所有的AVC-setAVC-set的集的集合合 AVC-setAVC-set的所占内存的大小正比于对应属性的所占内存的大小正比于对应属性的不同值个数,的不同值个数,AVC-groupAVC-group并不是数据库信并不是数据库信息的简单的压缩,它只是提供了建立决策树息的简单的压缩,它只是提供了建立决策树需要的信息,
4、需要的信息,AVC-group AVC-group所占用的内存空间所占用的内存空间远远小于数据库所实际占用的空间。远远小于数据库所实际占用的空间。设计方案:AVC_setAVC_set /存储属性的各个值存储属性的各个值 DistinctValue DistinctValue /存储属性各个值在某个类上对应的计数存储属性各个值在某个类上对应的计数 DistinctValueCountForClassA DistinctValueCountForClassA DistinctValueCountForClassB DistinctValueCountForClassB AVC_groupAVC_
5、group /节点节点n n中的每个属性的中的每个属性的avc_setavc_set AVC_set AVC_set 雨林算法框架n n自顶向下决策树算法自顶向下决策树算法BuildTree(Node m,datapatition D,algorithm decisionTree)BuildTree(Node m,datapatition D,algorithm decisionTree)1)1)对对D D使用决策树算法使用决策树算法decisionTreedecisionTree得到分裂指标得到分裂指标crit(n)crit(n)2)2)令令k k为节点为节点n n的子节点个数的子节点个数3
6、)3)if(k0)if(k0)4)4)建立建立n n的的k k个子节点个子节点c1,ckc1,ck5)5)使用最佳分割将使用最佳分割将D D分裂为分裂为D1,DkD1,Dk6)6)for(i=1;i=k;i+)for(i=1;i=k;i+)7)7)BuildTree(ci,Di)BuildTree(ci,Di)8)8)endfor endfor9)9)endifendifRainForest RainForest 算法框架重新定义的部分:算法框架重新定义的部分:1a)for 1a)for 每一个属性的谓词每一个属性的谓词p,p,寻找最佳的分割寻找最佳的分割1b)decisionTree.fin
7、d_best_partitioning(AVC-set of p)1b)decisionTree.find_best_partitioning(AVC-set of p)1c)endfor1c)endfor2a)k=decisionTree.decide_splitting_criterion();/2a)k=decisionTree.decide_splitting_criterion();/决定最终的分割决定最终的分割算法分析n n对于对于(1a)-(1c)(1a)-(1c)所需要的内存为该谓词所需要的内存为该谓词p p所有的所有的avc-setavc-set中间占有的最大内存。中间占有的
8、最大内存。n n在在(2a)(2a)中,使用的输入是由中,使用的输入是由(1a)-(1c)(1a)-(1c)所计算所计算出来的结果,这里所占用的内存时很小的出来的结果,这里所占用的内存时很小的vv针对上述情况,我们假定现实运行的情况下,针对上述情况,我们假定现实运行的情况下,一个节点的整个一个节点的整个avc-groupavc-group都可以放在内存中,都可以放在内存中,或者至少一个节点的每一个独立的谓词的或者至少一个节点的每一个独立的谓词的avc-avc-setset可以放在内存中。可以放在内存中。雨林算法的常规过程n n建立节点的建立节点的AVC-groupAVC-group(通过读取整
9、个原始数据库或者某个分支的数据通过读取整个原始数据库或者某个分支的数据库表或文件库表或文件)n n选择分裂属性和分裂标准:取决于使用雨林算选择分裂属性和分裂标准:取决于使用雨林算法框架的具体算法,通过逐一检查法框架的具体算法,通过逐一检查AVC-setAVC-set来来选择。选择。n n将数据分解到各个子节点:必须读取整个数据将数据分解到各个子节点:必须读取整个数据集集(数据库或文件数据库或文件),将各条数据分解到各个子,将各条数据分解到各个子节点中,此时如果有足够的内存,我们将建立节点中,此时如果有足够的内存,我们将建立一个或多个子节点的一个或多个子节点的AVC-groupAVC-group
10、算法综述n n算法RF-Write,RF-Read,RF-Hybrid适用于整个根节点的AVC-group都可以放置到内存中的情况,RF-Vertical用于根节点(即一个节点)的AVC-group不能够存放到内存中的情况。n n本文假定任何一个属性的AVC-set都可以 放在内存中。算法RF-Writen n检索数据库,建立根节点的检索数据库,建立根节点的AVC-groupAVC-groupn n调用某个决策树算法以调用某个决策树算法以AVC-groupAVC-group为参数选择分裂标准,为参数选择分裂标准,建立根节点的建立根节点的k k个子节点个子节点n n检索数据库检索数据库(或文件或
11、文件),将每一条纪录,将每一条纪录t t分配到各个分支分配到各个分支当中(纪录于数据库或文件)当中(纪录于数据库或文件)n n将该算法递归的应用于每一个分支将该算法递归的应用于每一个分支vv注:对于决策树的每一层,算法读取数据库两次,并注:对于决策树的每一层,算法读取数据库两次,并写数据库一次。写数据库一次。算法RF-Readn n检索数据库,建立根节点的检索数据库,建立根节点的AVC-groupAVC-groupn n调用决策树算法以调用决策树算法以AVC-groupAVC-group为参数选择分裂标准,建为参数选择分裂标准,建立根节点的立根节点的k k个子节点个子节点n n如果此时具有足够
12、的内存容纳新的子节点的如果此时具有足够的内存容纳新的子节点的AVC-AVC-group,group,则此时对数据库进行一次检索,根据分裂标准将则此时对数据库进行一次检索,根据分裂标准将子节点的子节点的AVC-groupAVC-group计算出来,并放置于内存中,并调计算出来,并放置于内存中,并调用决策树算法计算分裂标准。用决策树算法计算分裂标准。n n使用相同的方法处理树的每一层,只要有足够的内存使用相同的方法处理树的每一层,只要有足够的内存容纳新节点的容纳新节点的AVC-groupAVC-group,就将所有子节点的,就将所有子节点的AVC-AVC-groupgroup计算出来。计算出来。算
13、法RF-Read(续)n n假设在某一层所有新节点的假设在某一层所有新节点的AVC-groupAVC-group所占内存的大小所占内存的大小超过了可用内存,此时我们可将新节点集分成多个子超过了可用内存,此时我们可将新节点集分成多个子集,其中每个子集都可以放入内存之中。每个子集被集,其中每个子集都可以放入内存之中。每个子集被独立计算,每次计算时需要读取一次数据库从而建立独立计算,每次计算时需要读取一次数据库从而建立该子集的该子集的AVC-groupAVC-group。n n随着层数的增加,通常每层节点的随着层数的增加,通常每层节点的AVC-groupAVC-group所占用的所占用的内存也会增加
14、。从而每层的节点子集个数也会相应增内存也会增加。从而每层的节点子集个数也会相应增加,所以随着树的层数增加,每层所需要访问数据库加,所以随着树的层数增加,每层所需要访问数据库的次数也是增加的。所以单独运行该算法是低效的。的次数也是增加的。所以单独运行该算法是低效的。混合算法RF-Hybridn n大致流程:开始使用大致流程:开始使用RF-ReadRF-Read的算法,直到到达某层的算法,直到到达某层L L所有的新节所有的新节点点AVC-groupAVC-group总和不适合在内存中,此时切换到总和不适合在内存中,此时切换到RF-Write:RF-Write:建立建立mm个分支,并检索个分支,并检
15、索mm个分支的个分支的database D,database D,递归应用于每个节点,直到递归应用于每个节点,直到算法完成。该算法比算法完成。该算法比RF-WriteRF-Write效率高,而且比效率高,而且比RF-ReadRF-Read使用更少的使用更少的数据库检索次数。数据库检索次数。n n算法改进:在使用算法改进:在使用RF-writeRF-write时,此时系统中可能还有一部分内存时,此时系统中可能还有一部分内存可以使用。为了尽量使用可用的内存,选择一个可以使用。为了尽量使用可用的内存,选择一个N N的子集的子集M,M,将所将所有有MM中的节点的中的节点的AVC-groupAVC-gr
16、oup计算出来并存放到内存中,对于该子集计算出来并存放到内存中,对于该子集mm中的每一个节点,节省了写其分支的以及扫描该分支建立中的每一个节点,节省了写其分支的以及扫描该分支建立AVC-AVC-groupgroup所需要的开销。所需要的开销。uu选择子集的过程:取决于可用内存的大小和每个节点的选择子集的过程:取决于可用内存的大小和每个节点的AVC-AVC-groupgroup的大小。这是一个背包问题的大小。这是一个背包问题(NP(NP问题问题)。在本算法中获得。在本算法中获得近似最大受益,从而提高算法的效率。近似最大受益,从而提高算法的效率。算法RF-Verticalqq用于根节点用于根节点(
17、或者某一个节点或者某一个节点)的的AVC_groupAVC_group不能够存放到内存,不能够存放到内存,但是每一个但是每一个AVC-setAVC-set可以放在内存中的情况。可以放在内存中的情况。n n将属性值分为两个部分:将属性值分为两个部分:uu1.Plarge=a1.Plarge=a1 1,.,a,.,av v,任何一个属性的任何一个属性的AVC-setAVC-set可以可以被放入内存中,但是其中的任意两个属性的被放入内存中,但是其中的任意两个属性的AVC-setAVC-set不能被同时放入内存中。不能被同时放入内存中。uu2.Psmall=a2.Psmall=av+1v+1,.,a,
18、.,amm n n处理策略:处理策略:uu对于对于PsmallPsmall按照普通的方法进行处理,按照普通的方法进行处理,uu对于对于PlargePlarge建立一个临时文件建立一个临时文件Zn,Zn,其中包含有纪录在属性其中包含有纪录在属性a1,.,ava1,.,av的投影信息和类标记,对该临时文件进行的投影信息和类标记,对该临时文件进行v v次遍历,每次遍历,每次都检查一次最优分裂,当次都检查一次最优分裂,当v v次遍历进行完后,就选出了最佳次遍历进行完后,就选出了最佳分裂方式,此时调用分裂函数,按照最佳分裂标准分裂该节分裂方式,此时调用分裂函数,按照最佳分裂标准分裂该节点。点。估算Avc
19、-Group的大小n n虽然节点的父节点包含的记录个数要远大于该节点包含的记录个数,但是算法采用保守的估计方法,认为子节点的AVC-group的大小和它的父节点相同。(在应用中证明效果较好)n n与与sprintsprint算法的比较算法的比较vv与与sprintsprint算法的比较算法的比较:(产生较大决策树时的情形产生较大决策树时的情形产生较大决策树时的情形产生较大决策树时的情形)n n排序执行效率比较:排序对象不同n n分布执行效率比较:I/O执行次数不同结论n n本算法框架主要是为了提高程序的可伸缩性,其主要思想在于观察到各种已有的决策树算法分裂节点的标准只是依赖每个节点的AVC-g
20、roup,它通常远小于原始数据库的大小。使用AVC-group可以大大提高算法的可伸缩性。VnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z
21、1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOg
22、RjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(
23、y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbN
24、eQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+
25、A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdP
26、hSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v
27、)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOg
28、RjVmYp!t&w)z1C4G7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(
29、y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&1C4G7JaMePhTkWnZr$u*x+A2E5H8KcNfQi
30、UlXp#s%v)y0B3F6IaLdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C3F6IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-
31、A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s-z1D4G8JbMeQhT
32、kWoZr%u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq$t*w-A1D4G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B3E6H9LcOfRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjUmYp!t&w)z1C4F7JaMePhSkWnZq$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z
33、1C4G7JbMePhTkWnZr$u*x+A2E5H8KcNfQiUlXp#s%v)y0B3F6IaLdOgSjVmYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUmXp#s&v)y0C3F7IaLdPgSjVnYq!t*w-A1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkVnYq$t*x-A1D5G8JbNeQiTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&1D4G8JbMeQhTlWoZr%u(x+B2E6H9KcOfRiUmXp!s&v)z0C3F7IaMdPgSkV
34、nYq$t*x-A1D5G8JbNeQhTlWo#r%u(y+B2E6H9LcOfRjUmXp!s&w)z0C4F7IaMdPhSkVnZq$t*x-A2D5G8KbNeQiTlXo#r%v(y+B3E6I9LcOgRjUmYp!s&w)z1C4F7JaMdPhSkWnZq$u*x-A2D5H8KbNfQiTlXo#s%v(y0B3E6I9LdOgRjVmYp!t&w-z1C4G7JaMePhTkWnZr$u*x+A2D5H8KcNfQiUlXo#s%v)y0B3F6I9LdOgSjVmYq!t&w-z1D4G7JbMePhTkWoZr$u(x+A2E5H9KcNfRiUlXp#s&v)y0C
35、3F6IaLdPgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWo#r%u(y3F6IaLdOgSjVnYq!t*w-z1D4G8JbMeQhTkWoZr%u(x+B2E5H9KcOfRiUmXp#s&v)z0C3F7IaLdPgSkVnYq$t*w-A1D5G8JbNeQhTlWoZr%u(y+B2E6H9KcOfRjUmXp!s&v)z0C4F7IaMdPgSkVnZq$t*x-A1D5G8KbNeQiTlWo#r%v(y+B3E6H9LcOgRjUmYp!s&w)z0C4F7JaMdPhSkVnZq$u*x-A2D5G8KbNfQiTlXo#r%v(y0B3E6I9LcOgRjVmYp!t&w)z1C4G7JaMePhSkWnZr$u*x+A2D5H8KbNfQiUlXo#s%v(y0B3F6I9LdOgRjVmYq!t&w-z1C4G7JbMePhTkWnZr$u(x+A2E5H8KcNfRiUlXp#s%v)y0C3F6IaLdOgSjVnYq!t*w-z1D4G7JbMeQhTkWoZr$u(x+B2E5H9KcNfRiUm
限制150内