精华内容
下载资源
问答
  • Systrace的工作原理例子解读

    千次阅读 2017-07-05 10:38:31
    Systrace的工作原理例子解读译文地址:https://source.android.com/devices/tech/debug/systrace如果图片显示有问题,请访问简书,地址http://www.jianshu.com/p/6f528e862d31systrace是一个分析android性能问题的...

    Systrace的工作原理及例子解读

    译文地址:https://source.android.com/devices/tech/debug/systrace

    如果图片显示有问题,请访问简书,地址http://www.jianshu.com/p/6f528e862d31

    systrace是一个分析android性能问题的基础工具,但本质上是其他某些工具的封装,包括:PC端的atrace,设备端的可执行文件(用于控制用户控件的追踪以及配置ftrace,即Linux内核中的主要跟踪机制)。Systrace使用atrace开启追踪,然后读取ftrace的缓存,并且把它重新转换成HTML格式。

    systrace由Google Android和Google Chrome共同开发,为Catapul开源t项目的一部分。 除了systrace,Catapult还包括其他有用的工具。 例如,ftrace相比与systrace和atrace具有更多的功能,并且包含一些对调试性能问题至关重要的高级功能。 (这些功能需要root权限)

    运行systrace

    在Pixel/Pixel XL上调试震动时,可以通过以下命令:

    ./systrace.py sched freq idle am wm gfx view sync binder_driver irq workq input -b 96000

    当systrace与GPU和显示管道活动所需的附加跟踪点结合使用时,您可以跟踪所有从用户输入到屏幕显示的帧。设置大的缓冲区可以避免事件的丢失(通常表现为某些CPU在跟踪中的某个点之后没有任何事件)。

    当使用systrace时,注意每个事件都是在CPU上触发的。

    注意:硬件中断不受CPU控制也不会在ftrace中触发事件,实际提交到跟踪日志是由中断处理程序完成的,但一些损坏的驱动会造成中断的延迟,因此最关键点因素还是CPU本身。

    因为systrace构建在ftrace之上,ftrace在CPU上运行,所以硬件改变log必然会写入到的ftrace缓冲区。这就意味着如果你好奇为什么显示栏改变了,那么你可以看CPU在该转换点上的运行内容(CPU上运行的事件均被保存到log中)。这个概念是使用systrace分析性能的基础。

    例子:working frame

    这是一个描述正常UI管道过程的systrace,请事先下载好zip文件,点击下载zip文件,解压并在浏览器中打开systrace_tutorial.html,注意:这个文件要比一般的html文件大得多。

    对于一个持续的定期的工作负载,例如TouchLatency,UI管道,通常包含以下几个阶段:

    1. SurfaceFlinger中的EventThread唤醒了应用程序UI线程,表明现在是渲染新帧的时候了。
    2. 应用程序使用CPU和GPU资源在UI线程,RenderThread和hwuiTasks中渲染帧。这部分暂UI的大部分。
    3. 应用程序通过binder将绘制好的帧发送到SurfaceFlinger并进入睡眠状态。
    4. SurfaceFlinger中的第二个EventThread唤醒SurfaceFlinger来触发组合和显示输出。如果SurfaceFlinger确定没有任何工作要完成,它将返回睡眠状态。
    5. SurfaceFlinger通过HWC / HWC2或GL处理组合。 HWC / HWC2组合更快,更低的功率,但会收到SOC的限制。这一步通常需要4-6ms,但是可以与步骤2重叠,因为Android应用程序总是三重缓冲。 (虽然应用程序总是三重缓冲,但在SurfaceFlinger中只能有一个待处理帧,因此和双重缓存差不多。)
    6. SurfaceFlinger通过供应商驱动程序调度最终输出,并返回睡眠状态,等待EventThread唤醒。

    让我们从15409ms开始查看帧:

    图1 正常的UI以及EventThread

    图1是正常的帧(对应阶段1),要了解UI管道如何工作这是一个很好的示范。 TouchLatency的UI线程行在不同时间包含不同的颜色。 不同的线代表线程的不同状态:

    灰色: 睡眠。
    蓝色: 可以运行(它可以运行,但还未被调度运行)。
    绿色: 正在运行(调度程序认为它正在运行)。

    注意:中断处理程序没有CPU时间轴中显示,因此在线程运行的过程中虽然没有显示中断,但实际上你可能已经执行了终端或者softirqs,最终需要通过检查trace(进程0)来判断终端是否发生。

    红色: 不间断的睡眠(通常发生在内核锁上), 指出I / O负载,对于性能问题的调试非常有用。
    橙色: 由于I / O负载导致的不间断睡眠。
    要查看不间断睡眠的原因(可从sched_blocked_reason跟踪点获取),请选择红色不间断睡眠切片。

    当EventThread正在运行时,TouchLatency的UI Thread就变成了可以运行的蓝色。 要查看是什么,请点击蓝色部分:

    图2 TouchLatency的UI线程

    图2(对应阶段1) 显示的是EventThread运行后,TouchLatency的tid6843唤醒UIThread为其工作,这一个信息可以从下方的“wakeup from tid:6843”看出

    图3 (对应阶段2)UI线程被唤醒,开始渲染帧,然后插入SurfaceFlinger的绘制帧队列

    如果’binder_drivier’tag被开启后,你可以选择binder transaction来查看整个过程。

    图4(对应阶段3) Binder transaction

    图4(对应阶段3) Binder transaction

    如图4所示,在15423ms处,SurfaceFlinger的Binder:6832_1由于pid9579的调用变为了可运行状态。在binder tracsaction的两侧你也可以看到缓冲队列。

    在SurfaceFlinger的queueBuffer中,TouchLtency的待绘制帧数量从1变为了2.

    图5(对应阶段3) 待处理帧从1到2。

    图5显示了三重缓冲,其中有两个完整的帧,应用程序将很快开始渲染第三个帧。 这是因为我们已经删除了一些帧,所以应用程序会保留两个挂起的帧而不是一个帧,以避免跳帧。

    随后,SurfaceFlinger的主线程被第二个EventThread唤醒,因此它可以将的待处理帧输出到显示器:

    图6(阶段4) SurfaceFlinger的主线程由第二个EventThread唤醒。

    SurfaceFlinger首先锁定较早的待绘制缓冲区,这将导致挂起的缓冲区数从2减为1:

    图7(阶段4)SurfaceFlinger绘制最早的待绘制缓冲帧

    锁定缓冲区后,SurfaceFlinger进行组装并显示新帧。

    图8(阶段5). SurfaceFlinger进行组装并提交最终的框架。

    接下来,’mdss_fb0’在CPU 0上唤醒。’mdss_fb0’是显示管道的内核线程,用于将渲染的帧输出到显示器。 我们可以看到’mdss_fb0‘的信息(向下滚动查看)。

    图9(阶段6)'mdss_fb0'唤醒CPU0

    展开全文
  • 在前一片文章(SkLearn 对上证50成分股聚类 )中简单介绍了投资组合优化理论,在此进一步介绍下该理论,以及如何进行Portfolio Optimization。1. Markowitz投资组合理论Markowitz投资组合理论是投资组合优化的理论基础...

    在前一片文章(SkLearn 对上证50成分股聚类 )中简单介绍了投资组合优化理论,在此进一步介绍下该理论,以及如何进行Portfolio Optimization。

    1. Markowitz投资组合理论

    Markowitz投资组合理论是投资组合优化的理论基础。
    马克维茨被公认为是现代投资组合理论的开创者,他与夏普、米勒共同获得1952年的诺贝尔经济学奖。
    1952年他在自己著名的论文《资产选择:有效的多样化》中首先提出了投资组合理论。马克维茨的理论主要包括“均值方差分析理论”和“有效边界模型”,他用期望收益率表示收益,用方差表示风险。该理论证明了“通过证券组合只能消除非系统风险,而不能消除系统性风险”。


    2. 投资组合优化的目标

    (1)降低风险
    (2)在等风险的情况下,通过调整投资组合以获取更高收益


    3. 如何进行投资组合优化

    这里就需要用到Markowitz投资组合理论。
    均值方差分析理论解释了为什么要建立投资组合
    有效边界模型理论解释了如何进行投资组合优化

    3.1 均值方差分析理论

    期望收益率表示收益,用方差表示风险。
    用前文的那个极端例子:

    有n个不相关的资产,其收益率都是r,风险都是v,优化后的投资比例应该是均分

    也就是说通过分散投资降低方差即投资风险。
    以期望收益E来衡量证券收益,以收益的方差δ2表示投资风险
      minδ2(rp)=wiwjcov(ri,rj)

      E(rp)=wiri

      式中:
      rp——组合收益;

      rirj——第i种、第j种资产的收益;

      wiwj——资产i和资产j在组合中的权重;

      δ2(rp)——组合收益的方差即组合的总体风险;

      cov(r,rj)——两种资产之间的协方差。
     

    3.2 有效边界模型

    通过下面的公式:
      

    minδ2(rp)=wiwjcov(ri,rj)

      

    E(rp)=wiri

    我们可以得到minδ2(rp)E(r_p)的相关的一个公式,并且该公式存在极值点。

    3.3 2项资产的投资组合优化

    资产 A B
    投资比例 x1 x2
    回报率 r1 r2
    风险 δ1 δ2
    协方差 ρ

      
    回报率:
      

    r=x1r1+x2r2

    风险:
      

    δ2=x21δ22+x22δ22+2x1x2ρ

    令投资总数为为单位1:
      r=x1r1+(1x1)r2 …………(1)

      x1=rr2r1r2 ……………………(2)

      var=x21δ22+(1x1)2δ22+2x1x2ρ …………(3)

    将(2)代入(3)

      δ2=(rr2r1r2)2δ22+(rr1r2r1)2δ22+2x1x2ρ…………(4)

    最后我们的到了δ2和r的关系公式:公式(4),并且从(4)可以看出该公式是一个一元二次公式。
    这里写图片描述
    如图中曲线即为我们需要的投资边界(Efficient Portfolio Frontier),该曲线右边是我们可以采用的投资组合,曲线左边是在该投资模型下不可能取得的投资组合。
    只有在该曲线上的投资组合才是最优投资组合。

    3.3 3项资产的投资组合优化与切线模型

    (1)3项资产的投资组合
    在引入一项投资资产(石油):

    这里写图片描述

    从图中可以看出引入石油后的曲线(蓝色曲线)要优于未引入石油的曲线(粉色曲线)

    (2)切线模型
    然后引入一种无风险资产,视该资产的风险为零,收益(rf)固定。
    如此可以一条直线并与未引入无风险资产的曲线相切。
    该切线组合极为最优组合,是一般投资经理应该选择的投资组合。
    切线斜率:

    ratio=rrfδ

    4. 实例

    资产池:
    海螺水泥, 中国中车, 光大银行, 中国石油, 中信证券, 中国船舶, 国金证券, 青岛海尔
    采用2015年1年期国债作为无风险资产,年华收益率为3.14%

    日回报率:
    0.0015 0.0012 0.0024 0.0044 -0.0005 0.0054 0.0015 0.0057
    风险:
    0.0199 0.0168 0.0223 0.0328 0.0144 0.0882 0.0187 0.0351
    协方差矩阵:
    0.0004 0.0001 0.0001 0.0003 0.0001 0.0002 0.0002 0.0002
    0.0001 0.0003 0.0001 0.0002 0.0001 0.0000 0.0001 0.0001
    0.0001 0.0001 0.0005 0.0003 -0.0000 0.0007 0.0003 0.0002
    0.0003 0.0002 0.0003 0.0011 0.0001 0.0006 0.0003 0.0006
    0.0001 0.0001 -0.0000 0.0001 0.0002 0.0001 0.0001 0.0001
    0.0002 0.0000 0.0007 0.0006 0.0001 0.0078 0.0004 0.0004
    0.0002 0.0001 0.0003 0.0003 0.0001 0.0004 0.0003 0.0003
    0.0002 0.0001 0.0002 0.0006 0.0001 0.0004 0.0003 0.0012

    最后投资组合优化如图:
    这里写图片描述

    切点:
    (风险,日回报率) = 0.02125, 0.0039
    对应组合:

    海螺水泥 中国中车 光大银行 中国石油 中信证券 中国船舶 国金证券 青岛海尔
    0.0003 0.2434 0.2012 0.1221 0 0.0296 0 0.4033
    展开全文
  • 组合数学之二 —— 容斥原理及应用

    千次阅读 2017-12-20 15:48:15
    内容主要来自《组合数学》+博主的思考容斥原理之前在“组合数学一”中提到过容斥原理 我们在这里直接给出推论: 设Ai表示在集合S中拥有特征Pi的元素子集,则集合S中至少具有性质P1,P2,P3,…,Pm之一的对象个数由下...

    这会是一个大型连载blog
    内容主要来自《组合数学》+博主的思考

    容斥原理

    之前在“组合数学一”中提到过容斥原理
    我们在这里直接给出推论:

    设Ai表示在集合S中拥有特征Pi的元素子集,则集合S中至少具有性质P1,P2,P3,…,Pm之一的对象个数由下式表示:
    这里写图片描述

    在这一节中,有一个经典问题

    ∞ 例一

    确定多重集合 T={3a,4b,5*c} 的10组合的数目

    这道题我们要充分利用容斥原理:
    设 T*={ ∞a,∞b,∞c }
    P1=T
    的10组合中a出现多于3次
    P2=T的10组合中b出现多于4次
    P3=T
    的10组合中c出现多于5次
    Ai表示拥有Pi性质的10组合的数目,S是T*的10组合数

    这里写图片描述

    我们看一下每种集合的求法:
    首先S的求法很简单(十个位置,三种元素),经典的隔板法:
    这里写图片描述

    我们重点是在Ai的求法,我们以A1为例(其余的都是同理):
    A1表示 “T*的10组合中a出现多于3次” 的组合数,那我们就可以确定这10个数中一定至少有4个a
    所以原问题就变成了:有6个位置,3种元素,每个元素不限制出现次数,由此形成的组合数
    这里写图片描述

    那么剩下的所有集合大小都可以如上求出:
    这里写图片描述

    注:这个问题也可以用生成函数解决,本文中就不再冗述了

    ∞ 例二

    满足:1<=X1<=5,-2<=X2<=4,0<=X3<=5,3<=X4<=9
    的方程 (X1+X2+X3+X4=18) 的正整数解有多少?

    我们引入一些新变量:
    Y1=X1-1,Y2=X2+2,Y3=X3,Y4=X4-3

    Y1+Y2+Y3+Y4=16 ①

    则,关于Xi的方程有解当且仅当:
    0<=Y1<=4,0<=Y2<=6,0<=Y3<=5,0<=Y4<=6
    设S是①所有的非负整数解
    P1是Y1>=5的性质,P2是Y2>=7的性质,P3是Y3>=6的性质,P4是Y4>=7的性质
    Ai是具备Pi性质的方程解
    这里写图片描述
    这里写图片描述

    错位排序

    我们先来一个情境引入:
    话说七仙女又到凡间泡澡了。。。
    突然,天降大雨(估计是王母娘娘不高兴了)七仙女都急忙上岸,随便抓起一套衣服就穿上了
    那么七个人全部穿错衣服有多少种情况呢?

    (mdzz的例子。。。)
    这个就是错位排列
    我们直接给出式子:
    这里写图片描述
    现在我们提出一个结论:
    这里写图片描述

    实际上,Dn是最接近n!*e^-1的整数

    考虑随机选出{ 1,2,…,n }的一个排列的实验,时间E是没有整数在其自然位置上排列,即选出的这个排列是一个错位排序,因此 |E|=Dn ,且E的概率为:
    这里写图片描述
    这样在本节一开始的“七仙女的故事中”,概率就为D7/7!
    从效果上看,概率就是e^-1
    即使是有一万个仙女,最后的答案也是e^-1

    下面我们就讨论一些Dn满足的其他便于其求值的关系

    结论一

    这里写图片描述
    其中n>=3
    初始值:D1=0,D2=1

    结论二

    这里写图片描述
    其中n>=2

    以上两个小结论类似于阶乘的公式
    这里写图片描述

    我们还是看一下例题:

    ∞ 例三

    再一次聚会上,有n位男士和n位女士在跳舞前存放了ta们的帽子,在聚会结束的时候随机返还给ta们这些帽子
    如果每位男士得到的都是一顶男帽,女士得到的都是一顶女帽,但又都不是他们的,有多少方法呢?

    如果没有限制,那么方法数就是(2n)!
    如果加上男士得到男帽,女士得到女帽,那么就有(n! * n!)种方法
    如果再加上没有人得到ta们自己的帽子,则有 (Dn*Dn)种 方法

    展开全文
  • js 排列 组合 的一个简单例子

    千次阅读 2016-10-24 09:18:25
    最近工作项目需要用到js排列组合,于是就写了一个简单的demo。 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了, 排列的实现方式: 全排列主要用到的是递归和数组的插入 比如12的全排列,首先...

    最近工作项目需要用到js排列组合,于是就写了一个简单的demo。 前几天在网上找到一个写全排列A(n,n)的code感觉还可以,于是贴出来了,

    排列的实现方式: 全排列主要用到的是递归和数组的插入 比如12的全排列,首先把1拿出来放到elementCur,再获取由1组成的数组[2],然后在循环把1插入到0,1的位置后再返回1,2][2,1] 如果是123那么首先获取23的全排列[2,3][3,2],然后在插入1,[1,2,3][2,1,3][2,3,1][1,3,2][3,1,2][3,2,1] 

      /*
            全排列主要用到的是递归和数组的插入
            比如12的全排列,首先把1拿出来放到elementCur,再获取由1组成的数组[2],然后在循环把1插入到0,1的位置后再返回1,2][2,1]
            如果是123那么首先获取23的全排列[2,3][3,2],然后在插入1,[1,2,3][2,1,3][2,3,1][1,3,2][3,1,2][3,2,1]
            */
            function permutate(array/*需要进行全排列的一维数组*/, permutatedArray/*存放返回结果*/) {
                if (!permutatedArray) {
                    permutatedArray = [];
                }
                if (array.length > 1) {
                    //弹出第一个数
                    var elementCur = array.shift();
                    //排列剩余的数组
                    permutate(array, permutatedArray);
                    //返回剩余的数组的排列长度
                    var permutatedArrayLen = permutatedArray.length;
                    //第一个数与其他剩余数组所有数组组合
                    for (var j = 0; j < permutatedArrayLen; j++) {
                        //弹出不齐的组
                        var p = permutatedArray.shift();
                        //把当前元素放到排列好的数组的所有位置
                        for (var i = 0; i <= p.length; i++) {
                            //复制排列好的数组
                            var r = p.slice(0);
                            //插入数据到数组的位置
                            r.splice(i, 0, elementCur);
                            //保存
                            permutatedArray.push(r)
                        }
                    }
                    //退出条件
                } else {
                    permutatedArray.push([array[0]]);
                }
                return permutatedArray;
            }

    那么我们需要一个组合C(m,n)的API,code如下,组合实现的原理非常简单,就是依次循环数组的元素,循环的嵌套层数是有m来决定的,内部的循环下标在外部的下标加1。所以用function来组装

      /*
            组合实现的原理非常简单,就是依次循环数组的元素,循环的嵌套层数是有m来决定的,内部的循环下标在外部的下标加1。所以用function来组装
            */
            function combination(arr/*n需要组合的一维数组*/, num/*m需要取几个元素来组合*/, fun/*对组合后的元素的处理函数,如全排列permutate*/) {
                /*这里假设num最大值为10 一般A(n,m)中的m应该不会太大 */
                if (arr.length < num || num > 10)
                {
                    return [];
                }
                var variable = ["a", "b", "c", "d", "e", "f", "g", "h", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u"];
                var replaceStr = "#$#";
                var str = " var arr=arguments[0]; var fun=arguments[1];  var ret=[]; for (var a = 0; a < arr.length; a++) { "+replaceStr+" } return ret;"
                for (var i = 1; i < num; i++) {
                    str = str.replace(replaceStr, " for (var " + variable[i] + " =" + variable[i - 1] + "+ 1; " + variable[i] + " < arr.length; " + variable[i] + "++) { " + replaceStr + "  }")
                }
                var temp = " var temp= []; ";
                for (var i = 0; i < num; i++) {
                    temp += "temp.push(arr[" + variable[i] + "]); ";
                }
                if (fun) {
                    temp += " ret.push(fun(temp)); ";
                }
                else {
                    temp += " ret.push(temp); ";
                }
                str = str.replace(replaceStr, temp);
                //console.log(str);
                return (new Function(str)).apply(null, [arr, fun]);
            }

    那么我们一个普通的排列A(n,m)就很简单了。调用方式如下:

     var a = combination([1, 2, 3, 4, 5, 6], 3, permutate);
            for (var i = 0; i < a.length; i++) {
                for (var j = 0; j < a[i].length; j++) {
                    console.log(a[i][j].join(''));
                }
            }

     其实排列组合网上还有很多很好的精辟实现,比如以下code,个人已经加入了简单的原理描述:

      /*
            组合主要用到了循环加递归的方式 实现的,个人觉得很是精辟,
            举例来说吧choose([1,2,3,4,5,6], 3)
            第一次循环的时候 arr是[1,2,3,4,5,6],size=3,result=[],
            经过一次递归后的结果是什么样的了?递归里面也有循环递归
            经过第一次循环第一次递归变为arr=[3,4,5,6],size=1,result=[1,2],所以结果就出来了[1,2,3][1,2,4][1,2,5][1,2,6]
            那么第一次循环第二次递归arr=[4,5,6],size=1,result=[1,3],所以结果就出来了[1,3,4][1,3,5][1,3,6]
            那么第一次循环第三次递归arr=[5,6],size=1,result=[1,4],所以结果就出来了[1,4,5][1,4,6]
            那么第一次循环第四次递归arr=[6],size=1,result=[1,5],所以结果就出来了[1,5,6]
            那么第二次循环第一次递归变为arr=[4,5,6],size=1,result=[2,3],所以结果就出来了[2,3,4][2,3,5][2,3,6]
            */
            function choose(arr, size) {
                var allResult = [];
                (function (arr, size, result) {
                    var arrLen = arr.length;
                    if (size > arrLen) {
                        return;
                    }
                    if (size == arrLen) {
                        allResult.push([].concat(result, arr))
                    } else {
                        for (var i = 0 ; i < arrLen; i++) {
                            var newResult = [].concat(result);
                            newResult.push(arr[i]);
    
                            if (size == 1) {
                                allResult.push(newResult);
                            } else {
                                var newArr = [].concat(arr);
                                newArr.splice(0, i + 1);
                                arguments.callee(newArr, size - 1, newResult);
                            }
                        }
                    }
                })(arr, size, []);
                return allResult;
            }
            /*
        这里的排列和组合一样 也是运用循环和递归的思想,比如arr=[1,2,3] ,size=3
        第一次循环curItem=1 第一次递归newArr=3,result=[1,2] 所以结果是[1,2,3]
        第一次循环curItem=1 第二次递归newArr=2,result=[1,3] 所以结果是[1,3,2]
        第二次循环curItem=2 第一次递归newArr=3,result=[2,1] 所以结果是[2,1,3]
        第二次循环curItem=2 第二次递归newArr=1,result=[2,3] 所以结果是[2,3,1]
        */
            function queue(arr, size) {
                if (size > arr.length) { return; }
                var allResult = [];
    
                (function (arr, size, result) {
                    if (result.length == size) {
                        allResult.push(result);
                    } else {
                        for (var i = 0, len = arr.length; i < len; i++) {
                            var newArr = [].concat(arr),
                                curItem = newArr.splice(i, 1);
                            arguments.callee(newArr, size, [].concat(result, curItem));
                        }
                    }
                })(arr, size, []);
    
                return allResult;
            }
            function showResult(result) {
                console.log('The number of result sets: ' + result.length);
                for (var i = 0, len = result.length; i < len; i++) {
                    console.log(result[i]);
                }
            }
    
            // showResult(choose([1, 2, 3, 4, 5, 6], 3));
            showResult(queue([1, 2, 3], 3));

    有不当的地方还请大家指正!

    展开全文
  • 容斥原理 就是人们为了不重复计算重叠部分,想出的一种不重复计算的方法。 先来认识一下这两个符号:与(如图) 蓝色的圈就是c1c2,红色的圈围起来的就是c1c2 二.例题:组合数学 1.题目 1.1.题目描述 八是...
  • ...Markowitz投资组合理论是投资组合优化的理论基础。  马克维茨被公认为是现代投资组合理论的开创者,他与夏普、米勒共同获得1952年的诺贝尔经济学奖。  1952年他在自己著名的论文《资产选择
  • Adaboost算法原理分析和实例+代码(简明易懂)

    万次阅读 多人点赞 2017-05-02 08:52:31
    Adaboost算法原理分析和实例+代码(简明易懂) ... 本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理。也许是自己能力有限吧,很多...网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘...
  • 深度学习初步,全连接神经网络,MLP从原理到实现(二)原理部分,过拟合,激活函数,batchsize和epochs,训练DL模型的建议 深度学习初步,全连接神经网络,MLP从原理到实现(三)实现部分,用java实现MLP 下面的...
  • 认识CPU的工作原理

    万次阅读 多人点赞 2018-08-01 11:40:18
    学习CPU的工作原理 ...因此从这个意义上来说,CPU正是由晶体管组合而成的。 简单而言,晶体管就是微型的电子开关。它们是构建CPU的基石,你可以把一个晶体管当做一个点灯开关,它们有个操作位,分...
  • 鸽巢原理 天上有十个鸽子,这十个鸽子要飞到九个鸽巢里,无论怎样飞,我们会发现至少会有一 个鸽巢里面放两个鸽子,这一现象就是我们所说的“鸽巢原理”。鸽巢定理由狄里克利于1834 年提出,当时命名为 ...
  • Socket原理讲解

    万次阅读 多人点赞 2019-07-18 15:50:36
    6、一个例子 1、网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道、FIFO、消息队列) 同步(互斥量、条件变量、读写锁、文件和写记录...
  •  专辑的开头贡献一篇容斥原理讲得非常好的文章,讲得十分清楚,很容易就明白容斥原理是什么。  http://www.cppblog.com/vici/archive/2011/09/05/155103.html。  我个人认为容斥原理就是用来解决基于集合的...
  • TRIZ系列-创新原理-5-合并原理

    千次阅读 2014-10-11 13:18:42
    组合原理表述如下:1)在空间上,将相同的物体或者相关的操作加以组合;2)在时间上,将相同或相关的操作进行合并。在空间上进行组合其实是一种组件集成或者功能集成,可以提高系统的性能:整体性和便利性。提高系统...
  • 详解卡尔曼滤波原理

    万次阅读 多人点赞 2017-03-18 13:54:15
    详解卡尔曼滤波原理 在网上看了不少与卡尔曼滤波相关的博客、论文,要么是只谈理论、缺乏感性,或者有感性认识,缺乏理论推导。能兼顾二者的少之又少,直到我看到了国外的一篇博文,真的惊艳到我了,不得不佩服作者...
  • 一文读懂BERT(原理篇)

    万次阅读 多人点赞 2019-04-19 08:37:17
    一文读懂BERT(从原理到实践) 2018年的10月11日,Google发布的论文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,成功在 11 项 NLP 任务中取得 state of the art 的结果,赢得...
  • TRIZ系列-创新原理-6-多用性原理

    千次阅读 2014-10-11 23:19:30
    表述如下:1)是一个物体具备多项功能;2)消除了该功能在其它物体内存在的必要性后,进而裁减其它物体;让一个物体具备多项功能有两种...这两种情况跟组合原理中的一些情况类似。2)所描述的情况则包括:A) 在系统
  • 例子Text Editor创建了一个简单的文本编辑器,代码参考fltk安装包里的例子.下面是对此例子的一些理解。1.主程序同fltk教程01中描述的基本一样:创建主窗口-->显示主窗口-->进入主循环。下面是main函数:// 主函数...
  • Adaboost 算法的原理与推导

    万次阅读 多人点赞 2014-11-02 23:31:07
    Adaboost 算法的原理与推导 0 引言 一直想写Adaboost来着,但迟迟未能动笔。其算法思想虽然简单:听取多人意见,最后综合决策,但一般书上对其算法的流程描述实在是过于晦涩。昨日11月1日下午,在我组织的...
  • 1、遍历组合数的方法原理 组合数是高中代数的知识,这里我就不废话了。 这里讨论的是如何遍历组合数。举个例子,一个电影院里面,有十个座位和8个客人,到底有多少种坐法?(不考虑客人之间的相互位置。)高中组合...
  • TRIZ系列-创新原理-7-嵌套原理

    万次阅读 2014-10-11 23:40:56
    原理表述如下:1)把一个物体嵌入另外一个物体,然后将这两个物体再嵌入第三个物体,以此类推;这个原理又叫俄罗斯娃原理,目的是在不影响原有功能的情况下:A) 在需要时,可以减少系统的体积和便于携带,也可以...
  • TRIZ系列-创新原理-1-分割原理

    万次阅读 2014-10-07 11:29:21
    分割原理的具体描述如下:1)把一个物体分成相互独立的几个部分;2)把一个物体分成容易组装和拆卸的部分;3)提高系统的可分性,以实现系统的改造。分割原理要表达的其实就是我们平常所说的分而治之的策略,这是我们...
  • 关于IP网络号和主机号的原理

    万次阅读 多人点赞 2017-06-20 16:09:39
    如172.16.10.2,因为172.16.10.2是B类地址,所以172.16所代表的位就是网络号的位,后面10.2代表的位是主机位,A类C类和例子结构相同,就是位数不同。  2、如果不是标准的ip地址,就是要划子网的,
  • TRIZ系列-创新原理-24-中介物原理

    千次阅读 2014-10-23 22:07:08
    自服务原理的具体表述如下:
  • 【MySQL笔记】正确的理解MySQL的MVCC及实现原理

    万次阅读 多人点赞 2019-07-05 15:43:06
    MVCC实现原理 MVCC相关问题 前提概要 什么是MVCC? MVCC MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在...
  • TRIZ系列-创新原理-8-重量补偿原理

    千次阅读 2014-10-12 07:33:29
    重量补偿原理的表述如下:1)将某一物体与另一种提供上升力的物体组合,以补偿其重量;2)通过与环境(利用空气动力,流体动力或其它力等)的相互作用,实现对物体的重量补偿;重力使得我们能够稳稳的依附在地面,...
  • Nginx工作原理和优化总结。

    万次阅读 多人点赞 2013-05-16 11:04:53
    NGINX以高性能的负载均衡器,缓存,和web...首先我们先了解其工作原理。 1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客...
  • DFS原理白话解析

    万次阅读 多人点赞 2018-11-04 11:20:57
    看了许多的关于dfs的博客,自己也研究了好多遍,最终算是入门了,下面就简单的个人理解的原理以及结合一个简单的全排列实例进行讲解。 原理简介 dfs基于递归思想,递归思想就是把一个事拆分成若干见相同的小事共同...
  • pypy 原理

    千次阅读 2018-07-03 14:33:27
    pypy 原理 pypy 原理 为何 PyPy 是趋势? 即时编译: PyPy和它的未来 PyPy is Hard to Understand ...GIL,即全局解释器锁(Global Interpreter Lock),是计算机...常见例子有CPython(JPython不使用GIL)与Rub...
  • JPEG压缩原理

    万次阅读 多人点赞 2012-10-27 11:04:54
    本文介绍JPEG压缩技术的原理,对于DCT变换、Zig-Zag扫描和Huffman编码,给出一个较为清晰的框架。1. JPEG压缩的编解码互逆过程:编码解码2. 具体过程:(这里仅以编码为例,解码过程为其逆过程) A. 将原始图像分为...
  • 容斥原理详解

    万次阅读 多人点赞 2018-08-13 19:32:27
    容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。 描述  容斥原理可以描述如下:  要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 148,963
精华内容 59,585
关键字:

关于组合原理的例子