激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java語言字典序排序算法解析及代碼示例

Java語言字典序排序算法解析及代碼示例

2021-03-17 13:06御風(fēng)逍遙 Java教程

這篇文章主要介紹了Java語言字典序排序算法解析及代碼示例,具有一定借鑒價值,需要的朋友可以參考下

字典序法就是按照字典排序的思想逐一產(chǎn)生所有排列。

在數(shù)學(xué)中,字典或詞典順序(也稱為詞匯順序,字典順序,字母順序或詞典順序)是基于字母順序排列的單詞按字母順序排列的方法。 這種泛化主要在于定義有序完全有序集合(通常稱為字母表)的元素的序列(通常稱為計算機(jī)科學(xué)中的單詞)的總順序。

對于數(shù)字1、2、3......n的排列,不同排列的先后關(guān)系是從左到右逐個比較對應(yīng)的數(shù)字的先后來決定的。例如對于5個數(shù)字的排列 12354和12345,排列12345在前,排列12354在后。按照這樣的規(guī)定,5個數(shù)字的所有的排列中最前面的是12345,最后面的是 54321。

例如,由1,2,3組成的所有排列,從小到大的依次為:

123,132,213,231,312,321
由1,2,3,4組成的所有排列:

1234, 1243, 1324, 1342, 1423, 1432,
2134, 2143, 2314, 2341, 2413, 2431,
3124, 3142, 3214, 3241, 3412, 3421,
4123, 4132, 4213, 4231, 4312, 4321.

首先要對給定的字符集中的字符規(guī)定了一個先后關(guān)系,在此基礎(chǔ)上按照順序依次產(chǎn)生每個排列。

[例]字符集{1,2,3},較小的數(shù)字較先,這樣按字典序生成的全排列是:123,132,213,231,312,321。

生成給定全排列的下一個排列,所謂一個的下一個就是這一個與下一個之間沒有字典順序中相鄰的字符串。這就要求這一個與下一個有盡可能長的共同前綴,也即變化限制在盡可能短的后綴上。

后一個排列與前一個排列之間存在一定的關(guān)系,后一個排列的求解過程如下:

設(shè)有排列(p)=2763541,按照字典式排序,它的下一個排列是什么?

2763541 (找最后一個正序35)
2763541 (找3后面比3大的最后一個數(shù)4)
2764531(交換3,4的位置)
2764135 (把4后面的5,3,1反轉(zhuǎn))

下面給出求 p[1…n] 的下一個排列的描述:

求 i = max{j | p[j – 1] < p[j]} (找最后一個正序)
求 j = max{k| p[i – 1] < p[k]} (找最后大于 p[i – 1] 的)
交換 p[i – 1] 與 p[j]得到 p[1] … p[i-2] p[j] p[i] p[i+1] … p[j-1] p[i-1] p[j+1] … p[n]
反轉(zhuǎn) p[j] 后面的數(shù)得到 p[1] …p[i-2] p[j] p[n] … p[j+1] p[i-1] p[j-1] … p[i]

代碼實現(xiàn)如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
private static int[] getPermutation(int[] in) {
    int[] ns = in;
    int base = -1;
    for (int i=ns.length-1; i>=1; i--) {
        if (ns[i-1] < ns[i]) {
            base = i-1;
            break;
        }
    }
    //已經(jīng)到最后一個排列了 全部是逆序
    if (base == -1) return null;
    int bigger=0;
    for (int i=ns.length-1; i>=base; i--) {
        if (ns[i] > ns[base]) {
            bigger = i;
            break;
        }
    }
    //   System.out.println(bigger);
    swap(ns, base, bigger);
    reverse(ns,base+1,ns.length-1);
    return ns;
}
private static void reverse(int[] ns, int i, int j) {
    int left = i, right = j;
    while (left < right) {
        swap(ns, left, right);
        left++;
        right--;
    }
}
private static void swap(int[] ns, int base, int bigger) {
    int temp = ns[base];
    ns[base] = ns[bigger];
    ns[bigger] = temp;
}

總結(jié)

以上就是本文關(guān)于Java語言字典序排序算法解析及代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/zhhtao89/article/details/50394347

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一本一本久久a久久精品综合小说 | av在线免费看网站 | 日韩一级毛毛片 | 久久国产精品二国产精品中国洋人 | 国产日韩在线观看视频 | 成人宗合网 | 日本免费一区二区三区四区 | 国产乱淫av片免费观看 | 国产一区二区免费在线观看 | sesee99| 福利在线小视频 | 久久精品免费网站 | 国产69精品久久久久9999不卡免费 | 久久久久99一区二区三区 | 久久久视频免费观看 | 男女生羞羞视频网站在线观看 | 快播av在线 | 欧美艹逼| 99亚洲国产精品 | 国产精品无码久久久久 | 日本大片在线播放 | 精品中文字幕在线播放 | 成人精品aaaa网站 | 亚洲综合一区在线观看 | 99在线精品视频免费观看20 | 中文日韩 | 加勒比婷婷色综合久久 | 久久久看| 国产精品久久久久久久四虎电影 | 国产精品美女一区二区 | 成人在线视频在线观看 | 在线a亚洲视频播放在线观看 | 亚洲成年人免费网站 | 国产精品久久久久久久久久三级 | 国产青草网 | 国产精品久久久久久久久久久久午夜 | 欧美亚洲国产一区二区三区 | 亚洲天堂中文字幕在线观看 | 99精品国产小情侣高潮露脸在线 | 一色一情 | 国产高潮失禁喷水爽到抽搐视频 |