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

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

计算机程序设计艺术的第三卷 第五章排序中,第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://xiahunao.cn/news/252058.html

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

相关文章

JS实现计时器/秒表功能

系统学习JS时的一个小练习 直接上代码吧&#xff0c;注释写得还算详细&#xff0c;就不赘述了&#xff0c;很简单的一个练习。 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta http-equiv"X-UA-C…

JavaScript 计时器

1.在JavaScript中&#xff0c;我们可以在设定的时间间隔之后来执行代码&#xff0c;而不是在函数被调用后立即执行。 2&#xff0e;计时器类型&#xff1a; &#xff08;1&#xff09;一次性计时器&#xff1a;仅在指定的延迟时间之后触发一次。 &#xff08;2&#xff09;间…

window遇到 stopcode: 0xc000021a 无法启动的问题解决

今天朋友电脑window10遇到以上问题&#xff1a;stopcode: 0xc000021a 无法自动修复和启动的问题。 解决办法如下&#xff1a; 第一步、进入dos命令行 点击其他选项&#xff08;Advanced options&#xff09; 点击工具 第二步、确定系统盘 进入dos之后 输入一下命令 回车…

vivo Y55s 评测

vivo Y55s正面配备了一块6.58英寸水滴屏&#xff0c;2408*1080分辨率&#xff0c;支持DCI-P3广色域以及防蓝光护眼模式等&#xff0c;同时vivo Y55s是Y系列首款支持夜读模式的产品&#xff0c;亮度最低可至1nit&#xff0c;暗光和夜晚使用对眼睛更舒服&#xff0c;屏幕阅读更柔…

步步高S5救砖

笔者是个学(chun)生(fei)党(wu)&#xff0c;由于被家长的限制&#xff0c;至今未有过手机&#xff0c;前几个月&#xff0c;我盯上了我的步步高S5&#xff0c;从此它承受了它这个机型不该承受的事。 自从给它刷了三方recovery&#xff0c;我总是保(zhe)养(teng)它&#xff0c;…

vivoy67android系统升级,vivo Y67刷机教程_vivo Y67升级更新官方系统包

上一节已经给大家说了咱们的vivo Y67手机的官方rom包如何下载了&#xff0c;下载下来之后要干什么呢&#xff0c;那就是进行刷机了&#xff0c;为了方便大家操作&#xff0c;所以在这里整理了一个详细的刷机教程供大家参考了&#xff0c;这个刷机教程也可以叫做升级教程&#x…

32位linux装64位rpm包,360浏览器提供rpm包(支持MIPS64)及32位deb包(兆芯)

360安全浏览器Linux版本在原来支持64位deb包的基础上推出rpm包支持龙芯_MIPS64&#xff0c;同时还推出32位deb包支持兆芯_x86。目前已经提供下载。到现在360安全浏览器不止支持Ubuntu、Deepin&#xff0c;还支持知名的国产操作系统如银河麒麟、中标麒麟。经过测试&#xff0c;大…

edge浏览器下载插件出现Download interrupted

更改hosts文件 打开hosts文件 hosts文件路径 "c:\windows\system32\drivers\etc\" 可以直接复制上述一行在winr中输入即可打开 向文件末尾行追加如下两行 131.253.33.219 edge.microsoft.com 131.253.33.219 msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.…

Chrome浏览器直接下载pdf文件的设置步骤

使用Google Chrome浏览器&#xff0c;在点击网页中的pdf文件时&#xff0c;浏览器会直接将pdf文件打开并显示&#xff0c;要下载pdf文件的话&#xff0c;还需要进行另存操作。 有的时候我们点击pdf文件就是为了直接下载&#xff0c;而不是为了在浏览器中查看pdf文件。可以按以…

解决Edge浏览器下载文件文件名乱码问题

文件名中含有中文的文件下载&#xff0c;用谷歌、火狐、搜狗等浏览器都可以正常下载&#xff0c;但使用Windows自带的edge浏览器下载时文件名出现乱码问题。如下&#xff1a; 解决方案&#xff1a; 在输出头中的文件名进行urlencode编码处理。例如&#xff1a; header(Content…

微信扫一扫二维码直接打开外部浏览器下载app怎么解决

通过扫描二维码下载APP已成为一个非常方便的方式&#xff0c;微信也成为扫描二维码重要的工具&#xff0c;但是扫描后微信浏览器会对APK和appStore的链接进行屏蔽&#xff0c;导致用户无法正常下载。 提供解决方案&#xff1a;1.安卓用户点击直接跳转到默认浏览器打开&#xf…

chrome浏览器离线安装包下载地址

在谷歌官网下载的chrome浏览器&#xff0c;下载的是安装器&#xff0c;要通过联网安装&#xff0c;谷歌浏览器官网&#xff1a;https://www.google.com/intl/zh-CN/chrome/https://www.google.com/intl/zh-CN/chrome/ 最新版本的统一下载链接&#xff0c;通过以下链接下载的都是…

使用Motrix解决浏览器下载速度慢的问题

一、问题阐述&#xff1a;网速明明不慢&#xff0c;下载某些资源能跑几M/s甚至10M/s&#xff0c;但是在某些网站下载某些资源则只有几十k/s&#xff0c;与其等几个小时让他慢慢下载&#xff0c;不如使用下载器下载。 二、解决方案&#xff1a;使用下载器Motrix进行拦截下载 三…

微信链接跳转浏览器 H5实现APP下载功能实现方法

由于微信的限制&#xff0c;应用文件在内置浏览器中下载全部被屏蔽掉&#xff0c;造成很多人用微信扫描二维码下载时点击下载按钮没反应&#xff0c;我想到的是做一个提示用户在浏览器中打开下载。 可以参考&#xff1a;微信打开网址添加在浏览器中打开提示 和 微信扫描打开AP…

firefox57浏览器下载,火狐firefox 57正式版32位,64位下载,安装和使用笔记

firefox浏览器的一直存在flash问题&#xff0c; 导致口碑不好&#xff0c; 最近推出了firefix57&#xff0c; 官方说重写了底层的内容&#xff0c; 性能更好&#xff0c;速度更快&#xff0c; 于是子恒老师安装试用了firefox57版本&#xff0c; 把其中的过程记录下来。 一、 f…

Selenium+Python浏览器下载弹窗的处理

SeleniumPython浏览器下载弹窗的处理 在使用selenium实现自动化下载的时候&#xff0c;遇到一个比较头疼的问题&#xff0c;就是浏览器下载弹窗的处理。由于这个弹窗是浏览器系统自己弹出的&#xff0c;所以用selenium定位弹窗并操作的方法并不可行&#xff0c;在网上找了很多资…

火狐浏览器50Linux32位,火狐浏览器32位完整离线安装包下载

功能介绍 火狐浏览器32位完整离线安装包下载 火狐浏览器32位(firefox)是款非常优秀的网上浏览工具。火狐浏览器(firefox)是唯一一款自由的浏览器,您可以根据自己喜好,选择添加自己需要的功能,打造专属自己的个性浏览器,同时软件也是为用户提供了极快、安全的上网体验,喜欢…

火狐linux 32位,火狐浏览器32位电脑版下载,火狐浏览器官方下载最新版电脑版32位 v1.0 - 浏览器家园...

火狐浏览器32位电脑版是款非常优秀的网上浏览工具。火狐浏览器(firefox)是唯一一款自由的浏览器&#xff0c;您可以根据自己喜好&#xff0c;选择添加自己需要的功能&#xff0c;打造专属自己的个性浏览器&#xff0c;同时软件也是为用户提供了最快、最安全的上网体验&#xff…

电脑浏览器下载速度很慢怎么办

有网友反映自己的浏览器下载速度很慢怎么办&#xff1f;这种通过可能是浏览器缓存太多&#xff0c;没有优化等原因导致。下面小编就以几种常用的浏览器为例&#xff0c;给大家解答下浏览器下载速度很慢的解决方法。 工具/原料&#xff1a; 系统版本&#xff1a;windows10系统…

如何在谷歌浏览器官网下载谷歌浏览器32位、64位或其他版本最新的离线安装包?

下面的网址需要能访问到外网&#xff0c;如果你没有科学上网软件的话&#xff0c;直接用下面的阿里云网盘链接下载就好&#xff0c;都是我自己整理的完整离线安装包&#xff1a; 阿里云盘分享 首先我们下载一个适用于 Windows 10/8.1/8/7 系统的64位谷歌浏览器正式版的离线安装…