(Translated by https://www.hiragana.jp/)
排列 - 维基百科,自由的百科全书 とべ转到内容ないよう

排列はいれつ

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん
“Permutation”てき各地かくち常用じょうよう名称めいしょう
中国ちゅうごくだい排列はいれつ
台湾たいわん排列はいれつおけ
みなと排列はいれつ
日本にっぽんおけ
P(3,3)=6

排列はいれつえい语:Permutationあるおけしょうしょう异对かたどある符号ふごうすえ确定てき顺序じゅうはいまい个顺じょしょうさくいち排列はいれつ[ちゅう 1]れい如,从一いたろくてき数字すうじゆう720种排列はいれつ,对应于由这些数字すうじ组成てき所有しょゆうじゅう复亦阙漏てき序列じょれつれい如"4, 5, 6, 1, 2, 3" あずか1, 3, 5, 2, 4, 6

おけ换(排列はいれつてき广义概念がいねんざい不同ふどう语境ゆう不同ふどうてき形式けいしきてい义:

  • ざい集合しゅうごうちゅういち集合しゅうごうてきおけ换是从该集合しゅうごううついたり自身じしんてきそうざい有限ゆうげんしゅうてきじょう况,便びんあずか上述じょうじゅつてい一致いっち
  • ざい组合数学すうがくなかおけ换一词的传统意义是一个有序序列,其中元素げんそじゅう复,ただし可能かのうゆう阙漏。れい1,2,4,3以称为1,2,3,4,5,6てきいち个置换,ただし其中5,6。此时通常つうじょうかい标明为“从n个对ぞうr个对ぞうてきおけ换”。

てい

[编辑]

いち集合しゅうごうおけ换为从该集合しゅうごううついたり自身じしんてきそう函数かんすう

恒等こうとうおけ换的てい义为おけ使つかいとく所有しょゆう

所有しょゆう关于个元素的すてき集合しゅうごうてきおけ换组なりてき集合しゅうごう构成对称ぐん,其ぐん运算函数かんすうてき复合よし此两个置换,てきてきてい义为

两个おけ换的复合一般いっぱん满足交换りつ

おけ换数てき计算

[编辑]

此节使用しようおけ换的传统てい义。从个相异元素げんそちゅう取出とりで元素げんそ个元素的すてき排列はいれつ数量すうりょう为:

其中P为Permutation(排列はいれつ),!表示ひょうじ阶乘运算。

赛马为例,ゆう8ひき参加さんか赛,玩家需要じゅようざいいろどりひょうじょうはまにゅうまえ三胜出的马匹的号码,从8ひき马中取出とりで3ひき马来はいまえ3めい排列はいれつ数量すうりょう为:

いん为一共存きょうぞんざい336种可能かのうせいいん此玩ざい一次填入中中奖的概率应该是:

过,中国ちゅうごくだい陆的教科きょうか书则これ从nkてきじょう况记さくある(A代表だいひょうArrangement,そく排列はいれつ)。[1]

じゅう复置换

[编辑]

上面うわつらてきれい建立こんりゅうざい取出とりで元素げんそじゅう复出现状况。

元素げんそちゅう取出とりで元素げんそ元素げんそ以重复出现,这排列はいれつ数量すうりょう为:

[2]

よんほしあや为例,10个数字すうじ4个数字すうじいん可能かのうじゅう所以ゆえん排列はいれつ数量すうりょう为:

这时てき一次性添入中奖的概率就应该是:

抽象ちゅうしょう代数だいすう

[编辑]

ざい集合しゅうごうあずか抽象ちゅうしょう代数だいすうとう领域ちゅう,“おけ换”一词被保留为集合(通常つうじょう有限ゆうげんしゅういた自身じしんてきそうてきいち称呼しょうこれい如对于从一到十的数字构成的集合,其置换将集合しゅうごう いた自身じしんてきそうよし此,おけ换是拥有しょう同定どうてい义域あずかうわいきてき函数かんすう,且其为双射的しゃてき。一个集合上的置换在函数合成运算下构成一个ぐんしょう对称ぐんあるおけ换群。

符号ふごう

[编辑]

以下いか仅考虑有げんしゅうじょうてきおけ换(视为そう),ゆかり 个元素的すてき有限ゆうげんしゅう以一いち对应到集合しゅうごう 有限ゆうげんしゅうてきおけ换可以化约到がた如 {1, ..., n} てき集合しゅうごうおけ换。此时ゆう两种表示法ひょうじほう

だいいち利用りようのり符号ふごうしょう自然しぜんはいじょうつしざいだいいちれつ,而将おけ换后てきはいじょうつしざいだいれつれい如:

表示ひょうじ集合しゅうごう {1,2,3,4,5} じょうてきおけ

だいよしおけ换的しょう继作よう描述,这被しょう为“轮换分解ぶんかい”。分解ぶんかい方式ほうしき如下:固定こていおけ。对任いち元素げんそ ゆかり集合しゅうごう有限ゆうげん そう,必存在そんざいせい整数せいすう 使つかいとく はたおけ まとしょう继作ようひょうなり ,其中 满足 てき最小さいしょうせい整数せいすう

しょう上述じょうじゅつひょうほう ざい したてき轮换 しょう为轮换的长度わが们在此将轮换视作环状排列はいれつれい

あずか

同一どういつ个轮换。よし可知かち ざい したてき轮换ただ决定于 ざい 作用さようてき轨道,于是,にん两个元素げんそ ある给出同一どういつ个轮换,ある给出交的轮换。

わが们将轮换 理解りかい为一类特殊的置换[ちゅう 2]:仅须てい义置换 ,而在其它元素げんそじょうてい义为恒等こうとううつ交的轮换ざい函数かんすう合成ごうせいてき义下しょう交换。

いん此我们可以将集合しゅうごう {1, ..., n} 对一置换分解成不交轮换的合成,此分解ぶんかいわか计顺じょ则是唯一ゆいいつてきれい如前いち个例てき 就对应到 (1 2 5) (3 4) ある (3 4) (1 2 5)。

轮换

[编辑]

轮换一是种特殊的置换。

如果给定これうえてきいち个置换,うえてきいち个子しゅう

わかゆう

则称 为一个轮换。 为轮换的长度。

特殊とくしゅおけ

[编辑]

ざいうえ节的おけ换表ほうちゅう,长度とう于二的环状置换称为换位,这种环状おけ そとはた元素げんそ 交换,并保持ほじ其它元素げんそ变。对称ぐん以由换位生成せいせい

よし于环じょうおけ换长てきおけ分解ぶんかい最少さいしょう个换わか为偶すう,则偶换いや换位そく环状おけ换的长度为奇すう,该置换为偶换;环状おけ换的长度为偶すう,该置换为换位

よし此可てい义任一置换的奇偶性,并可证明:一个置换是偶换位的充要条件是它可以由偶数个换位生成。偶换ざいおけ换群ちゅう构成いちせい规子ぐんしょう交错ぐん

计算论中てきおけ

[编辑]

ぼう些旧课本はたおけ换视为变りょう值的赋值ざい计算つくえ科学かがくなか,这就はた

1, 2, ..., n

赋予变量

x1, x2, ..., xn

てき赋值运算,并要求ようきゅうごと个值ただのう赋予いち个变りょう

赋值/代入だいにゅうてき表明ひょうめい函数かんすうしき编程あずか指令しれいしき编程これ异。纯粹てき函数かんすうしき编程并不提供ていきょう赋值つくえせい。现今数学すうがくてき惯例はたおけ换看さく函数かんすう,其间运算さく函数かんすう合成ごうせい函数かんすうしき编程也类。就赋值语げんてき观点,一个代入是将给定的值“どう时”じゅうはい,这是个有めいてき问题。

おけ换图

[编辑]
(2,5,1,4,3,6)てきおけ换图

いち个无むこうGはたGてきn顶点标记v1,...,vn,对应いち个置换( s(1) s(2) ... s(n) ),とう且仅とうs(i) < s(j) 而 i > j,则图てきvivjあい连,这样てき图称为置换图。

おけ换图てき补图必是おけ换图。

使用しよう计算

[编辑]

多数たすう计算みやこゆう个计さんおけ换数てき nPr 键。しか而此键在一些最先进的桌上型机种中却被隐藏了。れい如:ざい TI-83 ちゅう,按 MATH、さんみぎ键、さい按二。ざい西欧せいおうてき图形计算つくえちゅう,按 OPTN,いちみぎ键(F6)、PROB(F3)、nPr(F2)。

试算ひょう语法

[编辑]

多数たすう试算ひょう软件ゆうはこしき PERMUT(NumberNumber chosen),よう以计さんおけ换。Number 描述对象数量すうりょうてきいち个整すうNumber chosen 描述ごと个置换中しょ对象すうてき整数せいすう

C++演算えんざん范例

[编辑]

循环ほう

[编辑]
#include <iostream>
using namespace std;
bool arrsame(int* arr, int len, int num) {
	int i;
	for (i = 0; i < len; i++)
		if (arr[i] == num)
			break;
	return i != len;
}
bool next_perm(int* perm, const int k, const int n) {
	int i = k - 1;
	do
		perm[i]++;
	while (arrsame(perm, i, perm[i]) || (perm[i] >= n && i--));
	if (perm[0] >= n)
		return 0;
	for (int num = 0, seat = i + 1; seat < k; num++)
		if (!arrsame(perm, i + 1, num))
			perm[seat++] = num;
	return 1;
}
int main() {
	int n, k;
	cout << "perm(n,k):" << endl;
	cin >> n >> k;
	if (n < k || k <= 0)
		return 0;
	int* perm = new int[k];
	for (int i = 0; i < k; i++)
		perm[i] = i;
	do
		for (int i = 0; i < k; cout << ((++i < k) ? ',' : '\n'))
			cout << perm[i] + 1;
	while (next_perm(perm, k, n));
	delete[] perm;
	return 0;
}

递归ほう

[编辑]
#include <bits/stdc++.h>
using namespace std;

struct prem {
	int len;
	vector<int> used, position;
	function<void(vector<int>&)> action;
	prem(int l = 0, function<void(vector<int>&)> a = [](vector<int>& position) {}) : len(l), used(l, -1), position(l), action(a) {}
	void run(int now = -1) {
		if (now == len - 1) {
			action(position);
			return;
		}
		int next = now + 1;
		for (int i = 0; i < len; i++) {
			if (used[i] == -1) {
				used[i] = next;
				position[next] = i;
				run(next);
				used[i] = -1;
			}
		}
	}
};
int main() {
	ios::sync_with_stdio(false), cin.tie(0);
	int len = 4;
	prem p(len, [&](vector<int>& p) {
		for (int i = 0; i < len; i++) {
			cout << p[i] << " ";
		}
		cout << endl;
	});
	p.run();
	return 0;
}

python演算えんざん范例

[编辑]
import sys


def perm(dim, num):
    if not 0 <= num <= dim:
        print('It must be that 0 <= num <= dim!', flush=True, file=sys.stderr)
        return []

    result = []
    xstack = []

    arr = []
    xset = set(range(dim, 0, -1))

    xstack.append((arr, xset))

    while len(xstack):
        theArr, theSet = xstack.pop()
        for theInt in theSet:
            newSet = theSet.copy()
            newSet.remove(theInt)
            newArr = theArr.copy()
            newArr.append(theInt)
            if num == len(newArr):
                result.append(newArr)
            else:
                xstack.append((newArr, newSet))
    return result

ちゅう

[编辑]
  1. ^ 对于はいじょてきじょうがた,请见条目じょうもく组合
  2. ^ 递置换

参考さんこう文献ぶんけん

[编辑]
  1. ^ 普通ふつうだかちゅう教科きょうか数学すうがく 选择せい必修ひっしゅうだいさんさつ(Aばん. 北京ぺきんうみよどちゅう关村南大みなみおおがい17ごういん1ごうろう: 人民じんみん教育きょういく出版しゅっぱんしゃ. : 17 [2024-03-30]. ISBN 978-7-107-34598-2. 
  2. ^ 組合くみあい數學すうがく算法さんぽうあずか分析ぶんせき─. きゅうしょう出版しゅっぱんしゃ. : 29.  OCLC:44527392
  • Miklos Bona. "Combinatorics of Permutations", Chapman Hall-CRC, 2004. ISBN 978-1-58488-434-7.
  • Donald Knuth. The Art of Computer Programming, Volume 4: Generating All Tuples and Permutations, Fascicle 2, first printing. Addison-Wesley, 2005. ISBN 978-0-201-85393-3.
  • Donald Knuth. The Art of Computer Programming, Volume 3: Sorting and Searching, Second Edition. Addison-Wesley, 1998. ISBN 978-0-201-89685-5. Section 5.1: Combinatorial Properties of Permutations, pp.11–72.

外部がいぶ链接

[编辑]