怎么在一列数据中找到相加等于几个目标值,且不能重复使用?

一、填空题:(每题1分,10题,共10分)

1.六西格玛是一套系统的、集成的业务改进方法体系,是旨在持续改进

企业业务流程,实现客户满意的管理方法。

2.6σ在统计上表示一个流程或产品在一百万次使用机会中只出现

3.质量管理的三个阶段:质量检验阶段、统计质量控制阶段、全面质量

5.六西格玛管理的改进流程DMAIC分别是定义、测量、分析、改善、

6.6σ的核心概念有客户、流程、现有能力、应有能力、缺点、变异。

7.一个过程由三个工作步骤构成(如图所示),每个步骤相互独立,每个

则整个过程的流通合格率为( 92% )

8.问卷调查的三种调查方法是自填问卷法、电话调查法、访谈法

9.QFD的作用是将顾客的期望转化成为技术要求。

10.排列图是建立在帕累托(Pareto)原则之上的,即80%的问题源于20%

11.流程图的类型有传统的流程图、商务流程图、特殊分析流程图、

12.影响流程波动的因素有普通原因的波动特殊原因的波

动,六西格玛解决的是特殊原因的波动引起的波动。

13.制造业的七种浪费:纠正/返工、过量生产、运输、库存、不必要的动

作、不必要的流程、等待。

14.已知化纤布每匹长100 米,每匹布内的瑕疵点数服从均值为10 的

Poisson 分布。缝制一套工作服需要4 米化纤布。问每套工作服上的瑕

疵点数应该是:均值为( 0.4 )的(Poisson 分布)

15.产品流程包括人、机、料、法、环、测

于等于30% 时,表示测量系统完全不可用,数据不能用来分析。17.对连续型数据的测量系统分析结果进行判定要看的参数包括:

18.测量系统的五个特性是重复性再现性偏倚线性

稳定性。19.数据类型分为连续型、可数型、可区分型三种类型。

20.正态分布特征包括:1)无论分布多分散,其总几率为 1 。 2)其取

值相对于平均值对称,3)对其进行正态概率检验时,P值小于0.05 ,表明数据不服从正态分布。

21.箱线图框内中线表示中位数,框的上边线表示第75个百分位

点,框的下边线表示第25个百分位点,上尾的上端是上观测

值,下尾的下端是下观测值 ,箱子中的数据占总数据的

50% 。箱线图数据要求大于 9个。

22.可区分型数据的测量系统分析三种方法重复性=判断正确的的次

数/总数再现性=操作员之间判断一致的次数/零件总数

有效性=判断正确的次数/总数。

23.对于连续型数据,比较_目标均值采用单样本t检验,比较_两个均值 _

采用双样本t检验,比较_两个以上均值_采用方差分析,比较_多个方差_采用变方检验。

24.当Y为离散数据,X为连续型数据,统计分析用二进制Logistic 回

25.回归分析结果中,S表示误差的标准差

26.一般线性模型(GLM)能在考虑连续的 X,s 的影响条件下,反映出

非连续的 X 对Y的影响。

小时,__找的 X是对的,但还有重要的 X没找到__;P>0.05,R很大时,无统计相关,应该收集更多的数据;P>0.05,R很小时,实验失败,什么也没找到。

28.DOE实验的策略有一次一个保留胜者全因子设计。

29.试验设计(DOE)必须经由__分析因子设计_,才能分析出各X的主效

应和交互作用是否统计上显著。

30.防错设计可以分为:预防错误的发生,错误发生后及时可以发现,缺陷

31.FMEA(失效模式和影响分析)中,通常风险顺序数(RPN)大于__120 __

时,需要采取改进措施,以减少风险。

32.连续数据SPC·判断流程失控的三个典型规则为:打点出界、连续

九点在中性线一侧、连续六点增加或者减小。

33.残差应服从__随机__分布。

34.控制图的控制上、下限与中线分别是UCL= μ+3σ CL=μ

35.某生产线上顺序有3 道工序,其作业时间分别是8 分钟、10 分钟、6 分

钟,则生产线的节拍是:( 120分钟)

36.下述网络图中,关键路径是?(时间单位:天)( 2 )

}

整个项目都托管在了 Github 上:

查找更为方便的版本见:

这一节内容可能会用到的库文件有 Merge,同样在 Github 上可以找到。

/// 三向归并排序。 /// 默认构造函数。 /// 利用三项归并排序将数组按升序排序。 /// 自顶向下地对数组指定范围内进行三向归并排序,需要辅助数组。 /// 返回两个元素中较小的那个。 /// 将指定范围内的元素归并。


阈值合适时,大约会有10%的性能提升。
阈值在 10 以下都是比较合适的。

* 用实验评估正文中所提到的归并排序的三项改进(请见练习 2.2.11)的效果, * 并比较正文中实现的归并排序和练习 2.2.10 所实现的归并排序之间的性能。 * 根据经验给出应该在何时为子数组切换到插入排序。
* 在实验中用大型随机数组评估练习 2.2.8 所做的修改的效果。 * 根据经验用 N(被排序的原始数组的大小)的函数描述条件语句

事实上 k 的取值无关紧要,实验也证明了这一点。
算法大致可以分为以下几个步骤
首先将数组划为 k 份,用一个数组 mids 记录这 k 个子数组的分割位置
随后递归的调用 Sort 方法,将这 k 个子数组排序
随后将这 k 个子数组归并,
每次归并时遍历取 k 个子数组中值最小的一个,然后对应子数组的指示器 + 1
上面这一步是 O(k) 的,可以用堆或者败者树优化为对数级别

/// 同时归并的数组数目。 /// 默认构造函数。 /// 用 k 向归并排序对数组 a 进行排序。 /// 自顶向下地对数组指定范围内进行 k 向归并排序,需要辅助数组。 /// 将指定范围内的元素归并。 // 将最小值赋给归并数组,对应子数组的归并位置+1

差距还是比较明显的,由于 Merge 会调用多次,而用于启动递归的 Sort 方法只会调用一次。

大致上会是一个对数函数,用 Excel 做了简单的拟合。

* 用归并将大型随机数组排序, * 根据经验用 N (某次归并时两个子数组的长度之和) * 的函数估计当一个子数组用尽时另一个子数组的平均长度。 // 大致上是一个对数函数

自底向上会快一些,省去了递归过程中函数重复调用的时间。

* 自顶向下和自底向上。 * 使用 SortCompare 比较自顶向下和自底向上的归并排序的性能。

完全有序时只需要一次归并(直接输出),
逆序时需要 n - 1 次归并(退化为插入排序),
平均需要 n/2 次归并。
所以分别需要 500,500000, 次归并。

* 编写一个测试用例, * 生成不均匀的测试数据,包括: * 一半数据是 0,一半数据是 1 * 一半数据是 0,一半是随机 int 值。 * 评估并验证这些输入数据对本节讨论的算法的性能的影响。 // 选择排序的耗时与输入值的内容无关,不受影响。 // 对于插入排序,以上几种情况都是重复值较多的情况,插入排序的速度会加快。 // 希尔排序本质上也是插入排序,因此也会更快一些。

主要说一下第二个的实现,把一个数组循环左移/右移几位即可。

* 编写一个测试用例,生成部分有序数组,包括: * 95% 有序,其余部分为随机值。 * 所有元素和它们的正确位置的距离都不超过 10。 * 5% 的元素随机分布在整个数组中,剩下的数据都是有序的。 * 评估并验证这些输入数据对本节讨论的算法的性能的影响。 // 选择排序的性能只与数组大小有关,以上三种情况耗时都是近似的。 // 插入排序的性能与逆序对数量有关,部分有序的情况下耗时会小于完全随机。 // 希尔排序与插入排序类似。 // 95% 有序,其余部分为随机值。 // 所有元素和它们的正确位置的距离都不超过 10。 // 5% 的元素随机分布在整个数组中,剩下的数据都是有序的。

这里实现了一个 Pair 类,用来排序。

每一个元素都有相应的 key 值和 value 值,排序时只使用 key 值进行排序。

* 编写一个测试用例,生成由多种数据类型元素组成的数组,元素的主键值随机,包括: * 每个元素的主键均为 String 类型(至少长 10 个字符),并含有一个 double 值。 * 每个元素的主键均为 double 类型,并含有 10 个 String 值(每个都至少长 10 个字符)。 * 每个元素的主键均为 int 类型,并含有一个 int[20] 值。 * 评估并验证这些输入数据对本节讨论的算法的性能的影响。 // 每个元素的主键均为 String 类型(至少长 10 个字符),并含有一个 double 值。 // 每个元素的主键均为 double 类型,并含有 10 个 String 值(每个都至少长 10 个字符)。 // 每个元素的主键均为 int 类型,并含有一个 int[20] 值。

每生成一个随机数都和之前生成过的随机数相比较。

* 通过实验验证产生第一个重复的随机数之前生成的整数数量为 ~√(πN/2)。 /// 检查是否有重复的数字出现。

建立一个布尔数组,将每次随机出来的数作为下标,将相应位置的布尔值改为 true,每次随机都检查一遍这个数组是否都是 true。

* 用和上一题相同的方式生成随机整数。 * 通过实验验证生成所有可能的整数值所需生成的随机数总量为 ~NHN。 // HN 指的是调和级数 /// 计算 N 阶调和级数的和。 /// 检查所有数字是否都生成过了。

实现方法和 1.3.34 类似,初始化迭代器的时候同时初始化一个随机访问序列。

/// 新建一个随机队列。 /// 判断队列是否为空。 /// 为队列重新分配内存空间。 /// 向队列中添加一个元素。 /// 从队列中随机删除并返回一个元素。 /// 随机返回一个队列中的元素。 /// 随机打乱数组。

也就是约瑟夫问题,官方给出的 JAVA 版答案:。

报数时将一个人出队然后入队来模拟一个环。

报到 M 个后将那个人出队但不入队(删除)

* 在这个古老的问题中,N 个身陷绝境的人一致同意通过以下方式减少生存人数。 * 他们围坐成一圈(位置记作 0 到 N-1)并从第一个人开始报数, * 报到 M 的人会被杀死,直到最后一个人留下来。 * 传说中 Josephus 找到了不会被杀死的位置。 * 编写一个 Queue 的用例 Josephus,从命令行接受 N 和 M 并打印出人们被杀死的顺序 * (这也将显示

这里采用“假删除”的方式,对要删除的元素不直接删除而是打上标记,这样就可以维持插入的顺序。

/// 建立一个队列。 /// 检查队列是否为空。 /// 为队列重新分配空间。 /// 向队列中插入一个元素。 /// 从队列中删除并返回第 k
/// 建立一个队列。 /// 检查数组是否为空。 /// 在队尾插入元素。 /// 删除第 k 个插入的结点

可以直接套用队列的实现方式,在满或空时抛出相应异常。

/// 建立一个缓冲区。 /// 检查缓冲区是否已满。 /// 检查缓冲区是否为空。 /// 向缓冲区写入数据。 /// 从缓冲区读取一个数据。

每次插入时都先搜索一遍链表,再判定相应动作。

/// 检查编码组是否为空。 /// 建立一个前移编码组。 /// 找到相应元素的前驱结点。 /// 前移编码插入。 ///

可以按照书上的提示出队再入队,也可以直接用迭代器访问一遍进行复制。

/// 复制构造函数。

直接把链栈的整个链表复制一份即可。

/// 复制构造函数。

C# 中可以用 Directory 类里面的几个方法来获得文件路径和文件名。

* 文件夹就是一列文件和文件夹的列表。 * 编写一个程序,从命令行接受一个文件夹名作为参数, * 打印出该文件夹下的所有文件并用递归的方式在所有子文件夹的名下(缩进)列出其下的所有文件。

这里我们使用两个栈来模拟缓冲区。

向左/向右移动 = 从左/右栈弹出相应数量的元素并压入另外一个栈。

插入/删除 = 左栈压入/弹出一个元素。

字符数量 = 左栈数量 + 右栈数量。

/// 建立一个文本缓冲区。 /// 在光标位置插入字符 c。 /// 删除并返回光标位置的字符。 /// 将光标向左移动 k 个位置。 /// 将光标向右移动 k 个位置。 /// 返回缓冲区中的字符数量。 /// 将缓冲区的内容输出,这将使光标重置到最左端。

书上已经给出了思路,简单说明一下。

第一问是给定输入判断是否会下溢出,只要记录栈中元素的数量即可,一旦为负数则返回 true。

第二问是给定输出判断是否可能。

对于输出序列中的每一个数,如果栈顶为空或者栈顶数字小于当前输出序列的数,那么就从输入序列中输入数字,直到栈顶数字和当前输出序列中的数字相等。

如果当前输出序列中的数字和栈顶元素相等,从栈中弹出相应元素。

最后如果栈为空则可能,否则不可能。

可以结合习题 1.3.3 的解答查看。

* 假设我们的栈测试用例会进行一系列的入栈和出栈操作, * 序列中的整数 0, 1, ... , N - 1 (按此先后顺序排列)表示入栈操作,N个减号表示出栈操作。 * 设计一个算法,判定给定的混合序列是否会使数组向下溢出 * (你使用的空间量与 N 无关,即不能用某种数据结构存储所有整数)。 * 设计一个线性时间算法判定我们的测试用例能否产生某个给定的排列 * (这取决于出栈操作指令的出现位置)。 //给定输入序列,判断是否会出现下溢出。 //给定输出序列,判定是否可能。 /// 判断是否会出现下溢出。 //记录栈中元素数量,如果元素数量小于 0 则会出现下溢出。 /// 判断输出序列是否正确。 //如果栈为空,则从输入序列中压入一个数。 //如果输入序列中的所有数都已经入栈过了,跳出循环。 //如果输出序列的下一个数不等于栈顶的数,那么就从输入序列中压入一个数。 //如果栈顶的数等于输出的数,弹出它。

这道题的解答参考了这篇博文:。

显然书中的解答已经十分明确,这里简单说明一下:
首先有结论:对于栈顶元素 Sn,栈中所有小于 Sn 的值都以递减形式保存(已经输出的不算)。
表现在输出序列中,Sn 输出之后,如果有小于 Sn 的值输出,其顺序必定是递减的。
依次验证其中的每个值都能满足结论。
对于 4,之后的 3 2 1 0 并不是以递减顺序输出的,因此这个序列是不合法的。

这里用的都是链式结构,头尾相接即可。

/// 在当前队列之后附加一个队列。
/// 将两个栈连接。

按照双向队列原本的操作就可以实现,需要维护两个栈的长度以防越界。(左侧栈弹出了右侧栈栈底的内容)

/// 默认构造函数,建立一个双端栈。 /// 检查左侧栈是否为空。 /// 检查右侧栈是否为空。 /// 返回左侧栈中元素的数量。 /// 返回右侧栈中元素的数量。 /// 向左端添加一个元素。 /// 向右端添加一个元素。 /// 从右端删除并返回一个元素。 /// 从左端删除并返回一个元素。

用六个栈即可实现,具体请查看我的这篇博文(有点复杂):。

初始化迭代器的时候记录栈已经进行过的 Pop 和 Push 数,迭代的时候检查这两个值是否改变,一旦改变就抛出异常。

用有限个栈实现一个队列,
保证每个队列操作(在最坏情况下)都只需要常数次的栈操作。

用六个栈即可实现,具体请查看我的这篇博文(有点复杂):。

初始化迭代器的时候记录栈已经进行过的 Pop 和 Push 数,迭代的时候检查这两个值是否改变,一旦改变就抛出异常。
}

以下是部落窝的老师整理的,内容如下:

第一部分:SUMPRODUCT函数用法介绍

  SUMPRODUCT是什么?其实结合英语就能很好的理解SUMPRODUCT函数,sum是和,product是积,结合起来就是乘积之和。

  Excel中SUMPRODUCT函数是一个数组类型的函数。很多时候可以用SUMPRODUCT函数取代SUM函数的数组公式,就不需要按三键结束。

  SUMPRODUCT函数能够计算多个区域的数值相乘后之和。SUMPRODUCT函数的用法就是在给定的几组数组中,将数组间对应的元素相乘,并返回乘积之和。

  SUMPRODUCT函数使用需要注意三点:  第一,数组参数必须具有相同的维数,否则,函数 SUMPRODUCT 将返回错误值 #VALUE!。  第二,函数 SUMPRODUCT 将非数值型的数组元素作为 0 处理。  第三,如果是一个数组,那么就是对这个数组的求和。

  我们先通过一个简单的工作表数据来认识SUMPRODUCT函数。

  第二,输入公式:=SUMPRODUCT(A2:B4),得到结果为31。根据上面的要点介绍,如果是一个数组,那么就是对这个数组的求和,因此就是对{3,4;8,6;1,9}这个区域求和。

  提示:两个数组相乘是同一行的对应两个数相乘。数组数据用大括号{}括起来,行数据之间用分号";"分隔,如果是同一行的数据,用逗号","分隔。

  第二部分:SUMPRODUCT函数应用案例介绍

  下图所示的是咱们6群(群号:)的随机抽查的人员资料表。为了演示方便,只是截取了部分数据。

  通过上面的数据,我们结合SUMPRODUCT函数的用法来完成以下应用案例。

  第一部分,SUMPRODUCT函数在计数中的应用。

  SUMPRODUCT函数用于多条件计数,计算符合2个及以上条件的数据个数。有一个经典公式计数:SUMPRODUCT((条件1)*(条件2)*(条件3)*...)

  第一,统计C列性别列中女性有几个人。

  此题为单条件求和。首先要知道条件是什么,(C4:C33="女")区域中等于女的,这部分就是条件。

  如果直接输入=SUMPRODUCT(C4:C33="女"),得到结果为0。第一部分用法介绍里介绍:函数 SUMPRODUCT 将非数值型的数组元素作为 0 处理,C4:C33="女",按F9键得到执行结果是true、false形式的逻辑值,所以等于0。

  那如何把逻辑值转换为数值呢,就要让逻辑值参加运算,可以用--,*1,+0等等。比如,=TRUE*1,结果为1。=FALSE*1,结果为0。因此在(C4:C33="女")外面加上--就可以了。

  第二,求E列潜水天数大于15天的男性有几人。

  此题有两个条件:第一,大于15天,用E4:E33>15表示。第二,男性,用C4:C33="男"表示。

  第三,统计2月份发言的男性有几人。

  D列最后发言时间有1月和2月的份。统计2月份,需要用到month函数来求月份。比如A1单元格:,A2单元格输入公式:=MONTH(A1),返回2。

  第四,统计不包括笑看今朝的男性有多少人。

  不包括,就是不等于,是<>表示。

  第五,统计有几个人的潜水天数是不一样的。

  比如,E列潜水天数为6的有6次,为5的有2次。

  如何让每个数字只出现一次呢?计数用countif函数。如何让每个数只计算一次呢,可以使用1/countif。比如5出现两次,就是两个1/2,最后汇总就得到1。最后再套用公式sumproduct(1/countif(区域,区域))。

  第二部分,SUMPRODUCT函数在求和中的应用。

  用函数SUMPRODUCT求和,函数需要的参数一个是进行判断的条件,另一个是用来求和的数据区域。

  第一,女性潜水总天数计算。

  第二,潜水时间大于15天的男性的潜水天数计算。

  第三,2月份发言的男性的潜水天数计算。

  第四,QQ号首位是8的人的潜水天数计算。

  第五,姓名字符数为2,不包括“月亮”的人的潜水天数计算。

  第六,“笑看今朝”和 “冷逸”的潜水天数计算。

  公式中两个条件,可以这样写:{"笑看今朝","冷逸"}。

  第三部分,SUMPRODUCT函数在查找及排名中的应用。

  如下图所示,需要求出姓名列的潜水天数已经排名情况。

  在以前的讲座详细介绍了vlookup函数实现查找的方法,在本讲座中用sumproduct函数取代。利用单条件求和的特点来查找。根据前面的介绍,套用格式=SUMPRODUCT((姓名=I26)*天数),得到公式:=SUMPRODUCT(($A$4:$A$33=I26)*$E$4:$E$33),然后下拉即可完成。

  在以往排名我们使用rank函数,不过我们也可使用SUMPRODUCT函数来完成。在K26输入公式:=SUMPRODUCT(--($J$26:$J$31>J26))+1,下拉。思路就是如果区域中有几个大于本身,目标值就是大于的所有数+1。

}

我要回帖

更多关于 怎么合计一列的数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信