组合数学
mathsoperator
这个作者很懒,什么都没留下…
展开
-
折纸痕问题 Paper Folding
你喜欢折纸痕吗?给你一张很大的纸,对折以后再对折,再对折……每次对折都是从右往左折,因此在折了很多次以后,原先的大纸会变成一个窄窄的纸条。现在把这个纸条沿着折纸的痕迹打开,每次都只打开“一半”,即把每个痕迹做成一个直角,那么从纸的一端沿着和纸面平行的方向看过去,会看到一条美妙的曲线。我们可以发现这实际上就是分形中的中国龙。其离散迭代系统如下:Axiom FF = F + G原创 2006-04-08 16:27:00 · 2204 阅读 · 0 评论 -
组合数的序号问题
这里我们要处理的是把从{1,2,…,n}抽取r个数的所有组合按字典序排序,注意每个组合都保证是升序排列。问题是给定一个组合,确定其在所有组合中的序号?比如:n=4,r=2,所有组合按字典序排列如下{1,2},{1,3},{1,4},{2,3},{2,4},{3,4},组合{2,4}的序号为5。一般而言,令则可得如下递推公式:令因此递推公式可重新表述为反复原创 2006-04-08 16:15:00 · 2799 阅读 · 2 评论 -
我的组合数学讲义
献丑了,希望大家批评指正!点击下载原创 2009-05-11 05:44:00 · 868 阅读 · 1 评论 -
产生[n]的所有的k分拆
function partitionskofset(n,k)%PARTITIONSKOFSET 产生[n]的所有的k分拆,个数即为第二类Stirling数S(n,k)% partitionskofset( n, k ) 输入正整数n和k,程序输出所有[n]的k分拆。输出%格式:一个长度为n的行向量p,p(i)属于{1,2,...,k},i=1,2,...,n. 如果p(i)=j, 表原创 2006-04-08 16:39:00 · 1131 阅读 · 0 评论 -
生成集合[n]的所有k-子集MATLAB代码
function ss=ksubsets(n,k)%KSUBSETS 生成集合[n]的所有k-子集% ss = ksubsets( n , k ) 把集合[n]的所有k-子集按行存入ss返回%$Author: WBC$ $Date: 2005/9/30$ $ref: 卢开澄 卢华明 组合数学(第3版) p30-31$%----------两种特殊情况--原创 2006-04-08 16:34:00 · 4081 阅读 · 0 评论 -
产生n的所有的k分拆
function partitionsk(n,k)%PARTITIONSK 产生n的所有的k分拆,个数即为整数n的k分拆数p_k(n)% partitionsk( n, k ) 输入正整数n和k。程序依次输出所有按行降序排列的k分拆。%基本思路:把分拆降序排列,首先增大前面的数(当然第1个数要相应地减少),一直增大到%不能再增加为止,然后增加后面的数,同时把其前面的数(除第1个数之外原创 2006-04-08 16:38:00 · 1267 阅读 · 0 评论 -
把元素逆序表转换为对应的置换
function p=inversion2topermutation(I)%INVERSION2TOPERMUTATION 把元素逆序表转换为对应的置换% p = inversion2topermutation( I ) 输入元素逆序表I返回对应的置换p.%算法的基本思想:先摆放大的元素,那么接着的小的元素摆放的位置就是其逆序数加1。%$Author: WBC$ $Date:原创 2006-04-08 16:37:00 · 888 阅读 · 0 评论 -
把位置逆序表转换为对应的置换
function p=inversion1topermutation(I)%INVERSION1TOPERMUTATION 把位置逆序表转换为对应的置换% p = inversion1topermutation( I ) 输入位置逆序表I返回对应的置换p.%算法的基本思想:等于0的最末逆序数所在位置就是当前最大的数所在的位置。%$Author: WBC$ $Date: 200原创 2006-04-08 16:36:00 · 1104 阅读 · 0 评论 -
产生[n]所有置换
function ps=permutations(n)%PERMUTATIONS 产生[n]所有置换% ps = permutations( n ) 输入正整数n,用换位法产生[n]的所有置换,并按行存入ps返回。%$Author: WBC$ $Date: 2005/9/30$ $ref: 卢开澄 卢华明 组合数学(第3版) p28-30$%初始化ps=z原创 2006-04-08 16:35:00 · 1074 阅读 · 0 评论 -
完美匹配例子
一块多米诺骨牌可以覆盖棋盘的两个方格。请用31块多米诺骨牌盖满一个除去左上和右下方格(在同一对角线上)的棋盘。(一个棋盘由8×8 = 64个方格组成)n=8;from=zeros(4*n*n,1,'int32');to=from;ind=0;node=zeros(n,n);node(:)=0:n*n-1;for i=1:n for j=1:n if i==1 ...原创 2018-02-27 10:35:20 · 1446 阅读 · 0 评论