1. 程式人生 > >排列逆序數和計算

排列逆序數和計算

一. 排列的逆序與逆序數

逆序: 取一個排列為標準排列, 其它排列中某兩個元素的次序與標準排列中這兩個元素的次序相反時,則稱這兩個元素構成一個逆序.
逆序數: 一個排列中所有逆序總數叫做這個排列的逆序數. (注意是一個排列)
逆序數為偶數稱為偶排列, 逆序數為奇數稱為奇排列, 標準排列規定為偶排列.


通常取從小到大的排列為標準排列, 即 1 ~ n的全排列中取123...(n - 1)n為標準排列.

例: 123全排列的逆序數

全排列	逆序數	逆序對 
123		0							(排列123的逆序數為0)													
132		1		32					(排列132的逆序數為1)
213		1		21					....
231		2		21, 31						
312		2		31, 32
321		3		32, 31, 21

例: 1234全排列的逆序數

全排列	逆序數	逆序對
1 234
1 243			43
1 324			32
1 342			32, 42
1 423			42, 43
1 432			42, 43

2 134			21
2 143			21, 43
2 314			21, 31
2 341			21, 31, 41
2 413			21, 41, 43
2 431			21, 41, 43

3 124			31, 32
3 142			31, 32, 42
3 214			31, 32, 21
3 241			31, 32, 21, 41
3 412			31, 32, 41, 42
3 421			31, 32, 41, 42, 21

4 123			41, 42, 43
4 132			41, 42, 43, 32
4 213			41, 42, 43, 21
4 231			41, 42, 43, 21, 31
4 312			41, 42, 43, 31, 32
4 321			41, 42, 43, 32, 31, 21

http://www.tongji.edu.cn/~math/xxds/kcja/kcja_b/1-2.htm

二. 逆序數的計算

方法1: 直接遍歷比較
int IinvertedSequence(char* pData, int nLen)
{
	int nCount = 0;
	int i, j;
	for(i = 0; i < nLen; ++i)
	{
		for(j = i + 1; j < nLen; ++i)
		{
			if(pData[i] > pData[j])
			{
				++nCount;
			}
		}
	}
	return nCount;
}



相關推薦

排列序數計算

一. 排列的逆序與逆序數 逆序: 取一個排列為標準排列, 其它排列中某兩個元素的次序與標準排列中這兩個元素的次序相反時,則稱這兩個元素構成一個逆序. 逆序數: 一個排列中所有逆序總數叫做這個排列的逆序數. (注意是一個排列) 逆序數為偶數稱為偶排列, 逆序數為奇數稱為奇排列

演算法學習01 序數排列

今天寒假第一天開始認認真真的學習Java演算法,主要學習了兩個題。1.逆序數就是找這個數的後面,有幾個數比它小import java.util.Iterator; import java.util.Scanner; public class Inversion_num {

應用Python來計算排列中的序數個數

在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為一個逆序。一個排列中逆序的總數就稱為這個排列的逆序數。一個排列中所有逆序總數叫做這個排列的逆序數。也就是說,對於n個不同的元素,先規定各元素之間有一個標準次序(例如n個 不同的自然數,可規定從小到大為標準次序),於是在這n

排列序數(9018_1679)

lose pla char none getchar har div open () 為了做noip2013的火柴排序,特地練了一下逆序對的求法。 逆序對的求法,若要nlogn,有2種,一種就是用歸並排序的思想。另一種,就是線段樹或者樹狀數組。 這裏,我采用了第一種。

牛客網NowCoder 2018年全國多校算法寒假訓練營練習比賽(第五場)A.序數 B.Big Water Problem(線段樹-區間查詢求和單點更新) F.The Biggest Water Problem H.Tree Recovery(線段樹-區間查詢求和區間更新)

numbers col 如果 -o img 數組 數據 .html log 隨便補了幾道題,可能也就能寫出來這幾道吧。最近被搜索虐爆了,要抓緊去看搜索,隨便寫寫就溜,備忘一下線段樹新的板子(以前的不好用,太垃圾了) A.逆序數 時間限制:C/C+

[樹狀數組]求排列序數

正整數 服務 滿足 一個 逆序數 興趣 internet 排序 ons 求排列的逆序數 題目描述 在Internet上的搜索引擎經常需要對信息進行比較,比如可以通過某個人對一些事物的排名來估計他(或她)對各種不同信息的興趣,從而實現個性化的服務。 對於不同的排名結

計算一個數的序數的個數(1)

一、逆序數的定義     排列中所有逆序的總數稱為此排列的逆序數.      二、python程式設計思路 (1)分別取數字中的每一位與後面的數對比,把大於的次數新增到列表中;(2)列表求和; def cul_xushu(numstr): numstr=str

❗️❗️❗️LeetCode 315 Hard 序數計算 Python

方法一: 演算法:分治/歸併排序     思路:         利用分治的思想,歸併排序時當前下標i後有多少個元素要把位置提到i之前就是其逆序數,    

劍指offer,計算序數,java

題目描述 在陣列中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個陣列中的逆序對的總數P。並將P對1000000007取模的結果輸出。 即輸出P%1000000007 public class test { public static voi

輸入一個3位整數,程式設計計算並輸出它的序數(例:輸入-123,則忽略負號,由123分離出其百位1,十位2,個位3,並計算輸出321)

#include<stdio.h> #include<math.h> main() {int x,a,b,c,y;printf("請輸入一個3位整數:");   scanf("%d",&x);            a=fabs(x/100)

NOI2.4基本演算法之分治 求排列序數 分析----也是醉了...

剛開始寫部落格,請大家多提意見 一、題目描述 總時間限制: 1000ms 記憶體限制: 65536kB 描述 在Internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一

序數《求所有子序列的序對個數的

題目 題解 一對逆序對對答案的貢獻是2^(n-2) 故統計出逆序對個數後乘上即可 注意序列長1的情況什麼什麼的 O( nlogn ) 程式碼 #include<std

程式設計計算並輸出一個3位整數的序數

#include <stdio.h> int main() { int y,a,b,c,x; printf("輸入一個3位整數:"); scanf("%d",&y); a=y/100; b=(y%100)/10;

openjudge 7622 求排列序數(歸並)

一些事 搜索引擎 .cn div const algorithm 表示 ref ans 7622:求排列的逆序數 總時間限制: 1000ms 內存限制: 65536kB描述 在Internet上的搜索引擎經常需要對信息進行比較,比如可以通過某個人對一些事物的排名來估

|NOIOJ|二分歸併|7622:求排列序數

描述 在Internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他(或她)對各種不同資訊的興趣,從而實現個性化的服務。 對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1,2,…,n的排列i1,i2,…,in,如果其中存在

HDU 4944 序數

blog opened pla void div 如果 ++ acm 插入 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 題意: 給出一個序列,可以相鄰的交換k次,求 k 次之後,逆序數對最少是多少; 分

OOP中的協變

ott 做的 協變 padding 我們 add adding 原則 列表 逆變和協變在存在於強類型語言中,盡管非常少提及,可是裏面蘊含了面向對象的世界觀。感謝和我一起討論這個問題的人。 這裏用了C#、Scala的語法作為演示樣例,事實上逆變和協變的概念跟語言本身關

ZOJ-2386 Ultra-QuickSort 【樹狀數組求序數+離散化】

bool 個數 lock ascend nat 前綴和 ron determine inf Description In this problem, you have to analyze a particular sorting algorithm. The algor

序數

scan memory () star F12 輸出 空間限制 ble 基礎 1019 逆序數 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關註 在一個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的

【51NOD-0】1019 序數

+= open clas tdi for string d+ display algorithm 【算法】離散化+樹狀數組(求逆序對) 【題解】經典,原理是統計在i之前插入的且值≤i的個數,然後答案就是i-getsum(i) #include<cstdio>