前言:
现在小伙伴们对“多矩阵相乘保证乘法次数最少”大致比较看重,你们都想要知道一些“多矩阵相乘保证乘法次数最少”的相关内容。那么小编同时在网摘上搜集了一些有关“多矩阵相乘保证乘法次数最少””的相关资讯,希望大家能喜欢,兄弟们快快来了解一下吧!今天跟大家探讨重复次数计算,这个可能大家用的较少,但也很有用处,下面是该算法的步骤,直接进去主题。 一、问题描述:统计连续重复字符最大的连续重复次数,如下图
二、问题解答:=MAX(IFERROR(FIND(REPT(TRANSPOSE(A1:A7),ROW(1:7)),PHONETIC(A1:A7))^0*ROW(1:7),0))PS:A1:A7为数据区域,1:7与数据区域的行数相同,但是要保证从1开始。例如数据区域是A2:A10,那么相应的为1:9,而不是2:10。 三、步骤解析: 第一步:REPT(TRANSPOSE(A1:A7),ROW(1:7);将A1:A7区域中每一个单元格的内容重复1到7次,形成一个7*7(行数*列数)的数组(或者叫矩阵)。下图的红框部分就是本次计算得的结果。
TRANSPOSE(A1:A7)即为下图的列标题,row(1:7)的结果即为行标题。
PS:此处为什么要将区域A1:A7转置呢?因为如果不转置,那么A1:A7与ROW(1:7)的计算结果均在一列,此时,REPT(A1:A7,ROW(1:7)只会将A1:A7的内容依次重复1到7次,即A1重复1次,A2重复2次……A7重复7次,如下图。
而将A1:A7转置之后就在一行了,这样一个在行,一个在列,就形成一个7*7的矩阵。 第二步:FIND(REPT(…),PHONETIC(A1:A7))^0;PHONETIC(A1:A7)可以将A1:A7中所有单元格的内容连接起来形成一个新的字符串,结果为“你我他我我我他”。FIND(REPT(…),PHONETIC(…))然后将第一步得到的所有结果依次在该字符串中查找,如果找到返回其位置,否则返回错误值。计算结果见下页图:
FIND(…)^0,将上图结果取0次幂。非零数字转换为1(任何非零数的0次幂都等于1【数学】),其他均为错误值。 第三、步最终结果见下图红框部分:
PS:关于PHONETIC函数,Excel帮助里面是这样解释的:“提取文本字符串中的拼音(furigana)字符。该函数只适用于日文版。”,至于为什么可以连接字符,不知道(T_T)。我测试了一下,只要单元格不是数字格式的纯数字,几乎都可以串起来。至于可以串起来的字符长度,我试过5496个字符长度没出现问题,我的Excel是2010版。 第四步:IFERROR(FIND(…)^0*ROW(1:7),0);将第二步的结果(7*7的矩阵)乘以ROW(1:7)(7*1的矩阵),不应该说是相乘,应该是将7*7矩阵的每一列都与ROW(1:7)中相应的数字相乘,最后用IFERROR函数将所有错误值均转换成0。最终结果见下图:
在此解释一下此处结果的含义:0代表该字符没有连续重复出现n次,非零数m代表该字符连续重复出现了m次。如果没有想明白那么请看这段:在第一步将每个字符都重复了n(1到7)次,在第二步的时候用FIND函数判断了该字符重复n次后是否在PHONETIC(A1:A7)中能找到,如果结果为1,就代表该字符在PHONETIC(A1:A7)中连续重复出现了n次。第三步中*ROW(1:7),就是为了得到其重复次数。注:前面说到两个矩阵用“*”来连接并不能称之为“乘”(第三步中的第一句),矩阵的乘法在Excel中对应的是MMULT函数,任何两个矩阵需要满足前一个的列数等于后一个的行数。即一个a*n矩阵与一个n*b矩阵可以相乘,得到的结果是一个a*b的矩阵,这才是数学意义上的矩阵乘法。有关矩阵的更多资料请自行百度或者查阅高等代数、线性代数等相关书籍。 第五步:MAX(…)。得到我们最终的结果,即连续重复次数的最大值。 好了,以上就是连续重复值计算步骤,大家如有更好的方法,欢迎留言探讨。
标签: #多矩阵相乘保证乘法次数最少