permutation-sequence(排列序列)

题目

集合[1,2,3,...,n]包含总共n!个不同的排列。

通过按顺序列出和标记所有排列,
我们得到以下序列(即n = 3):

“123”
“132”
“213”
“231”
“312”
“321”
给定n和k,返回第k个序列。
注意:给定n将介于1和9之间。

分析过程

回溯法。

如何找出第16个(按字典序的){1,2,3,4,5}的全排列?

1. 首先用16-1得到15

2. 用15去除4! 得到0余15

3. 用15去除3! 得到2余3

4. 用3去除2! 得到1余1

5. 用1去除1! 得到1余0

有0个数比它小的数是1,所以第一位是1

有2个数比它小的数是3,但1已经在之前出现过了所以是4

有1个数比它小的数是2,但1已经在之前出现过了所以是3

有1个数比它小的数是2,但1,3,4都出现过了所以是5

最后一个数只能是2

代码实现

import java.util.*;
public class Solution {
    public String getPermutation(int n, int k) {
        ArrayList<Integer> list = new ArrayList<> ();
        k=k-1;//
        for(int i = n-1;i >= 0;i--){
            int sum = factorial(i);

            int temp = k/sum;
            for(int j = 1;j <= n;j++){
                if(!list.contains(j)){
                    temp--;
                    if(temp < 0){
                        list.add(j);
                        break ;
                    }
                }
            }

            k = k%sum;
        }
        String res = "";
        for(int i = 0;i < n;i++){
            res += list.get(i);
        }
        return res ;
    }
    public int factorial(int n){
        int sum=1;
        for(int i=n;i>=1;i--){
            sum*=i;
        }
        return sum;
    }
}

题目来自牛客网leetcode

在Python中,计算序列排列熵通常涉及到信息理论中的概念,排列熵(Permutation Entropy)是一种衡量时间序列复杂度和无序性的统计量。要使用Python计算排列熵,你可以利用`sklearn`库中的`entropy`模块,这个模块提供了一个计算熵(包括排列熵)的功能。 首先,你需要安装必要的库,如果尚未安装可以使用pip: ```bash pip install numpy scikit-learn ``` 然后,你可以编写如下的代码来计算排列熵: ```python import numpy as np from sklearn.feature_extraction.text import CountVectorizer def permutation_entropy(sequence, n_perm=3): # 将序列转换为频率矩阵 vectorizer = CountVectorizer(ngram_range=(1, 1)) X = vectorizer.fit_transform([str(sequence)]).toarray() # 对每个可能的排列生成一个概率分布 entropy_values = [] for perm in range(1, n_perm + 1): prob_dist = X[0].reshape(len(X[0]), -1)[:perm].sum(axis=1) / len(sequence) if not np.isnan(prob_dist).any(): entropy_values.append(np.nan_to_num(-np.sum(prob_dist * np.log2(prob_dist)))) # 如果所有排列都不可行,则返回NaN if all(np.isnan(entropy_values)): return np.nan else: return max(entropy_values) # 示例序列 sequence = [1, 2, 3, 2, 1, 3, 1, 2] permutation_entropy(sequence) ``` 在这个例子中,`n_perm`参数控制了考虑的排列数,较大的`n_perm`值会提供更复杂的表示,但计算成本也更高。`sequence`是一个整数列表,函数会计算其排列熵并返回结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值