把元素逆序表转换为对应的置换

本文介绍了一种将元素逆序表转换为对应置换的方法。该算法通过从大到小放置元素来构建置换,确保每个较小元素放置在其逆序数加1的位置。适用于离散数学与组合数学等领域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function p=inversion2topermutation(I)
%INVERSION2TOPERMUTATION   把元素逆序表转换为对应的置换
%   p = inversion2topermutation( I )  输入元素逆序表I返回对应的置换p.
%算法的基本思想:先摆放大的元素,那么接着的小的元素摆放的位置就是其逆序数加1。

%$Author: WBC$     $Date: 2005/10/18$

n=length(I); %置换的长度
if any(I>(n-1:-1:0))
    error(['输入的元素逆序表 (' int2str(I(:)') ') 不合法']);
end

p=zeros(1,n);%初始化存储置换的向量
p(1)=n;  %初始化
iend=1;  %当前进入p的元素的个数
for i=n-1:-1:1
    v=I(i)+1;  % 当前i应该摆放在p中的位置
    iend=iend+1; % p的元素个数增1
    if v<=iend  %i摆放在p中间的某个位置
        p(v+1:iend)=p(v:iend-1);%该位置之后的元素后移一个单位
        p(v)=i; %该位置放上i
    else  %i摆放在p的最末位置
        p(iend)=i;
    end
end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值