好,下面我们再谈一下 c 家家里面的性能相关的特性。这时间有非常多啊,像内联啊,移动雨衣啊,纸雨衣啊,容器啊,模板等等等等,这些都是跟性能相关的。 c 家家的特性。 呃,有些大家应该已经很熟了,今天我就挑一个大家可能相对来讲不那么熟的东西,稍微聊一聊 仕途类型。仕途类型呢,是说我某一个对象,他不拥有指向的资源。 呃,他一般来讲只是个指针加长度这样一个轻量的东西,但是他用起来比较方便,比指针加长度非常方便的多得多。因为正常来讲,我们利用 c 家家里面的一些构造啊,和影视转化啊,可以很方便的进行这样的调用啊,不需要去手工去做这个东西。同时我们可以把 接口同一化处理,只要你保证那个底层的数据一直存在,那我们上面的话,使用底层的数据的时候,就仅仅是利用像指针加长度这样一个比较轻量级的东西就能访问。 然后这样一个仕途类型呢,是欧一的,所以你做船餐的时候呢,拷贝这个或者新构造这样一个对象都比较方便。我们常见的仕途类型有 string view, 这是细节加幺七里有的。 然后呢,有 spa, 二零里面会有 spa, 或者你等不到等不止二零的话,只要你是 c 加加幺四以上版本的话,可以用 gsl 的 spa。 然后到了二零,我们在 ranges 下面还有好多的仕途,这些仕途用起来都非常方便,而且性能还非常非常的高。这就是 c 家家提供的这种抽象的一种方式, 来帮你解决一些新的问题。优化选项也是另外一个跟性能关系很大的东西。像 gcc 下面有一大堆的优化选项,一共大概细细分的话有一百多个。呃,这个我就不一一细谈了,我们下面看一个很具体的例子啊。 这个例子里面呢,我有三组,三个测试。一组测试呢是 salt 加上一个函数对象,我用的是 less, 然后呢是 sot 加上一个普通的函数,就是你写一个函数,这个函数里做的事情就是比较两个东西的大小,然后我利用这个函数指针去传给 sot 来进行排序。 然后还有一个就是 q 扫的,这个 c 里面就有的, q 扫他的话,也是利用一个普通函数来进行排序。我们会发现,在 o 零的情况下, c 性能就会比 c 加加的要高。但是一旦你开到了 o 二, 这个 c 加加代码的性能就反过来比 c 的要高出很多了。而且我们可以看一下性能提升, o 二对 o 零的性能提升,在 salt 加函数对象的情况下,十四倍的性能提升,而对于 q, salt 一点五七倍。换句话说,在 c 的年代,你可能可以承受的了。你不开 o 二 o 三, 在 c 家家的年代里,恐怕有点难。因为你不开这些优化选项的话,你这个代码可能会发现,哎,性能很低很低。因为标准库里的很多东西, 如果你不开优化的话,特别是没有音烂的话,那是绝对不可以的。因为音烂不音烂,本身就可以带来一个数量级的性能差异。原因是什么呢?我们看一下这张图。 左边这是 salt with funk, 这是 salt with less。 这两个就是前面说的那个使用函数指针和使用函数对象。然后我们可以发现这个函数调用 非常非常的复杂,就是因为我们在硕的函数里面,它实际上是有很多层的。呃,函数,然后往下到这我没往下画了,已经画不下了。 呃,还没结束。往下。还有就是因为 c 家家里面有很多小横竖吊用在里面,所以每一个东西的圈辅杂度都比较小。 而 c 的话呢,大家会发现,哎,他的函数调用层次不深的,所以他就这么几个函数。所以他能够容忍你没有音浪,没有优化都还能可以,但是 c 家家里就不行。 c 家家里你要达到比较好的性能,一定要开搞优化,一定要打开音浪。 下面是个问题啊,大家可以先考虑一下。我这有一个保持排序的 vector, 也就是说我想用 obj 作为 key, cst 也许是个 count, 也许是一个其他的东西,对吧? 然后呢,对应的,我们有个 map, 也是 o b 接到四 s t, 然后我们有个嗯, order 的 map, 也是 o b 接到四 s t, 哪个比较快? 看具体情况,这个东西没有一个唯一答案。到底哪个比较快,我们需要考虑很多的因素。 呃,一个是你容器的最常用的操作是什么?你最常用的操作到底是插入还是查询他们的算法复杂度是多少?呃,比如对插入来讲, 我们知道那个在 vex 里面,你需要先找到点,然后呢,要把后后面的东西所有都往下移动,所以是 logan 加 n, 我们这边就认为是 end 了。如果你是一个 map 的话,那是 logan。 如果你是个恩奥特的麦克的话,就是欧一的开销。查询的话啊,因为我前面是一个排序的 map, 所以是欧老感恩。 然后查询的话在普通的麦克里也是 logan, 在恩奥的的麦克里是欧一。 所以这么看起来的话,似乎 vector 在任何情况下都没有任何信任优势对不对?但实际不是这样子的。我们要考虑一些其他点。一个是 ob 界的大小,我这牵涉到移动 ob 界的开销是多少? 然后 ob 阶本身是不是可移动的,因为你 ob 阶本身的大小取决于你移动一个 ob 阶开销多大。但是你这个 ob 阶里面,比如说你是一个 指向另外一块内存,然后你在移动 ob 节的时候,需要把这个内存快整体拷贝演示一下。也就说你没有对移动作优化的话,那会带来一些额外的开销。如果你这个 obj 对移动作的优化,那通常这不是个问题。还有一个呢,就是如果单纯从区 角度来讲就可能没有考虑到的,就是在元素数量比较小的情况下, vector 能够对缓存有非常非常好的利用。然后呢, vector 对内存分配器的开销也是大大低于 map 和 in order to map。 你一个一千项的一个 map 啊,创建这个 map 的时候需要进行一千次的内存分配,一千项呢? in order the map 也一样会需要一千次的内存分配。而对于一个 vector, 如果你是连续构造一千项的话, 那你内存分配绝对不是一千次。他一般来讲是一千的 log, 以二为抵数的 log。 然后 obj 在比较小的时候比较可移动。 呃,没什么问题的情况下,我测过,大概在元素数量一直到一千的时候, vector 仍然是插入也快,查询也快。 然后到了非常非常大的情况下呢, vector 插入就会变慢,会比 map 和 n alter 的 map 都慢,但是它的查询仍然不可能比那个呃 map 慢。它一般来讲比 map 要快,就是因为它是连续内存,它有缓存友好性。 当然,因为它是欧 log end, 而那个 an ordered map 是欧一的。所以你只要元素数量足够多,最后胜出的肯定是 an ordered map。 但是你要考虑这个钩子之前还有个系数,这个系数对于 wat 来讲就是比较小的。 所以呢,我们需要测试才能真正知道你需要的呃容器到底是哪一个。然后发型这方面又有有实力。因为在 c 的情况下,你可能调用的函数名字都是完全不一样的。 但在 c 家家的情况下,我们可以这些函数的名字你会发现都很相似。我们利用发行,利用存在。我们可以很简单的写出一个测试的东西,来测试不同的情况换一个容器性能到底怎么样。我们有模板,我们有那个存在,这些都是可以利用的特效。
粉丝989获赞748

各位同学大家好,今天给大家介绍一下一种解题思路啊,那么叫动态规划问题,那么动态规划问题呢,它不是一种算法,大家要注意啊,我们几乎有各种各样的方式来解决动态规划问题,所以它不是一种固定的算法,它是一种解题的思路。 那么动态规划问题呢,我们准备沿着四个问题来给大家讲解一下。第一个呢,先介绍一下什么是动态规划啊?第二个呢,我们来这个举一个竞赛题里面的一个动态规划的案例。第三个呢,我们就这个案例呢来进行一下他思路的讲解。 第四个呢,我们来做一下这个代码实现啊。那首先第一个,我们来看一下什么是这样动态规划啊?那么就是经典的这个 dp 问题,那么它是求解最优化问题的一种思路, 大家注意这是一种思路,不是算法啊,所以他不是固定的,那么不同的问题在用动态规划来解决的时候,也会有不同的思路。那动态规划的这个应用范围啊,比如说我们经常看到的背包问题啊,那么有 n 种物体, 每个物体他有不同的体积,不同的价值,然后我们有一个固定大小的背包,问你怎么样在这个固定大小的背包里放置物体,能拿到最大的这个价值啊?放哪几件啊?哪几件? 第二个比如说最短路径生产经营啊,资金资源分配啊,复杂系统可靠性问题等等等等啊,我们以后见到会给大家一一来介绍。那么动态规划呢,它是一种思路,那么既然是一种思路,我们就要搞清 什么样的情况下,我们要使用动态规划,那我们写了四个原则,也是四个方向,也就是我们的这个四种规则啊。第一个呢,动态规划问题呢,通常我们是逆向思维来解决 啊,就是和解题的这种给出题目的思路,正好是反向的。第二个呢,他的 可以划分为若干个阶段啊,第一个题的解决可以划分成多个阶段啊,每个阶段的解决,我们组成了整体问题的解决。第三个呢,就是我们要最优化原则,也有最优结构问题。第四个就无后效性原则, 那么后面两个呢,我们在看到具体问题的时候,我给大家来介绍啊,到时候大家就清楚什么样的问题可以用动态规划问题来解,什么样的问题不可以。 如果不符合这四个原则的话,那么你用动态规划来对他进行求解,得出的结果那自然也就是错误的了。 我们举一个简单的例子啊,这也是我们今天要讲解的第二个问题啊,那么就是因为我们要讲这个例子,所以我们做了一个稍微形象一点的 ppt 啊,大家可以看得清楚一点。 那么我们看呢,这是一个树形结构啊,这是一个树的一个结构啊,那么他一共有五层啊,第一层有一个,第二层有两个啊,最后一层有五个,这个每一层的这个每个节点上他有一个数字啊,有一个数字啊,我们看第一层就是一个九啊,他用这个绿色来表示, 那最下面这种浅蓝色的他就有五个点啊,那么点上的数据分别是十六、十一、十七、二十八和十五啊,这是最下面一层,那么我们 这个题是要求你从最上面一层走下来,找到这样的一条路径啊,比如九走到十五啊,走到十一,走到十八,走到十七,也就说他走到每一层的时候,再往下走的时候,他可以走左边,也可以走右边啊。 那么我们要求你找到这样一个路径,就从走九第一层一直走到最后一层,是他所经过的这个路径形成的这个路径的节点的数据的总和最大 啊,比如说你要走最左边九十五、十六、十十六,那这个路径走下来,他的和就是九加十五加十六加十加十六啊,哎,可以走九十五、十十八, 是吧?十一,那么这个路径和就九十五,十一加二十一加十八加十一啊,那么我们 要求呢是你这个路径的和是最大的啊,最大的啊,这样一个竞赛题,这个题呢我们怎么来解啊? 那么我们来想一下,那么第一个我们就想他的思路,我们要求大家呢逆向思维,为什么这样?因为你想你从上面往下想的时候,比如九,你可以走到十五, 也可以走十二,那么从简单思维上肯定十五大。但是从十五再往下,不管走左边和右边的时候,你会发现一个十六,一个十一,他都不如从十二下来的三十大。 所以如果你正向就从他给题的思路从第一层走到最后一层,你在思考这个问题的时候,这个问题会变得非常复杂啊,因为你刚才,比如说你走到第三层,你已经出现了一些不可预知的问题了啊,你不知道从第二层 左边大,第三层右边右大,那么第第四层呢?他都的情况就更多了,所以这个时候变得会比较越来越复杂啊,无法求解啊。因为我们这个例子只有五层,而现实中他可能有几十层、几百层啊,所以越往下复杂度越高,没有办法收拢。 那么我们怎么办呢?我们要逆向思维,也就是说我们反过来做,我们从最后一层往上走啊,我们这样来思考啊,从十六、十、十七、 二八、十五,从这五个点往上走,总之他最后肯定会走到九这个点,这个时候我们发现这个问题是聚拢的,越走啊越小啊,有利于问题 向着解决的方向去进行啊,这一点很重要,就像我们经常所说的循环,你一定要让他具有结束的这种趋势,那么这就是趋势啊。所以第一个我们要有逆向词, 那么第二个我们要注意,我们把它分成若干个阶段啊。比如说你从最后一层往第一层九上走的时候,你可以把这个事情分成五个阶段,也就从第五层走到第四层,这是阶段一。然后从第四层走到 第三层,这是阶段二,从第三层阶段走到第二层,这是阶段三,最后一个阶段就是从第二层走到最顶层的这个九啊。所以这是我们说的两个原则,大家非常清楚,也就说我们逆向从下往上一层一层的来解决问题。 那我们先来看第一个阶段啊,第一个阶段,第一个阶段他怎么解决问题?那么我发现第一个阶段我们五个阶段,十六、十一、十七、二、十八和十五,那么他们在往第四层的时候,我们依次来分析,比如说我们要到达十 这个阶段,有两条路,一个从十六上来,一个从十一上来,那么我们一计算,从十六上来,他的接点和应该是二十六,十六加十,从十一上来,他的和应该是二十一,那显显而当显显而易见,左边这条路,二十六这个和应该是目前为止最优的这条路径。 那么同样道理,走到十八两个点,十一和十七走上去,最优肯定是从十七到十八这个节点,那么它的和就是三十五。所以同样道理,后面两个最优的路线我们也给出来了,我们分别用红色标识出来,同时 节点旁边第四层节点旁边这个值是表示这条路径上来以后产生的所路过的节点的数据的。和啊,好,那么这是第一节的,我们分析完了, 那么我们就知道当你到达时,他的最优实际上结果就是二十六,如果你到达十八啊,他的最优结果目前就是三十五啊,不管底下有多少层啊,是这样走出来的。好,那么我们继续来看第一阶段,分析完以后,我们看第二个阶段啊,我们来看第二个阶段, 第二阶段,哎,我们就发现,这个时候,那么无非是走到十六,走到十一,走到三十。那我们先来看,走到十六无非是两条路,要不从十上去,要不从十八上去。我们知道从十上去他所带的几点和二十六,从十八上去带的几点和是三十五,那么当然比较优秀是这个三十五, 三十五上去后加上这个十六,所以这个时候能走到十六,不管底下有多少层,走到十六这个节点,他目前最优的和就是五十一,那同样道理,走到十一啊,要不从十八,要不从十九啊,那么显而易见, 九带着四七的这个节点和是比较优秀的啊,比较好的最大的,那么同它上去四七再加十一等于五十八,那么同样十九和二十一往上走的话,最优的是四十七啊,就十九这个节点上去后达到七十七,这是第二阶段啊,第二阶段, 好,那我再往下走,好,我们发现第三个阶段啊,第三个阶段,这个时候无非是从十六、十一、三十上去,那么比较优秀的应该是哪个?能到达十五这个,那一定是从五十八上来的,那不是从五十一上来的啊,那么他的和达到七十三,能达到十二,这个那么一定是从 三十这个节点上去啊,从和七十七的这个路径上去,那么和将变得七十七加十二、八十九。那现在我们就清楚了,最后一个节点啊,那么肯定是从右边十二上去啊,那么加上这个 和八十九加九九十八,这时候我们就得到了这个总和,最大就是九十八。最好的节点的路径是什么呢?就是从九,大家看这红线到十二,再到三十, 再到我们的所说的十九啊,最后再到十八啊,这是一条最优秀的路线啊,路径啊,他的河最大达到八九十八啊,九十八。 所以你看我学过了两种思维啊,两个这个原则或者两个思路啊,两个子思路来解。第一个倒着往上走,我们成功的找到了这条最好的路线。第二个我们发现我们分成了四个阶段,一个阶段,一个阶段分析,那么这个阶段之间具有趋向于结束的这种趋势啊。 那么回顾一下四个原则,动态规划的四个原则,我们用了两个原则,其实中间还有两个原则,这两个原则一定要有,它是用来判断 你这个题适不适合用动态思路,动态规划思路,也就说刚才你那个动态思路,动态规划思路是不是正确的,是不是合法的?那么第三个原则,最优化原则,什么意思呢?就是说你在这四个阶段里面的任何一个子阶段,比如说 你的完整阶段是九到十二到三十到十九到二十八,中间一个词阶段就是十二到三十到十九到二十八,那么这个是从第二层到负词,第四层、第五层,那么这个 是从第一层到第五层的一个子阶段啊,这个子路径,那么这个子路径他也是第二层到达第四层的最优的路径。我们知道有两条路径,一条是七十三,一条是八十九,他也是最优啊。你说任何这个整个的这个路径的 里面的任何一条磁路径,都是所在阶段的最优的磁结构啊,那么这样就符合动态规划。另外一个就是无后效性,什么意思呢?要当你分析到,比如说你分析到第三层的时候,从 第五层到第四层到第三层的时候,这个时候你在网上分析的时候,他下面的事情是不会发生改变。你说你后面的事情, 后面是不会受到前面这个影响啊,因为前面这个事情决定就决定了啊,他不会再变啊,那你后面就按照这个目前的结果来分析就可以了。所以我们看这个题明显符合我们的四个原则, 所以我们这种方法所规划出来的这个题目,他就是正确的啊,这个没有什么好说的啊,没有什么好说的好,那么我们就来看最后一点,我们怎么第四个答问题,我们先 分析出来我们怎么编程来实现它啊?我们讲三个小的这个原则,或者小的这个后续的一个规划。第一个呢,我们准备啊,肯定是逆向来走,我们准备了一个三位数组啊,那么 a 三一三一四, 那么第一位很简单,这个三十一他表示的一定是他的行啊,就是我们默认有三十一行啊,当然你可以更多,你就我们自己来调整啊,那么有三十一行就自然有三十一例啊,行和列,这个好办。 那么三维、第三维、三维数则的第三维,我们放了四个数据,其中零我们不用啊,什么意思呢?就是为了符合大家生活中的认知,包括我们的行,我们这写的三按一,他的数据范围是零到三十,但是我只用一到三十,就用它来实现一到三十行和一到三次列,那这个四呢?我们以 也是他的数据范围是零到三,但是我们只用一二三那范围的。一啊,里面放的什么?放原始节点的数据,也就放这些原点里面的数据。二,放的什么?放的是从下一层到达这一层的啊,节点的和也就放的是什么呢?比如说这个节点, 这个节点,那么他应该是 a 啊。答,对,这是一二三四 a 四, a 四的 这个第一列, a 四一啊, a 四一,那么 a 四一里面呢?第一位放的是什么?是十,而第二位就这个二放的是什么?是从第五层到第四层的最大的那个节点和就放二十六 啊。那么他的三这个三为零,一二三里面的这个三放的什么呢?放的是从下一层往,这 就是从第五层往第四层这个时上来的时候,他要从左边上来,还要从右边上来,是哪条路径?我们用零表示左边上来的,用一表示右边上来的啊,所以这样的话,将来他每一个节点,比如这个节点 他是 a, 这个行是一二三,一三列是一二第二列啊,一三二,那么它里面的一放的是十一,它里面的二放的是五十八,就是从五层到四层到三层的这个正确路径的最大和。 那么他的 a 三放的是什么呢?大家注意他是从右边上来的,所以 a 三,这个 a 啊 a, 我们说第三行第二例里面的这个三里面放的是从下面上来,所以放的是一,表示右边放上来啊。好,这是对数据结 够的一个解析。第二个呢就是我们还要去,我们要逆向循环解决问题,你就反着走啊,循环要从下往上走。第三个呢就是大家注意,在编程的过程中啊,一定要让你的逻辑啊,要非常清楚 啊,那么这样的话呢,我们可以通过让你的程序分段和加好你的注视来解决好。 ok, 那么我们把问题分析清楚,现在我们用代码来实现一下啊,实现一下,那么我们把这个 ppt 啊缩小到左边,这样的话呢,大家还能够看到这个图 啊,特别形象的来看的这个图来编程啊,那么右边呢,我们放这个,我们的变音器啊, dyl, cpp 啊, cp, 五点一,好,我们来新建一个原码啊,我们来先把前面的结构写出来啊, 好补光啊,把结构我们先把它掏出来。好,那么我们要注意啊,程序逻辑要清晰啊,程序要分段加注视。 我们先来看我们今天要做的第一个步骤啊,第一个步骤啊,我们要干嘛呢?我们需要先建立我们所需要使用的数据结构啊,数据结构啊,那么是什么呢?啊?就是我们刚才说的三位数啊, 那么三十一表示三十行啊,一到三十啊,三十一表示三十列啊,一到三十列啊,里面有四个只用他的一二三啊,一二三,一二是什么?三是什么?我们已经给大家解释了, 但是我们知道这是个局部变量,局部数组啊,所以呢,我们要让他处处化啊,要让他处处化,那么怎么处处化呢?给他一个雷啊,这样的话 它里面所有数据都变成了零。第二个,这个 n, 这个 n 表示什么呢?表示行数啊,就是这个整个这个结构有多少行,我们现在是一个标准的一个五行结构啊,好,这样我们把数据结构准备好了啊,准备好了啊,那么第二步骤啊,第二步骤, 第二步骤啊,我们来录入数据啊,录入数据啊,录入数据。好,第一个,首先令入录入他有多少行啊?有几行啊?好 啊,几行啊,有几行就就给几就可以了啊,所以 c e 直接往这个按里面放啊,那么然后开始啊, 请依次输入每行的数据啊,依次输入每行的数据啊,好,那么利用一个小数循环, 一共五行啊,小于等于,那么就是这个五载 n 里面啊,一个五行啊, 好,这时我们控制了,利用这个 i 来控制它的行数啊,利用 i 来控制行数,从一到我们会输入一个五啊,一到五啊,好,然后我们来控制它的这个列啊, 好,然后我们往里面输入 c 啊 c, 那么给谁呢?肯定是给这个爱航这一列要注意啊,他的第三位有三个数据啊,一、二三零,不用一,就是原始数据,所以这是什么?这是原始数据, 原始节点的数据啊,那么紧接着我们就初始化,初始化什么呢?初始化这个 j, 呃,这个二二是什么呢?我们刚才已经给大家解析了,是从下一层到达这层的节点的最大的河,路径的河啊,就这个外面写的这个红色,那么他初始肯定就是他原来的这个数据, 所以让他出手化为跟他的这个第一个节点上的数据啊,第一个维度上的数据是一致的。那么第三个呢?这是一句 没有用的话,我们把它写这主要的目的是为了整个程序的一个清晰,什么意思呢?就让默认他所有的点从下一层上来,都是从左边上来啊,默认从左边上来。 那么为什么说这句话没有用呢?因为我们初始化想要让整个的数组结构里面都变成零了,所以这句话其实意义没有意义啊,但是写在这很难清楚啊,这就我们说编程要逻辑清楚啊,逻辑清楚啊, 好,这是我们把整个的一个数据啊,我们把它都录入进来了,一个一个的啊,都把它录入进来了啊,不仅录入进来,而且我们让这个节点呢, 这个第三维的啊,第三维的这个节点的和路径和也默认为原始路径上的这个基点上的数据方向默认为零啊, 这是我们做的第二个步骤啊,那我们紧接着我们来看一下第三个步骤啊,第三个步骤啊,第三个步骤,我们来显示一下原始数据啊,这样的话我们会让这个事变得更加清楚啊,更加清楚啊,好, 显示一下这个原始的数据结构啊,好,那么怎么显示呢?很简单,我们就要利用一个简单的一个循环来做啊,好, 从第一行开始到第 n 行啊,列也是从第一列开始啊, 注意这个列他每次他依着行数的增加而增加啊,所以小一点要按 好,我们输出一下啊, 好,开始数据啊,后面呢,我们让他漂亮一点啊,自己加一个格式啊,杠 t 隔开的每一行,我们输出一个回车啊, 输出一个回车啊,把整个的这个数据结构啊,我们来给他显示一下啊,演示一下。好,我们到这还没有做动态分析,动态规划,我们只是定义 数据结构,录入数据啊,显示数据,那我们先把程序呢测试一下啊,我们编一下看看有没有问题啊。好, ok 啊,我们运行一下啊,运行一下好行数,比如五行啊,每行的数据啊,比如说啊,一第一行就一个,第二行两个,第三行三个啊,第四行四个 啊,第五行五个, 好回车啊,我们来看原始数结构啊,第一行,第二行,第三行,第四行、第五行,所以从于到目前为止每 有问题,而且我们看很清楚啊,好,那么重要的事情来了啊,我们的第四步啊, 我们来做我们的动态规划啊,哎,找到 c u 路径,自由路径,那么怎么找?我们来看一下啊,倒着走,所以这个负心环 i 要从 n 减一的前,以后我们先分析第四阶段,从第五行啊,第四行,所以 i 被复位,这五减一就是四啊, i 大于等于一, 哎,简简啊,所以倒着走啊,可以说逆向思维啊,那么里面呢,这 从一开始啊,还是小于等于二,因为每一行的个数啊,都是根据这个行来确定行数来确定啊, 所以看这个结构 i 是从倒着走的,从第四行往第一行走啊,那么这个啊,很简单,还是每一行的格数,所以他还是小于等于这个啊,这还是小于等于这个啊,小于等于这个啊, 然后我们来看一下啊,从第五行往第四行走,大家注意,其实首先要分析就十六和十一往十上走这个问题, 十六和十一,那么谁是比较合适路径?我们知道肯定十六,因为十六大,十六大,所以上去以后这个总和是二十六啊,也就十六比这个十一大,那你什么意思呢?也就如果我发现 a 十六是谁呢?十二是二加一的, i 加一等,这个注意啊,我们是比较这个路径和二大于 a, 注意 i 加一啊,因为 i 是 第四行加一,那么这个十一呢,实际上是这加一啊,这加一啊,他的这个路径和啊,我们假设底下还有很多,这提升上来,如果比他大啊,比他大,那就现在这个情况,十六比十一大啊,啊比, 哎,现在是四,四加一就第五行啊,四加一就第五行,这是一,第一个十六啊,这是第一加一第二个也就是十一,那么很明显现在这个是符合他就比他大啊二,说明是那个路径和啊,从下面上路径和,这个时候我们上面这个,哎 啊,这,这是谁呢?这个时尚就是我们的第四行的这个十,这个节点上啊,那么这个节点上他原来的这个二上放的是什么呢?是他里面的这个这个数据十,现在要放二十六等于什么呢?等于他原来的这个 i, 这个 g, 这个二,这个十要去加上加上谁呢?左边这个大,左边这个大,就十六大的这个啊,加在上面啊,加这个大啊,加这大啊,这是我们要说谁大就把谁加上,因为这是比较优秀的路径啊。 然后我们注意,一定要让现在的这个第四层的这个 i 和 j 这个节点呢,这个三,这个方向他等于从哪来呢?注意左边大肯定是零, 那反之呢,如果不是这样,那么还是这两句,这个时候如果不是这样的话,你注意这个时这个节点上他的这个心的这 放置路径盒的这个节点的数据,等于他本身就应该加上右边这个节点啊,加上右边这个,这是我们要注意的,同时这个方向要变成一,因为他是从右边上的 啊,这样的话当他循环到一的时候,他整个数据就反推回去啊,所以数据分析完毕,那么我们来看步骤五啊,步骤五啊,那第五步骤呢?就是我们显示下结果啊,显示下结果 啊,那么第一个显示节目出现 c l 啊,首先要输出啊,那么最大的路径上的节点的和是是多少呢?好,那肯定上去后要放到 c 一 b 的这个二里面啊,这个二里面肯定放到这里面啊,这是不用说的,那么紧接着我们可以输出啊,我最大和所在路径是 什么?好,我们来看一下, 那么我们通过一个或循环来做啊,这个从上面往下走啊,小于等于 n 加加。好,注意,那这个和首先一定是从九往下走啊,这是一行一列,所以我们定一个 n t k, 他被负一,用它来控制列 啊,控制力啊,所以他输出的肯定上来。先是这个 i 叫当天第一行 k 第一列啊,第一列,然后注意原始数据啊,要看原这个输出节点啊,输出节点 各俩空格啊,各俩空格,然后注意这个 k, 再往下走的时候注意这个九里面的这个三节点, 三围上一定放着一个左或者右啊,右就是往往右边加一了,左就跟他同样的同一点上,所以 k 被复回 a, 这个每个节点啊, k 节点 这节点上的这个三,这个节点啊,就这个方向啊,如果是零就沿着它往下,如果是一就往右边去走啊,就往右边去走啊,依次的每一行原始节点就把它显示出来啊,显示出来。好, ok, 那么我们来边运行一下啊,看一下。 好,为了方便我们把我们的数据呢,已经存到这个里面了,我们把它准备好了啊,就是我们这个节点数据。好,我们来试一下表五行,我们把数据放进去回车,这个时候大家看最大节点的和九十八,就是我们分析的路径九 啊九,然后再往下啊,九,再往下啊, 我们看一下,有有一点问题啊,最大路径和,我们来看一下,从一到小一等于 n, 然后 a 等于 k, 然后 e 这个节点,然后 k 被复为 b, i 应该是呃, k 里面的 k 累加上。啊,有一点问题,好,我们来,因为他是加才能往右走,或者维持他原来的所在的列。好,我们变异再运行一下, 好,把刚才那个停掉啊, 好,我们再来运一下, 一共是五行啊,是区域搁进去啊,大家看综合九十八,路径九 十二,然后三十,然后十九,最后到二十八啊, ok 啊,这是我们 程序的一个给他的整个的一个验证啊。好, ok, 那么这一部分就是我们要讲的动态规划问题啊,有机会我们再给大家介绍更多的这个动态规划问题。好,谢谢大家。

hello, 各位小伙伴们大家好,我是一锅炖不下的北冥, 那么今天呢,我们来深入的分析一下,在我们买 circle 当中,我们如何通过我们的 mvcc 机制来去保证我们的隔离性啊, 那么没有点过关注的小伙伴呢,也可以点波关注啊,那么我们接着往下去看,那么在上一讲呢,我们是跟大家介绍了有四个格力级别,对吧?那么第一个我们序列化,那么序列化呢,它本质上它是全程枷锁的,它的一个性能呢是最差的,但是它保证的一致性呢,是最好的, 所以说在我们训练化呢,它是不需要用到我们 mvcc 的,而我们的未提交读呢,我们再去进行并发事务访问的时候,我们其实能够看见其他事务没有提交的修改,对吧?所以说也不存在什么格力性,那么只剩下我们可重复读和提交读,那么 mvcc 呢,其实也是在这两个级别上面工作啊,那么在接下来我们深入的去分析我们 mvcc 机制的原理之前啊,我们先跟大家去铺垫两个知识,那么这两个知识呢,有助于后面大家能够更好地去理解啊。 首先要跟大家介绍的是我们的版本念啊,我们以往当我们去见一张表的时候,我们里面可能有些字段,对吧?那在这呢,我们有 id, 有 name 和余额,这个呢是我们能够看见的,但其实我们的表中呢,还有一些我们看不见的字段啊。 首先第一个是我们的事务 id, 当我们对某一条行记录去进行改动的时候,那么那个改动的事物呢?他的 id 会记在我们这个行里面啊,这个呢就是我们的事务 id, 那么第二个我们的 ropent, 当我们去对某一行去进行改动的时候,我们是不是会通过我们的 on 度日志去维护一些其他的版本, 对吧?而若 point 里面呢,他存的是他上一个版本的指针地址啊,那么他呢是直接链接到上一个版本的。跟大家举个例子吧,假设我们这边的 id 是一万零一啊,我们的另外是北名,余额是九百块钱, 那么当我们把余额从九百改成两千的时候,那么我这条记录,那么它就叫做一条旧记录,对吧?那么我这条新记录呢? 我的 ropent, 它会链接到我之前的那条旧记录里面啊,当我再次把余额从两千改成一千的时候,那么我的 ropent 呢,它也是会把地址链接到我的上一条, 那么他通过 report inter 把我们版本之间的修改呢,去连接成一个列表,那么我们把这个列表呢,就叫做我们的版本列啊,我们根据这个版本列,我们就能够去找到我们这一条数据的所有历史版本,那么 m v c c 呢, 他其实就是通过这种方式去维护了多个版本的。跟大家介绍完了我们的版本念之后,我们再来去看一下我们的 red view, 当我们去开启一个事物的时候,那么它同时呢,它会去生成一个 red view, 它里面呢是有几个比较重要的参数啊,我们来跟大家过一下。首先第一个我们的 id 列表,那么这个 id 列表呢,它里面存放的 是我们当前数据库里面我们所有的活跃事务 id 列表啊,而活跃事物呢,它指的是我们启动了,但是我们还没有提交的事务。那么第二个我们的最小事务 id, 他那指的是我们在创建了我们 red view 的时候,我们当前数据库里面,我们活跃事物里面最小的一个事务 id 是多少?那么也就是我们这个列表里面最小的一个值啊,好。第三个我们的最大事务 id, 这个最大事务 id 呢,它并不是我们 id 列表里 最大的值了,那么是我们全局事务 id 里面最大的值。然后再加上一,那么再介绍最后一个我们的 create 事务 id, 也就是我创建了这个 red view 的事物,它呢就是我们当前的事务 id 啊。 我们介绍完了四个参数之后呢,我们再去看一下我们的 m v c c, 它是如何去结合我们 red view 去实现隔离性的啊?我们可以看到下面一张图,当我们事物启动的时候,它会去读取一个数据版本的事务 id 啊,那么它是有几种可能性的。 首先第一种,如果被访问的版本,那么他的事务 id 和我们 red view 里面创建事务 id 是相同的时候,那么也就意味着我当前事务我在访问我自己修改过的记录,对吧?所以说这个版本呢,是我是可见的,如果我们是落在了这个绿色区域里 没有,那么他表示这个数据版本呢,是已经提交的事物,或者是我们当前事物自己生成的,所以这个数据呢,也是可见的,如果落在的是红色区域呢, 那么它表示我们这个版本它是由将来启动的事物生成的,所以对于我当前事物而言,我是看不见的,那么最后一个,如果说它落在了黄色区域里面,那么它就有两种可能性了啊, 如果我们的数据的是外地,在这个列表里面,那么他表示这个版本他是由还没有提到的事物生成的,对吧?所以说他是不可见的。如果这个版本数据的是外地,他不在这个 id 列表里面, 那么它表示我们这个版本它已经是已经提交了的事故生成的,所以它是可见的。我们的 m v c c 呢,就是通过我们前面所介绍的版本念,再加上 我们的 read video 来一起去控制了我们的并发事物访问啊,那么对于前置知识呢,我们已经铺垫完了,那么接下来呢,我将带领大家通过实际具体的案例来去分析一下。 在这里我是准备了两个事务,一个事务 a, 一个事务 b, 那么事务员呢?主要是修改数据,那么事务 b 呢?是主要查数据啊,大家想一下,当我更新完事务 a 的时候,我们事务 b 他所查到的数据,那么到底是北冥二还是北冥呢?大家呢可以把这想法打在我们的评论区,那么接下来呢,我将带领大家去演示一下。 首先我在这呢已经提前准备好了两个 shift circle 啊,我们先来看一下它的一个隔离级别是什么, 我们可以看到它现在的级别是 r, 对吧?那么没有问题,首先我们开启个冰运数,然后呢把北名改成北面二,好,可以看到 已经成功了,但是没有 commit, 我们来看一下北面二查询啊,我们可以看到它当前的结果还是北明,对不对?那么我来 commit 一下,我们再去看一下它的一个结果。 好,我们可以看到 commit 已经完成了,我们再去看一下。哎,我们这边看到我们查询出来的结果还是北冥,对不对?那可重复读呢?它就解决了我们不可重复读的问题啊。那么具体它是如何通过我们版本列和我们的 read view 来实现的呢?我们继续来分析我们的图啊, 我们刚刚的流程里面,我们是先去开启了我们示威的事物,然后呢将北冥改成了北冥二,对不对?那么此时呢,他也会生成一个 read view 啊。首先第一个是我们当前事物的事务 id, 那么第二个是我们活跃事物的 id 列表啊,我呢只有一个事务,所以说他 查出来呢也只有我自己,对吧?那么最小事务 id 呢,也是我自己,那么最大事务 id 呢,是我们全局最大 id 加一嘛?啊,那么这个呢是没有问题的,那么当我去进行第一次查询的时候,我是不是也开启了一个事务,对吧?这样呢,我也会去创建一个 read view 的啊。首先第一个事务 id 呢是等于三,那么第二个 我们的活跃 id 数列表里面呢,就有二和三的啊,而最小数 id 呢是我们的二,那么最大数 id 呢,那么就是我们的四,我们去按照我们前面和大家所说的那个规则,我们来去判断一下啊,那么当我们再去执行第二次 slag 里去查询的时候,那么他会发生什么事情呢? 我们来通过我们的上面的版本念跟大家去解释一下啊,首先第一步呢,他肯定是从页记录里面找吧,那么他的 name 呢是北冥二,他最重要匹配的是我们这个事务 id, 在我们查询事务的 red view 里面, 我们的事务 id 列表是不是已经包含了二跟三,对不对?那这边的事务 id 是二呢?所以说明显他是不符合我们要求的,那他呢就会根据我们 report inter 的规则去寻找我们下一条,当他定位到我们前一条数据的时候, 他依旧会去判断我们这个事务 id 啊,他会发现这边的事务 id 呢是我们的一,而我们的 red view 里面呢,我们最小事务 id 是不是我们的二,对吧?那么这个呢,就说明我们这个事务是不是已经提交过的, 当他确定这条数是已经提交过的,那么他呢就是可见的那可见的数据,那么他呢就会返回这一条啊,所以说我们最终看到的数据呢,是我们的北冥啊, 那么这个呢,就是我们可重复读的一个原理啊。那么接下来呢,我们再带领大家去演示一下,在我们读语提交这个级别里面,他是怎么工作的啊?首先呢还是一样,我们呢也去看到下面这张图啊,在这呢也是两个事物,但是我把 他的一个流程步骤呢也画出来了,首先我们的示威,他会将 name 从北明改成北明二,然后呢我们开启了第二个事务,那么第二个事务里面呢,他执行的是一条查询语句,此时他是查不到示威更新结果的啊,那么继续往下走,就走到第三步,那么我们的示威呢,他就提交了事务。 那么第四步呢是我们再查询一遍,那么大家呢,也可以把这个想法打在评论区,那么看看最终出来的结果是北冥还是北冥二啊?那么接下来呢,我将带领大家去演示啊,那么同样的我们还是有两个事物啊,我们先来看一下它的一个隔离级别,我们现在呢是一个 r 的级别,对吧?我们先把它改成我们 r c, 好,两个级别呢已经修改完成了,那么接下来呢,我将开启第一个事物,然后将北名改成北名二,我们可以看到第一个事物呢已经执行成功了,我们再来看一下,我们开启第 第二个事物,然后我们执行查询,我们可以看到当前还是北冥,对不对?那么此时我将第一个事务去提交,那么我们再查询一遍, 我们可以看到我们能查询到北面二这个结果了,是吧?这个呢就说明他发生了不可重复读的一个现象啊。 那么具体我们 red view 和我们的版本念是如何工作在我们读已提交这个格力级别里面呢?我们接着去分析啊。首先是第一次,当我们去示威开启,然后执行更新语句,那么同时我们会创建一个 red view, 对吧?那么在 red view 里面, 假设我们这边事务 id 是一,那么我们的活跃事务列表里面也只有我自己,对不对?那么最小事务 id 和最大事务 id 呢?是一跟我们的二啊。然后我们来到了第二个事务,他是执行的一条查询语句,那么同样的他也会生成一份 ready view 啊。 我们可以看到我们的活跃事物列表里面它发生了一点变化,我们前面的事物 a 呢,它正在执行,对吧?所以说我们前面一个事物和我自己,我们都是在这个里面的。 然后第三步呢,我们回到了我们示威,此时我去提交事物,那这个时候我们 red view 里面的内容呢,是不变的啊,它跟我们前面呢还是一样的,当我去示物 b 里面,我开始第二次查询的时候,我呢是会重新创建一个 red view 啊,所以说我的示物 id 没变, 但是他会将我们活跃事务列表去进一个更新啊,因为我们的事务 a 是不是已经提交了,对吧?所以这个地方呢,只有事务二。那根据我们前面跟大家所介绍的规则, 我们的事务一已经不在我们这个 id 列表里面了,那么他是不是就满足了我们可见性的要求了,对吧?所以说我第二次查询的时候,我是能查看到北冥奥这个更新结果的,所以他就发生了不可重复 读的现象啊,我们的可重复读格力级别和读已提到格力级别,其中最大的一个差异就是在当我们去执行 slag 的语句的时候,他们去生成我们 red view 的规则是不一样的,我们可重复读呢,在一个事物里面,他只会生成一次, 而我们的读已提交呢,它是每次去查询的时候,它都会去生成一个新的 red vivo 啊,所以说它能更新我们活跃事物的一个 id 列表,正是因为这个原因,所以才造成了我们不可重复读的一个现象啊。那么在最后呢,我们再来跟大家去做一个总结啊, 事物呢,它是在我们埋 circo 当中的引擎层实现的啊,我们常见的,像我们的英诺 d b 呢,它是支持事物的,那么事物的四大特性呢,是我们原子一致隔离和持久,对吧?那么这一次和大家分享的呢,主要是我们的隔离性啊,当我们多个事物 出现了并发直线的时候,他可能会引发脏读啊,不可重复读,换读这些问题,对吧?那为了避免这些问题呢, circo 呢,就提出了四种隔离级别对不对?包括我们的读音提交啊,读语提交啊,可重复读和串形化。隔离级别越高,那么也意味着他的性能呢,是越差的啊。 如果说我们要解决脏读现象,那么我们就要将格力级别最少要提升到我们已提交读里面,对不对?要解决不可重复读呢,我们最少要将级别提升到可重复读,那么要解决患读呢,我们不建议将级别提升到可序列化,它呢,可能会导致我们数据库在并发的时候可能性能非常差啊。 而 innodb 引擎呢,它虽然默认知识的级别是可重复读,但是它通过了我们的航锁和间歇锁的组合,它呢去锁住了我们记录之间的间隙,包括我们记录本身啊,这样呢,它就能 能够防止我们其他事物在这个记录之间插入新的记录啊,这样呢,它就避免了我们的换读现象。而对于我们刚刚所聊的已提交读和可重复读,那么这两个格力级别呢,它是通过我们版本念和 red view 来实现的,对吧?那么它们的区别最主要的是 在于创建 vr 的 vivo 的时机不同啊,那么刚刚呢,也跟大家介绍过了,对吧?那么关于今天的分享我们就聊到这里,如果大家觉得有些收获的话,那么可以给北冰老师一个三点啊,有需要我们今天的笔记和我们 proc 手里面的图的话,那么也可以评论区扣一领取啊,记得关注再走哦!

what's going on guys? this is richard from trayline and in today's video, we'll be talking about the volatility contraction pattern where the vcp which is an essential characteristic to all high quality based breakats so here's a little bit about what? we'll be covering today first what is a bcp? the history key elements of a vcp will go through some full examples the benefits of trading this style of breakout how to catch a vcp breakout and finally managing risk with bcp bots so dirennon what is a volatility contraction pattern essentially it's a chart consolidation that tightens from left to right within a price base for instance here we've got a chart up pltr which is tightening from left to right under this prior high and forms a clear pivot right here on the right hand side and each of these the shakeouts are basically getting rid of shorter term holders and basically shares our changing hands from those short term holders to the longer term institutions who are kim, lang, sock and see a lot of promise in this particular name so this is a supply and demand characteristic that creates this char pattern and as i said this provides a clear pivot point to manage risk against on strength and as minorvania likes to say this is basically the effect this char pattern not the cause it's really the supply and demand characteristics that creates this dynamic which can lead to really strong moves in just a matter of a few days and weeks and before we move on i did want to find what a pivot point is because i just mentioned that i've made an entire video about this, so if you're still curious after this explanation go ahead and check that out after you finish this video, but basically it's a specific price level where price will make a decision and a large directional move is anticipated and occurs at the very end of a proper basing structure like a vcp so it's often a prior resistance level such as a week high, a month high even a yearly high and you can use multiple time frames to find different pivots and the higher the time frame the more significant the pivot point so here we've got a pivot point right at this prior day's high, but also at this weekly high and also the all time high right here if you draw that across and it's basically the point where demand overwhelms applied, so that's a brief explanation of what a pivot point is and this is really essential in order to define the proper bypoint coming out of a volatile contraction pattern so moving on to the history of vcps, these have kind been around forever, because it's a basically an element of market structure, it's a cly and demand characteristic way back when richard whitekoff is training he called it the spring a williamonio called a similar pattern that cup with handle, which is basically a type of vcp and of course, markman or veni really coin the term vcp within his excellent books, which should be linked down below so here's a chart of common handle you've got basically a two contraction vcp this is the pivot point right here and here's a y cough accumulation graphic where you've got some vcps right here as well as at this level through these highs, these are pivot points, so as i mentioned before vcps have been around forever because they're an element of market structure caused by supply and demand characteristics moving on let's talk about the key elements of vcps basically as i mentioned you want to see tightening from the left to right within the base and you want to see multiple contract at least two here here's an example with shopify back in twenty seventeen i believe where you've got three main contractions and one small one at the very end and then you have a surge up price and volume moving on and leading to a really strong up trent and you also want to watch for a relative strength and accumulation signs before this price base and within the overall pricing structure so as many pocket pivots as you can see within a base especially up the right hand side that's very constructive and before this base you definitely want to see a strong up trend basically indicating that institution's net net are accumulating stock and this base is just kind of a short term pause within the overall up trend you also want to see volume dry ups and burst upwards within the base, so on these down trends within the base you want to see basically declining volume and from left to right you want to see a little bit of a downward trend line in terms of volume until that pivot point where you want to see a surge upwards in volume indicating that institutions are accumulating right at that point and basically this this amount of volume cannot be created by just retail traders this is a sign and hallmark of institutional buying which should last a few weeks, a few months creating a nice trend that we can ride and finally you also want to see a very tight last contraction ideally less than ten percent from the prior high to that low of that contraction and basically this shows that the sellers have really dried up they've been absorbed and the stock is basically ready to make a large directional move if that demand comes in as shown by the volume, so that's really important and also the tire this contraction the tighter you can manage if you're using this swing low as your stop loss, so that's some key elements of vcps movie on i want to talk through a neo example and first i've got an unmarked chart here so i want you to kind of look at this for yourself and determine where is the volatility contraction pattern so i'll give you just a second and while you're doing that also go ahead and leave a like down below on the video and subscribe if you haven't already to throw on channel for more great videos just like this one so now that i've given you guys a few seconds to try to find the vcp for yourself here is a marked up chart we've got a strong prior up trend a sign of relative strength great volume on this push upwards then we start a price base through this high here form one contraction to then three this one is really tight i think it's about eight percent if i remember correctly and then we've seen explosion of volume, then it pretty much kind of sits here on top of this prior base forms another kind of volatility contraction pattern with another pivot right here so you had a quick directional move from this pivot and then it set up another price base and this started a really nice uptrend in twenty twenty and looking at the volume you see really the textbook dry up on these down days and then when it starts moving up, you see volume come in and it gets tighter and tighter as volume really dries up at the end for that pivot point so this is a really good example, definitely go ahead and study this on your own this is in early twenty twenty i believe this was around the may timeframe when this was formed, so i'm definitely one to study here i like how it held the twenty one ema as well along the base low so that is neo we've got another example from tsa is one that mark minervani actually traded we have the march correction one contraction two three and then here is the pivot point and you see a nice blast off through the pivot around fifty seven and a half and a quick directional move getting at a profit right away and i love how it holds that ten days simple after the breakout that's really a sign of a very powerful stock when you see it hold that shorter moving average especially after i burst up on volume, so that is tsm next up we've also got spt this is a more recent one we've got one contraction two and this last one is pretty tight and pretty short but we have a nice push up on volume and this started a really nice trend from around seventy five all the way up to around one twenty or so and i really like this example because it shows you how the bypoint can be below the previous all time high but if it's in the upper third of this base, if you kind of split this up into thirds, they probably are a little bit higher of it working just because there's less overhead supply stopping this stock so this is example with spt and moving on let's talk about the benefits of trading evaluatility contraction pattern first of all as traders, we're trying to leverage, both time and money so you don't want to be kind of wasting time holding a stock through a proper basing structure and said we want to be participating during these strong breakouts and up trends and the vcp is a great timing mechanism to get you in right at that proper pivot point another benefit is you know if you are right or wrong very quickly, you're right if you have a profit very quickly and starts a nice up trend but if it breaks expectations and fails this pivot breakout as we'll see in just a few slides that way you know you're wrong and you can exit small loss so to say it again you're either in profit quickly or out with a small loss and you can move on to the next opportunity let's talk about now how to catch a vcp breakout is pretty similar to how to catch a regular breakout or even a pullback we want to identify candidates on the weekend and when the market is closed sellers at price levels right below that proper pivot point right below this level and you want to plan out as much of your trays in advance, including your stop loss position sizing all of that so it's all about execution when the market basically opens and on that breakout you want to see very large volume look for above average volume and that's all about execution as it pushes through that pivot point high volume and early on in the day, you can use volume buzz volume run right to kind of estimate what that volume is gonna be and whether it will be above the ten days ten week average fifty day average whatever moving average on volume。 you like to use so that's how to catch a bcp breakout now? this is very important how to manage risk with bcp breakouts basically you always want to set a initial stop loss basically when the setup has failed so here if you're buying through this pivot, you could set a stop loss basically at the low of this consolidation or even at the low of the day if you really want to keep that a risk very tight, you also want to set alerts right at the pivot point so if it crosses back under you're able to watch that stock on your screen, and you always want to even before you enter the trade and buy shares know when the setup has failed, so set that stop loss right at that point where the overall setup is invalidate then if you do get a profit initially and you make a nice game quickly of five ten percent even you want to move up stops to break, even initially and even as a stop continues to work move them up to protect some profits so if it reverses, you're out with a small gain instead of a full stop loss hit so it's very important to set that initial stop loss and know when the step has failed beforehand, so if a stop reverses from a vcp like ai did from its ipo base, you're protecting your downside and not sitting through a long basing period and a significant drawdown you can just move on to the next potential setup and breakout so here are some key vcp takeaways first of all the vcp is created by supply the man, it's an effect of accumulation within a base by institutions proper vcp should work on schedule so either are right right away and are in a quick profit or it basically reverses and you're basically stopped out small laws and as always you want to establish weekly in daily routines to identify and execute potential vcp breakouts so that's a quick run through of the vaultility contraction pattern let me know your thoughts down below in the comment section leave a like down below if you enjoyed and basically enjoy the rest of your day thanks again for watching and i'll see you guys in future videos thanks。


今天讲大哥蓝胖子,开局我们队友首选了中单剑圣,又补了烈士兔小小以及四号为风行,整个队伍除了五号位亚伯顿不识之缘外,我又嗅到了上司大哥 vs 和泡沫的感觉。这把兑现打马尔斯加凤凰的烈士库出门要出魔棒,因为马尔斯和凤凰是非常善于消耗的英雄, 而对面的阵容非常完美,先后手齐全,控制爆发沉默都有,救人也有。为了弥补阵容的不足以及资源分配,我点出了蓝胖子来打一。 其实我并不是想大家学我打什么大哥蓝胖子大哥 vs 我觉得如果你是看热闹学我这个是没有用的,通俗点讲的话这个就是补位, 但前提是你要非常理解每个英雄以及每个英雄之间的阵容搭配,不然可能话说天卒的补位也有可能是雪上加霜。就你打路人往往都会遇到这种情况,无论你是 是万古传奇还是先锋统帅,都会遇到这种情况,但是打天梯都是想赢的呀。遇到问题最好的办法其实是解决问题,比如这种情况,我是不相信你什么某某英雄是绝活,拿出来配合这个阵容就能硬打过去的。 对面马尔斯凤凰打出了比赛常见的双炸招套路,不过一级的凤凰弹非常脆,只需要 a 六下。 这把选蓝胖打一其实非常合理,即使可以通过线上的补刀合理补出点金手,也可以让线不利。而蓝胖打大哥的经济和等级主要还来源于点金手,也是间接给团队地图上的资源分配让出了空间,并且在中后期 我还可以给健身和小小他们非常喜欢的视野术,任何一型除了点击手都要尽量点经验高的单位,我觉得稍微懂一点的都能看出来大个子 蓝胖 vs 甚至泡沫的作用吧。对比传统核心就是能打架能吃节奏,在吃了兑现期的福利后,不是必团刷野,而是主导节奏,并且非常难缠。而你家真正属于核心的英雄,是完全可以选择跟着你喝汤或翻新发育的, 而这又会导致对面的战斗力非常不足,就像这把吃了线上资源的虚空还没有到可以打架的程度,而他来参战如果死了就会非常亏,但我一个大哥蓝胖就怕死了也不会比虚空亏。一个有装备又有等级的蓝胖,对比那些需要两三个大件加 bkb 的核心来说,节奏是非常快的。 而这把虽然对面的阵容在我没选出大哥蓝方之前 看来非常完美,我们目前好像并没有什么办法来关对面的中单帕克,那这个时候就需要我来做出针对了,其实对面这个阵容只要针对住他们扛局势的绝对核心帕克,那他们在虚空出扇之前,这个看似完美的阵容就会被我们快速化解,这个局势让对面其实已经非常不舒服了。 而话说出来,如果不是大哥难逢的存在,换做别的正常 c 位小小和今生也绝对不会这么积极的参战。 猪狗放了,关马尔斯批批了,先左开一下 凤凰变蛋,在我满级视野术 buff 下,这枚凤凰蛋 一局就能敲碎, 能打出这样的节奏,这样的局势,这样被打的根本喘不过气来, 而帕克也挑选错了欺负的对象。我只愿第一波等的就是你。 其实到这里大哥兰坡的任务就已经圆满完成了,局势已经发展到了我选人时脑海里的画面了。 这把是对面菜吗?我觉得从选人上来看,我们这边选的更随意,我只不过是想让一场游戏正常发展好了,对面阵容好,但我就抢节奏扛局势, 二三四号位持资源,缺少前期的主导节奏能力,那我就补一个刚好来弥补阵容。烈士的一号位为什么会有大哥刚被大哥盛唐?为什么 ti 九冠军一号位英雄是大哥小精灵?这些英雄以前为什么没有人打一呢? 这把小小和金圣是不是核心?是不是有刷钱能力?风行是酱油,亚奔的是奶?那是不是需要一个又有控制又有一点坦度,且不太依赖装备,后期又有一点能力的节奏型英雄来主导节奏呢?而恰好是野术完美切合小小以及剑圣加上蓝胖真英雄的赖 能力。甭管你的基本功如何,我觉得蓝胖加亚布顿这个线都是随便打的,而蓝胖的经济来源主要是点击手,试问点击手蓝胖需要极大占领野区资源和兵线资源吗?与尚辉的 vs 同理。 可能我觉得一部分玩家玩了几千个小时或者一万多个小时这个游戏,听见一些英雄的名字,立马脑海里就会有一个很死的框架,把这个英雄从位置 出装到家,点都定义的死死的。那我觉得你在糟蹋的游戏里就已经毕业了呀,不用再玩这游戏了呀,没什么好玩的了,也没有必要再看视频了,对吧?你就已经是最强的了,我希望那些抬杠的人,有本事就去给中国队指一条冠军的名录。 电眼游戏正受到攻击。

什么是性价比?杨哥来告诉你,一千五百元,最强神机鲁大师跑分一百一十五万,全特效 ek, 畅玩所有三 a 游戏,称得上是性价比之王,英雄联盟轻轻松松四百六十帧以上,猛捷无间,战斗状态一百五十帧左右, cs, go 三百五,他们是最强一百四十帧上下给他爱武也有一百五十帧的成绩。 接着是配件方面, cpu 我们选择一五二六六六 v 三十核心,二十线程最大锐频三点三 g 赫兹,无论你是多开还是单机网游,他都是百元价位内的绝对首选。主板选用柯脑的叉,九九六项供电基本可以满足这颗 cpu 的满载需求, 而且不仅支持 ddr 四的内存,还能安装 mr 的固态,二百出头的价格,性价比相当不错。接着是两根 ecc 八 g 二幺三三频率的内存,双根十六 g 的内存空间,基本可以满足绝大部分小伙伴的使用需求。硬盘是金士顿的五百 机够用就行, cpu 散热选用一个主板专用的六筒管,六十多块钱的价格,这样的用料算是非常良心的。店员是我在线下海鲜市场淘到的一个长城五百瓦用头器是这张二零八零 m 显卡, 他是笔记本核心拆卸组装出来的,八百五十元的价格,鲁大师跑分比三零六零太还要高,性价比非常可以,虽然噪音有点大,不过都一千五百预算,还要什么自行车,所有破烂啊,不,所有配件都在这里了,我们现在就把它组装起来,装好了兄弟们来开机试试。 最后这套一千五百元组装出来的电脑可以流畅,市面所有游戏也是同价位内最强神机,喜欢的小伙伴可以直接抄作业。好了,观众老爷们,本期视频就到此结束了,我们下期再见!