基于python的线性代数关于逆序列计算

基于python的线性代数关于逆序列计算

啥叫逆序列?
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。一个排列中所有逆序总数叫做这个排列的逆序数。

也就是说,对于n个不同的元素,先规定各元素之间有一个标准次序(例如n个 不同的自然数,可规定从小到大为标准次序),于是在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。

举例:
求排列32514的逆序数是多少?

解题过程(对32514依次分析):

1、3后面比它小的数有2个。

2、2后面比它小的数有1个。

3、5 后面比它小的数有有2个。

4、1 后面比它小的数没有。

5、4 后面比它小的数没有。

最后将这些个数加起来就是2+1+2=5,所以逆序数是5。

记得导包

import numpy as np
import random
import sympy
from sympy import *

1、 基于python的生成随机逆序列

def setReverNum(num=8, *args, **kwargs) -> str:
    """
    随机生成一串长度为num的逆序列(逆序列的每个数字都不一样)
    :param num: 逆序数列的最大值
    :param args:
    :param kwargs:
    :return: 逆序序列

    例如:
    # 测试获取逆序数

    >>> test=setReverNum() #(生成一串逆序列)
    >>> test=setReverNum(9) #(生成一串9位的逆序列)
    >>> test=setReverNum(num=9) #(生成一串9位的逆序列)

    """
    #    返回一个num位(默认8位)的不相同数
    numlist = [str(i) for i in range(1, num + 1)]
    random.shuffle(numlist)  # 随机打乱列表的顺序,不生成新的列表
    rannum = "".join(numlist)  # 将列表组合成str
    return rannum  # 返回一个str的随机数

2、基于python的随机计算逆序数

def getReverNum(Num, *args, **kwargs) -> int:
    """
    传入一串逆序列,返回它的逆序列
    :param Num: 传入一个逆序数列
    :param args:
    :param kwargs:
    :return: 返回逆序数列的逆序数

    例:


    >>> print("57426813的逆序数为",getReverNum('57426813'))
    >>> test=setReverNum()
    >>> print(test)
    >>> print(getReverNum(test))
    >>> print(getReverNum('1537624'))
    """
    Numlist = np.array(list(map(int, Num)))  # 把列表里的str转换成int
    ReverNum = [np.sum(Numlist[:numKey] > numValue) for numKey, numValue in
                enumerate(Numlist)]  # 利用enumerate通过循环迭代自动生成的索引变量。
    return int(np.sum(ReverNum))  # 返回逆序数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是空空.v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值