编程示例:求排列的逆,反序表,以及从反序表计算排列

news2025/1/10 11:55:29

编程示例:求排列的逆,反序表,以及从反序表计算排列

计算机程序设计艺术的第三卷 第五章排序中,第5.1.1节中
提到了排列的反序,反序表,逆的概念。

首先,简单地介绍一下这两个概念。例如一个排列 3 1 4 2 
从小到大的角度来看,有三个反序:分别是(3,1),
(3,2)和(4,2)
例如 排列 5 9 1 8 2 6 4 7 3 它的反序表是 2 3 6 4 0 2 2 1 0
反序表中第1个字是2,表示在原始的排列中涉及到1的反序有2个。
反序表中第2个字是3,表示在原始的排列中涉及到2的反序有3个。
在原始的排列中,1的左边有两个比1大的数字。
在原始的排列中,2的左边有三个比2大的数字。

排列的逆的定义是 a[k]=j 则a[j]=k。就是一个排列 用它的值进行
重新排序。当然了,排序时要带着它的下标。然后由它的下标组成了
一个新的排列。这个新的排列就是原始的排列的逆。

5 9 1 8 2 6 4 7 3   = 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9   = 3 5 9 7 1 6 8 4 2 

所以 排列 5 9 1 8 2 6 4 7 3 的逆是3 5 9 7 1 6 8 4 2 

javascript 代码如下:
<html>
<title>排列的反序表</title>
<body>
<button id="button" οnclick="play()">生成反序表</button>

<p>输入排列:</p>
<textarea id='txt' rows="3" cols="130"></textarea>
<p><button id="button" οnclick="generate()">生成排列</button></p>
<p>输入排列的反序表:</p>
<textarea id='txt2' rows="3" cols="130"></textarea>
<p>输出结果排列:</p>
<textarea id='result' rows="3" cols="130"></textarea>
<script>
 var arr=[0,5,9,1,8,2,6,4,7,3];
 var reverse_order_table=[0,2,3,6,4,0,2,2,1,0];
 
function play(){
var arr_str=document.getElementById("txt").value;
var arr=arr_str.split(',');
var reverse_arr=get_reverse(arr);
var table=get_opposite(arr,reverse_arr);
document.getElementById("result").innerText=table;
}

function generate()
{
var arr_str=document.getElementById("txt2").value;
var arr=arr_str.split(',');   
var link_table = get_permulation(arr); 
document.getElementById("result").innerText= traversal_link_table(link_table);
}
/* 得到排列的逆  */
function get_reverse(arr)
{
   var result=[0];
   for(var i=1;i<arr.length;i++)
    {
      for(var j=1;j<arr.length;j++)
      {
         if(arr[j]==i) 
         {
            result.push(j);
         }
      }
    }
    return result;
}
/* 得到排列的反序表  */
function get_opposite(arr,reverse_arr)
{
    var result=[0];
   for(var i=1;i<reverse_arr.length;i++)
    {
      var times=0;
      for(var j=1;j<reverse_arr[i];j++)
      {
         if(arr[j]>i) 
         {  
            times++;  
         }
      }
      result.push(times);
    }
    return result;
}
/* 根据反序表,得到排列的链表结构  */
function get_permulation(table)
{
var link_table=[[0,0]];

   for(var i=table.length-1;i>0;i--)
   {
      var j=0;
      var next=0;
      while(j<=table[i])
      {
         if(j<table[i])
         {
         next=link_table[next][1];
         }
         else 
         { var point=link_table[next][1];
            link_table.push([i,point]);
            link_table[next][1]=link_table.length-1;
         }
         j++;
      }
   }
   
   return link_table;
}
/* 根据排列的链表结构,得到排列  */
function traversal_link_table(table)
{
   var result =[0];
   var next=0;
   while(table[next][1]>0)
      {   
          next=table[next][1];
          result.push(table[next][0]);
      }
    return result;  
}
</script>
</body>
</html>

代码的html界面如下:测试案例中的第1 个0 ,是占位符。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590903.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RK3566 ALC5616录音调试

1.硬件原理图 MIC_P&#xff0c;MIC_N&#xff1a;mic输入。 I2S&#xff1a;总共有5根线&#xff08;这里不是指 i2s 标准接口&#xff09;&#xff1a;两根音频数据线&#xff08;输入/输出&#xff09;、三根时钟线 其中&#xff1a; I2S_LRCK 是指示当前数据线传输的是左声…

【网络】UDP的应用场景

文章目录 翻译功能命令行解析网络聊天室UDP之Windows与Linux 翻译功能 我们写的UDP服务端并不是只接收到数据就完了&#xff0c;还需要进行处理任务。 我们可以在服务端udpServer.hpp中设置一个回调函数 _callback&#xff0c;具体的逻辑通过udpServer.cc中由外部进行传入 代…

Windows系统安全基线

文章目录 前言一、安全基线概述1.操作系统安全基线 二、系统账户安全1.控制密码安全2.密码策略3.账户锁定策略例&#xff1a;密码策略应用例&#xff1a;账户锁定策略应用 三、本地策略1.审核策略2.用户权限分配3.安全选项配置例&#xff1a;审核策略应用例&#xff1a;用户权限…

软件测试理论----软件测试六大测试类型

1、功能测试&#xff1a;关注功能是否正确 常见的关注点 1&#xff09;是否有不正确或者遗漏的功能 2&#xff09;是否满足用户的需求和系统隐藏的需求 3&#xff09;输入能否正确接收&#xff0c;能否输出正确结果 2、可用性测试&#xff1a;关注产品是否好用 常见的关注点…

03灰度变换与空间滤波

文章目录 3灰度变换与空间滤波3.1背景知识3.1.1灰度变换和空间滤波基础 3.2一些基本的灰度变换函数3.2.1图像反转3.2.2对数变换3.2.3幂律&#xff08;伽马&#xff09;变换3.2.4分段线性变换函数 3.3直方图处理3.3.1直方图均衡3.3.2直方图匹配&#xff08;规定化&#xff09;3.…

webpack配置排除打包

webpack配置排除打包 思路 打包时&#xff0c;不要把类似于element-ui第三方的这些包打进来 从网络上&#xff0c;通过url地址直接引入这些包 操作 &#xff08;1&#xff09;先找到 vue.config.js&#xff0c; 添加 externals 项&#xff0c;具体如下&#xff1a; config…

【JavaSE】异常 (异常抛出 异常的捕获 异常声明throws try-catch捕获并处理 finally 自定义异常)

文章目录 异常概念异常结构 异常处理异常抛出异常的捕获异常声明throwstry-catch捕获并处理finally 自定义异常 异常 概念 在程序运行过程中&#xff0c;可能会存在一些奇怪问题&#xff0c;例如&#xff1a;网络不畅&#xff0c;内存报警等等。所以在java中&#xff0c;将程…

NLP:文本预处理总览

1 用n-gram语言模型过滤低质量内容 使用n-gram语言模型对文本进行评估&#xff0c;从而过滤掉低质量的内容。具体来说&#xff0c;可以通过以下步骤进行&#xff1a; 1 将文本分成n-gram序列&#xff0c;其中n是一个整数。 2 使用已经训练好的n-gram语言模型对每个n-gram序列…

面试4年经验的测试员,开口就要25k,却连基础都不会,还不如招应届生!

公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资在10-25k&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。看简历很多都是4年工作经验&#xff0c;但面试…

冒泡排序实现(c++)

目录 冒泡排序简介&#xff1a; 冒泡排序原理&#xff1a; 动图演示&#xff1a; 代码实现&#xff1a; 冒泡排序简介&#xff1a; 冒泡排序&#xff0c;最优时间复杂度O(N)&#xff0c;平均时间复杂度O(N^2)&#xff0c;最差空间复杂度O(N)&#xff0c;平均时间复杂度O(1)…

基于ISIC数据集的皮肤病黑色素瘤分类研究与实现

摘要&#xff1a; 本项目利用残差网络结构对皮肤病图像进行分类&#xff0c;提高了皮肤病诊断的准确度。并结合Flask框架实现一个简单的Web应用&#xff0c;用户可以上传图像文件&#xff0c;经过预处理最后将预测结果显示在界面上。通过该系统&#xff0c;医生和研究人员可以快…

STM32单片机(三)第三节:GPIO输入

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

【计算机网络】 1.4——计算机网络的性能指标(重要!含计算)

计算机网络的性能指标 速率 数据量单位 bit Byte KB(2^10B) MB GB TB 数据量比较特别&#xff0c;使用2进制 kB210B而不是103&#xff0c;注意计算题 比特率/数据率单位 bpskb/s(10^3bps) Mb/s Gb/s Tb/s 带宽 *带宽在模拟信号系统中的意义 信号所包含的各种不同频率成…

WebSocket的那些事(4-Spring中的STOMP支持详解)

目录 一、序言二、Spring对STOMP支持的相关注解三、聊天Demo代码示例1、前端页面chat.html2、相关实体(1) 请求消息参数(2) 响应消息内容(3) 自定义认证用户信息 3、自定义用户认证拦截器4、WebSocket消息代理配置5、ChatController控制器 四、测试用例1、指定用户定时消息推送…

【实用篇】SpringCloud02

文章目录 SpringCloud020.学习目标1.Nacos配置管理1.1.统一配置管理1.1.1.在nacos中添加配置文件1.1.2.从微服务拉取配置 1.2.配置热更新1.2.1.方式一1.2.2.方式二 1.3.配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置3&#xff09;运行两…

TCP通信(复习)

目录 TCP通信实现过程 1、socket函数与通信域 socket函数 参 数 bind函数 与 通信结构体 bind函数 参数 通信地址族与同届结构体 通用地址族结构体 IPV4地址族结构体 listen函数与accept函数 listen函数 accept函数 参 数 作 用 要实现进程间的通信必备&#xff1…

Map、Set和哈希表(数据结构系列14)

目录 前言&#xff1a; 1.搜索树 1.1概念 1.2插入 1.3查找 1.4删除 1.5二叉搜索树整体代码展示 2. Map和Set的讲解 2.1 Map的说明 2.1.1Map的方法 2.2 Set 的说明 2.2.1Set的方法 3.哈希表 3.1哈希表的概念 3.2哈希冲突 3.3冲突的避免 3.4哈希冲突的解决 3.4…

企业物资管理系统的设计与实现(ASP.NET,SQL)

论文阐述了企业物资管理系统的设计与实现&#xff0c;并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户登录&#xff0c;修改密码&#xff0c;物资的基本信息管理&#xff0c;出入库和损坏的管理已经综合查询等功能。 4.1 用户登录模块的实现 …

【滤波】非线性滤波

本文主要翻译自rlabbe/Kalman-and-Bayesian-Filters-in-Python的第9章节09-Nonlinear-Filtering&#xff08;非线性滤波&#xff09;。 %matplotlib inline#format the book import book_format book_format.set_style()介绍 我们开发的卡尔曼滤波器使用线性方程组&#xff0…

【C++】类和对象——拷贝构造函数的概念、拷贝构造函数的特征

文章目录 1.拷贝构造函数1.1拷贝构造函数的概念1.2拷贝构造函数的特征 1.拷贝构造函数 在前面我们已经介绍了构造函数和析构函数的作用和使用方法&#xff0c;而拷贝构造函数则是在对象初始化时调用的一种特殊构造函数。拷贝构造函数可以帮助我们创建一个新的对象&#xff0c;该…