什么是字典序2定居_具體的算法
什么是字典序2定居_具體的算法
字典序不同排列的先后關(guān)系是從左到右逐個比較對應(yīng)的數(shù)字的先后來決定的。那么你對字典序了解多少呢?以下是由學(xué)習(xí)啦小編整理關(guān)于什么是字典序的內(nèi)容,希望大家喜歡!
字典序的概述
數(shù)字也可以作為特別的字符串...這種情況下...如果我們用字典序進(jìn)行比較...就有可能會出現(xiàn)下面這種情況...
"100"<"1000"..(加引號的目的是為了區(qū)別數(shù)字..與數(shù)字串..)
事實上呢.在計算機里...我們會這么看..和之前一樣...我們會首先比較第一個字符...
這里"1"='1'..(已經(jīng)可以看到區(qū)別了..在數(shù)中..數(shù)字因為位置的不同會有不同的意義..而這里.這種分別變的不一樣了...)
..一步比較...還沒有辦法分辨出它們的大小...只好再比較之后的數(shù)...
這種情況回直到最后一次嘗試...第一個字符串已經(jīng)空掉之前...
如果硬要比較的話...
空格的ascii碼值是32.(Ascii碼還是用兩位十六進(jìn)制表示比較合適)
‘0’的ASCII碼值是48 所以‘100’<'1000'
例子:依次比字母, 如boat < boot <
cap < card < cat < to < too< two < up
字典序如下:
設(shè)P是1~n的一個全排列:p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn
1)從排列的右端開始,找出第一個比右邊數(shù)字小的數(shù)字的序號j(j從左端開始計算),即 j=max{i|pi<pi+1}
2)在pj的右邊的數(shù)字中,找出所有比pj大的數(shù)中最小的數(shù)字pk,即 k=max{i|pi>pj}(右邊的數(shù)從右至左是遞增的,因此k是所有大于pj的數(shù)字中序號最大者)
3)對換pj,pk
4)再將pj+1......pk-1pkpk+1......pn倒轉(zhuǎn)得到排列p'=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1,這就是排列p的下一個排列。
字典序的算法
設(shè)置了中介數(shù)的字典序全排列生成算法,與遞歸直接模擬法和循環(huán)直接模擬法的最大不同是,不需要模擬有序全排列的生成過程,也就不需要逐一地生成各個全排列,只要知道初始全排列,就能根據(jù)序號(m-1),直接得到第m個全排列,因此速度非常快。
它的缺點是在生成序號(m-1)的遞增進(jìn)進(jìn)制數(shù)時,需要事先創(chuàng)建一個用來存儲n的階乘數(shù)n! 的數(shù)組p[],所以n的值不能太大,否則就會溢出,根據(jù)我的測試結(jié)果,當(dāng)1<=n<=20時不會溢出,當(dāng)21<=n時會溢出。
設(shè)置了中介數(shù)的字典序全排列生成算法需要設(shè)置中介數(shù),在實際應(yīng)用中比較繁瑣,不如由前一個排列直接推得下一個排列方。
看過“字典序的算法”的人還看了: