• 拆分的种类
千次阅读
2017-07-28 16:48:36


题目：

How many ways can the numbers 1 to 15 be added together to make 15? The technical term for what you are asking is the "number of partition" which is often
called P(n). A partition of n is a collection of positive integers (not necessarily distinct) whose sum equals n.

Now, I will give you a number n, and please tell me P(n) mod 1000000007.
Input
The first line contains a number T(1 ≤ T ≤ 100), which is the number of the case number. The next T lines, each line contains a number n(1 ≤ n ≤ 10 5) you need to consider.

Output
For each n, output P(n) in a single line.
Sample Input
4
5
11
15
19
Sample Output
7
56
176
490

题意：
T组样例
问n能拆分成几种

突然觉得下面这个题目更好看懂！
"Well, it seems the first problem is too easy. I will let you know how foolish you are later." feng5166 says.

"The second problem is, given an positive integer N, we define an equation like this:
N=a[1]+a[2]+a[3]+...+a[m];
a[i]>0,1<=m<=N;
My question is how many different equations you can find for a given N.
For example, assume N is 4, we can find:
4 = 4;
4 = 3 + 1;
4 = 2 + 2;
4 = 2 + 1 + 1;
4 = 1 + 1 + 1 + 1;
so the result is 5 when N is 4. Note that "4 = 3 + 1" and "4 = 1 + 3" is the same in this problem. Now, you do it!"
Input
The input contains several test cases. Each test case contains a positive integer N(1<=N<=120) which is mentioned above. The input is terminated by the end of file.
Output
For each test case, you have to output a line contains an integer P which indicate the different equations you have found.
Sample Input
4
10
20
Sample Output
5
42
627

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
using namespace std;

const int N=100005;
const __int64 MOD=1000000007;

__int64 ans[N],tmp[N];

void Init()  //模板模板
{
int t=1000;
for(int i=-1000;i<=1000;i++)
tmp[i+t]=i*(3*i-1)/2;
ans[0]=1;
for(int i=1;i<N;i++)
{
ans[i]=0;
for(int j=1;j<=i;j++)
{
if(tmp[j+t]<=i)
{
if(j&1)  ans[i]+=ans[i-tmp[j+t]];
else     ans[i]-=ans[i-tmp[j+t]];
}
else break;
ans[i]=(ans[i]%MOD+MOD)%MOD;
if(tmp[t-j]<=i)
{
if(j&1) ans[i]+=ans[i-tmp[t-j]];
else    ans[i]-=ans[i-tmp[t-j]];
}
else break;
}
ans[i]=(ans[i]%MOD+MOD)%MOD;
}
}
int main()
{
int t,n;
Init();
cin>>t;
while(t--)
{
scanf("%d", &n);
printf("%I64d\n", ans[n]);
}
return 0;
}  

如果数据较小又容易t的话就把N减小t减小吧！


更多相关内容
• 长短信拆分规则，GSM短信是常用的通讯方式，但每条短信的内容不能超过140字节，给用户的接收和阅读带来不便。本文通过分析短信的PDU编码，介绍了短信的拼接方法和注意事项，实现了对长短信发送和接收的功能
• 辅助工作需要，根据所给字段分类提取排序，该工具只需要装有Office就能使用
• 主要介绍了SQL 将一列拆分成多列的方法，文中讲解非常细致，代码帮助大家更好的理解和学习，感兴趣的朋友可以了解下
• 按shp属性字段分类拆分成多个独立shp文件
• 如何将一个Excel表格根据其中一列的分类自动拆分到不同的SHEET表中.
• 《机器学习》用于评价拆分分类目标变量的纯度度量包括哪些指标？
• ## 微服务拆分策略

千次阅读 2022-01-21 13:46:21
拆分策略可以按功能和非功能维度进行考虑，功能维度主要是划分清楚业务的边界，非功能维度主要考虑六点包括扩展性、复用性、高性能、高可用、安全性、异构性。接下来详细介绍下。 1、功能维度 功能维度主要是划分...

拆分策略可以按功能和非功能维度进行考虑，功能维度主要是划分清楚业务的边界，非功能维度主要考虑六点包括扩展性、复用性、高性能、高可用、安全性、异构性。接下来详细介绍下。

# 1、功能维度

功能维度主要是划分清楚业务边界，采用的主要设计方法可以利用 DDD（关于 DDD 的理论知识可以参考网上其它资料），DDD 的战略设计会建立领域模型，可以通过领域模型指导微服务的拆分，主要分四步进行：

第一步，找出领域实体和值对象等领域对象。
第二步，找出聚合根，根据实体、值对象与聚合根的依赖关系，建立聚合。
第三步，根据业务及语义边界等因素，定义限界上下文。
第四步，每一个限界上下文可以拆分为一个对应的微服务，但也要考虑一些非功能因素。

以电商的场景为例，交易链路划分的限界上下文如下图左半部分，根据一个限界上下文可以设计一个微服务，拆解出来的微服务如下图右侧部分。

举一个典型的电商业务例子。电商的业务体系庞大，涉及各方面的细节。但是我们大概能够根据业务的职能做一个拆分，比如阿里的电商中台业务，包含 用户账号子系统、商品子系统、订单子系统、客户子系统、物流子系统 等。
因为职能不同，这些领域之间包含清晰的界限，所以我们可以按照这个方向将服务于不同领域（商品域和订单域）的子系统拆成独立的服务颗粒。如下图：

## 2、非功能维度

当我们按照功能维度进行拆分后，并不是就万事大吉了，大部分场景下，我们还需要加入其它维度进一步拆分，才能最终解决单体架构带来的问题。

### 1）扩展性

区分系统中变与不变的部分，不变的部分一般是成熟的、通用的服务功能，变的部分一般是改动比较多、满足业务迭代扩展性需要的功能，我们可以将不变的部分拆分出来，作为共用的服务，将变的部分独立出来满足个性化扩展需要。同时根据二八原则，系统中经常变动的部分大约只占 20%，而剩下的 80% 基本不变或极少变化，这样的拆分也解决了发布频率过多而影响成熟服务稳定性的问题。

比如一个电商领域的系统，用户信息、基本商品信息、物流信息 等模块的管理能力和视图界面，一般是比较稳定的；而类似运营活动的功能和页面一般是经常变化的（520、618、双11），会有不同的活动策略和视图界面，需要经常迭代发布。如下图所示

### 2）复用性

不同的业务里或服务里经常会出现重复的功能，比如每个服务都有鉴权、限流、安全及日志监控等功能，可以将这些通过的功能拆分出来形成独立的服务，也就是微服务里面的 API 网关。在如，对于滴滴业务，有快车和顺风车业务，其中都涉及到了订单支付的功能，那么就可以将订单支付独立出来，作为通用服务服务好上层业务。如下图：

### 3）高性能

将性能要求高或者性能压力大的模块拆分出来，避免性能压力大的服务影响其它服务。常见的拆分方式和具体的性能瓶颈有关，例如电商的抢购，性能压力最大的是入口的排队功能，可以将排队功能独立为一个服务。同时，我们也可以基于读写分离来拆分，比如电商的商品信息，在 App 端主要是商详有大量的读取操作，但是写入端商家中心访问量确很少。因此可以对流量较大或较为核心的服务做读写分离，拆分为两个服务发布，一个负责读，另外一个负责写。还有数据一致性是另一个基于性能维度拆分需要考虑的点，对于强一致的数据，属于强耦合，尽量放在同一个服务中（但是有时会因为各种原因需要进行拆分，那就需要有响应的机制进行保证），弱一致性通常可以拆分为不同的服务。

根据性能需求来进行拆分。简单来说就是访问量特别大，访问频率特别高的业务，又要保证高效的响应能力，这些业务对性能的要求特别高。比如积分竞拍、低价秒杀、限量抢购。

我们要识别出某些超高并发量的业务，尽可能把这部分业务独立拆分出来。这么做的原因非常简单，一个保证满足高性能业务需求，另一个保证业务的独立性，不互相影响。

### 4）高可用

将可靠性要求高的核心服务和可靠性要求低的非核心服务拆分开来，然后重点保证核心服务的高可用。具体拆分的时候，核心服务可以是一个也可以是多个，只要最终的服务数量满足“三个火枪手”的原则就可以。比如针对商家服务，可以拆分一个核心服务一个非核心服务，核心服务供交易服务访问，非核心提供给商家中心访问。

## 5）安全性

不同的服务可能对信息安全有不同的要求，因此把需要高度安全的服务拆分出来，进行区别部署，比如设置特定的 DMZ 区域对服务进行分区部署，可以更有针对性地满足信息安全的要求，也可以降低对防火墙等安全设备吞吐量、并发性等方面的要求，降低成本，提高效率。

主链路是高频且核心的主业务模块，把主链路的服务与其他起辅助作用的业务服务隔离开来，避免次链路服务的异常情况影响到主链路服务。

## 6）异构性

对于对开发语言种类有要求的业务场景，可以用不同的语言将其功能独立出来实现一个独立服务。

以上几种拆分方式不是多选一，而是可以根据实际情况自由排列组合。同时拆分不仅仅是架构上的调整，也意味着要在组织结构上做出相应的适应性优化，以确保拆分后的服务由相对独立的团队负责维护。

展开全文
• % 将excel表格里面多个sheet拆分成独立的excel %在EXCEl界面按Alt+F11打开VBA编辑器，插入新的模块(插入/模块)， % 或者在任意一个sheet名称上点右键，选择“查看代码”即能够进入VBA编辑器 %复制下面的内容到里面...
• 行业分类-设备装置-一种可拆分式笔记本、平板二合一电脑.zip
• 行业资料-交通装置-一种可拆分式图书分类手推车.zip
• 现需要按类别对蔬果进行拆分后保存到新的sheet里，类别名称(删除类别号后)即为sheet名，如下图所示： 实现步骤 1、 运行集算器 编写脚本： 把代码列出来看得清楚点： A B 1 =file("E:/excel/...

# 例题描述

蔬果明细表fruits.xlsx文件中有蔬果总表，数据如下图所示：

现需要按类别对蔬果进行拆分后保存到新的sheet里，类别名称(删除类别号后)即为sheet名，如下图所示：

# 实现步骤

1、  运行集算器

编写脚本：

把代码列出来看得清楚点：

 A B 1 =file("E:/excel/fruits.xlsx") 2 =A1.xlsimport@t(;,2) 3 =A2.group(类别) 4 for A3 =substr(A4(1).类别,"]") 5 =A1.xlsexport@ta(A4;B4)

A1   打开fruits.xlsx文件

A2   将文件数据读成序表，选项@t表示首行是列标题，参数2表示从第2行开始读

A3   按类别列对数据进行分组

A4   循环处理每个组

B4   用每组第1条记录的类别值，取]号以后的文字作为sheet名

B5   把当前组的记录写入fruits.xlsx中的新sheet中，用B4算出来的名称作sheet名。注意这里一定要加选项a，表示是添加新的sheet

想生成多个文件也很容易，只需将 B5 修改：=file("E:/excel/"+B4+".xlsx").xlsexport@t(A4)

这个实现办法和原文件的列数无关，变动列都能支持

2、  按F9运行这段程序，打开fruits.xlsx就可以看到前文目标图所示的效果了。

展开全文
• 机器学习中多分类学习的经典拆分策略：OvO、OvR、MvM

### 文章目录

参考文章： 多分类问题学习器拆分策略

现实中常遇到多分类学习任务，有些二分类学习方法可直接推广到多分类，但在更多情况下，我们是基于一些基本策略，利用二分类学习器来解决多分类问题。

不失一般性，考虑N个类别C1，C2，C3，…，CN，多分类学习的基本思路是“拆解法”，即将多分类任务拆解为若干个分类器（二分类）任务求解。具体来说，先对问题进行拆分，然后为拆出的每个二分类任务训练一个分类器；在测试时，对这些分类器的预测结果进行集成以获得最终的多分类结果。这里的关键是如何对多分类任务进行拆分，以及如何对多个分类器进行继承。最经典的拆分策略有三种：“一对一”（One vs. One，简称OvO）、“一对其余”（One vs. Rest，简称OvR）和“多对多”（Many vs. Many，简称MvM）。

# 1、一对一（One vs. One，简称OvO）

​给定数据集D={(x1,y1),(x2,y2),(xm,ym),yi∈{C1,C2,…,Cn}。OvO将这N个类别两两配对,从而产生N(N-1)/2个二分类任务,例如OvO将为区分类别Ci和Cj训练一个分类器,该分类器把D中的Ci类样例作为正例,Cj类样例作为反例.在测试阶段,新样本将同时提交给所有分类器,于是我们将得到N(N-1)/2个分类结果,最终结果可通过投票产生:即把被预测得最多的类别作为最终分类结果.

# 2、一对其余（One vs. Rest，简称OVR）

OvR则是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练N个分类器。在测试时若仅有一个分类器预测为正类，则对应的类别标记作为最终分类结果。若有多个分类器预测为正类，则通常考虑各分类器的预测置信度，选择置信度最大的类别标记作为分类结果。

OvO和OvR的对比:
OvO:训练N(N-1)/2个分类器，存储开销和测试时间大
训练只用两个类的样例，训练时间短
OvR：训练N个分类器，存储开销和测试时间小
训练用到全部训练样例，训练时间长
对于预测性能，则取决于具体的数据分布，在多数情形下两者差不多

# 3、多对多（Many vs. Many，简称MvM）

MvM是每次将若干个类作为正类，若干个其他类作为反类。显然，OvO和OvR是MvM的特例。
MvM的正、反类必须有特殊的设计，不能随意选取。

这里我们介绍一种最常用的MvM技术:“输出纠错码”（Error Correcting Output Codes,简称ECOC）
ECOC将编码的思想引入类别拆分中，并尽可能在解码过程中具有容错性。

ECOC的工作过程分为两个步骤:。
编码:对N个类别做M次划分，每次划分将一部分类别划为正类，一部分划为反类，从而形成一个二分类训练集;这样一共产生M个训练集，可以训练出M个分类器。

解码:M个分类器分别对测试样本进行预测，这些预测标记组成一个编码。将这个预测代码与每个类别各自的编码进行比较，返回其中距离最小的类别作为最终的预测结果。

Ci表示第i个类别；fi表示第i个学习器

海明距离：在信息编码中，两个合法代码对应位上编码不同的位数称为码距；
计算海明距离的一种方法，就是对两个位串进行异或（xor）运算（同为0，异为1），并计算出异或运算结果中1的个数。例如110和011这两个位串，对它们进行异或运算，其结果是：110⊕011=101，异或结果中含有两个1，因此110和011之间的海明距离就等于2。

欧式距离：是一个通常采用的距离定义，指在m维空间中两个点之间的真实距离；

• ECOC编码对分类器错误有一定容忍和修正能力，编码越长、纠错能力越强（影响小，距离变化不大）。假设在预测时某个分类器出错了，例如 f2 出错从而导致了错误编码（-1 ，-1 ，+1，-1 ,+ 1 )，但基于这个编码仍能产生正确的最终分类结果C3。

• 然而，编码越长，意味着所需训练的分类器越多，计算、存储开销都会增大；另一方面，对有限类别数，可能的组合数目是有限的，码长超过一定范围后就失去了意义。

• 对同等长度的编码，理论上来说，任意两个类别之间的编码距离越远，则纠错能力越强。

展开全文
• excel 按列拆分、合并、自动分类 能自动分类表格，合并多电子表格，合并指定目录下所有xlsx 功能测试完善，判断优化，确保能正常运行
• 行业分类-设备装置-小型葡萄分解拆分装置.zip
• 数据的分类管理 通过分类处理提升数据管理能力 随着我们对业务系统、对数据本身的进一步了解，我们就会发现，很多数据对质量的要求是不同的。 比如，订单数据，肯定一致性要求最高，不能丢数据。而日志数据和一些...
• 一、正整数拆分总结、 二、正整数拆分示例
• 行业分类-设备装置-小型葡萄分解拆分装置及加工方法.zip
• 数据库垂直拆分（按照功能模块拆分） 数据库水平拆分（根据某种规则划分，比如对id取余） 数据库表的垂直拆分 数据库表的水平拆分 数据拆分前其实是要首先做准备工作的，然后才是开始数据拆分 第一步：采用...
• ios Objective-C分类 (category),字符串的拆分(componentsSeparatedByCharactersInSet)
• 如何通过某字段属性批量导出各个字段对应的shp文件？比如现有管道图层，想根据管道的属性（注水，油，混输或者气）分成多个shp。 通过Analysis Tools——Extract——Split工具实现。 步骤如下： ...
• 将下面 A 列数据拆分成右边的形式，有 @符号的要加到一起。相关的数据如下： 需要统计出孔 (即 @的数据)、夹及其它的数据。 解法及简要说明 1． 在集算器中设置 demo.dfx 脚本参数： 设置参数 arg1 为 Excel...
• 1、引言根据短信内容的大小，将常用短信分类：单条短信和长短信。所谓长短信是指短信的大小超过了单条短信的限制，需将短信拆分成几条短信然后分别发送，接收的时候将几条短信拼在一起组成原始短信的内容，对于拆分...
• 基于局部连续平均量化变换 (SMQT) 特征和拆分 Winnows 稀疏网络 (SNoW) 分类器。 基于论文：使用本地 SMQT 特征的人脸检测和拆分 SNoW 分类器。 请参阅 zip 文件中的 readme.txt 和 license.txt 中的更多信息。
• 垂直拆分 数据层-表 将单表中的常用字段和不常用字段，拆分到两个表，减少每次读无效...将全部记录按某个字段，分类到多个表中。例如，身份证表，按地区拆分。 数据层-库 单库的机器性能成为瓶颈。 将身份证表，
• 数据库拆分分类： 1、垂直拆分 概念：按照业务拆分，比如可以拆分为：产品库，客户库，订单库等。 目的：可降低单节点数据库的负载；原来的情况是：所有的数据表都集中在一个数据库节点上，如此所有的读写请求就...
• 也就是说每个服务只完成自己职责内的任务，对于不是自己职责的功能交给其它服务来完成。 ​ 2. 闭包原则（ CCP ） ​ 微服务的闭包原则就是当我们需要改变一个微服务的...在服务拆分的初期，你其实很难确定服务究竟要
• 行业分类-设备装置-可拆分脚的家具
• 前言相信你经常被 读写分离、垂直拆分、水平拆分、分库分表 这几个名词搞得很懵逼。我有时候也很懵逼，那么今天就来把这几个数据库常用术语搞清楚，同时也记录一下。读写分离这个相对比较好理解一些，就是将数据库...
• 如何快速解耦：垂直拆分 业务 代码 数据库 研发团队

...