欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2018年01月09日 09:32:24   作者:御風逍遙  
這篇文章主要介紹了Java語言字典序排序算法解析及代碼示例,具有一定借鑒價值,需要的朋友可以參考下

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

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

對于數字1、2、3......n的排列,不同排列的先后關系是從左到右逐個比較對應的數字的先后來決定的。例如對于5個數字的排列 12354和12345,排列12345在前,排列12354在后。按照這樣的規(guī)定,5個數字的所有的排列中最前面的是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ī)定了一個先后關系,在此基礎上按照順序依次產生每個排列。

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

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

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

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

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

下面給出求 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]
反轉 p[j] 后面的數得到 p[1] …p[i-2] p[j] p[n] … p[j+1] p[i-1] p[j-1] … p[i]

代碼實現如下:

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;
		}
	}
	//已經到最后一個排列了 全部是逆序
	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;
}

總結

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

相關文章

  • java hasNextInt判斷是否為數字的方法

    java hasNextInt判斷是否為數字的方法

    今天小編就為大家分享一篇java hasNextInt判斷是否為數字的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 深入解析java HashMap實現原理

    深入解析java HashMap實現原理

    這篇文章主要介紹了深入解析java HashMap實現原理的相關資料,需要的朋友可以參考下
    2015-09-09
  • 你不知道的 IDEA Debug調試小技巧(小結)

    你不知道的 IDEA Debug調試小技巧(小結)

    這篇文章主要介紹了你不知道的 IDEA Debug調試小技巧(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Open?Feign之非SpringCloud方式使用示例

    Open?Feign之非SpringCloud方式使用示例

    這篇文章主要為大家介紹了Open?Feign之非SpringCloud方式使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 詳解Java如何實現一個BlockingQueue

    詳解Java如何實現一個BlockingQueue

    這篇文章主要為大家詳細介紹了Java如何實現一個BlockingQueue阻塞隊列,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-06-06
  • 使用?Spring?Boot?Admin?監(jiān)控應用狀態(tài)的詳細過程

    使用?Spring?Boot?Admin?監(jiān)控應用狀態(tài)的詳細過程

    這篇文章主要介紹了使用?Spring?Boot?Admin?監(jiān)控應用狀態(tài),該模塊采集應用的內部信息,并暴露給外部的模塊,支持?HTTP?和?JMX,并可以與一些第三方監(jiān)控系統(tǒng)(如?Prometheus)整合,需要的朋友可以參考下
    2022-09-09
  • Java中JSON字符串進行各種轉換的方法小結

    Java中JSON字符串進行各種轉換的方法小結

    Gson和Hutool的JSONUtil都是常用的用于處理JSON數據的工具庫,它們提供了簡單易用的API來進行JSON字符串的解析、轉換和操作,下面就跟隨小編一起學習一下如果使用他們實現JSON字符串的各種轉換吧
    2024-01-01
  • springboot集成gzip和zip數據壓縮傳輸(適用大數據信息傳輸)

    springboot集成gzip和zip數據壓縮傳輸(適用大數據信息傳輸)

    ?在大數據量的傳輸中,壓縮數據后進行傳輸可以一定程度的解決速度問題,本文主要介紹了springboot集成gzip和zip數據壓縮傳輸,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Spring注解@Qualifier的使用&&與@Primary注解的不同

    Spring注解@Qualifier的使用&&與@Primary注解的不同

    今天帶你了解一下Spring框架中的@Qualifier?注解,它解決了哪些問題,以及如何使用它,我們還將了解它與?@Primary?注解的不同之處,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Java正則校驗密碼至少包含字母數字特殊符號中的2種實例代碼

    Java正則校驗密碼至少包含字母數字特殊符號中的2種實例代碼

    正則表達式驗證密碼功能在項目中經常被使用到,但是很多朋友還是不大會使用密碼正則表達式進行驗證,下面這篇文章主要給大家介紹了關于Java正則校驗密碼至少包含字母數字特殊符號中2種的相關資料,需要的朋友可以參考下
    2022-08-08

最新評論