词典顺法是指基于词典顺的思想逐一生成所有的数组。
在数学中,词典或词典的顺序(也称为词汇顺序、词典顺序、字母顺序或词典顺序)是按字母顺序排列单词的方法。 这种泛化主要在于定义有序且完全有序的集合,通常称为字母,要素顺序,通常称为计算机科学中的单词,整体顺序。
对于数字1、2、3、 n的排列,不同排列的优先级是通过从左到右逐个比较对应的数字优先级来确定的。 例如,对于五个数字的数组12354和12345,数组12345在前面,数组12354在后面。 根据这样的规定,在所有五个数字的排列中,开头是12345,最后是54321。
例如,由1、2和3组成的所有数组按从小到大的顺序如下:
123、132、213、231、312和321
1、2、3、4组成的所有数组:
1234、1243、1324、1342、1423、1432,
234、2143、2314、2341、2413、2431,
3124、3142、3214、3241、3412、3421、
4123、4132、4213、4231、4312和4321。
首先,对给定字符集的字符确定优先关系,在此基础上依次生成各数组。
[示例]字符集{1、2、3}以小数字开头,这样按字典顺序生成的全部阵列为:123、132、213、231、312、321。
生成所有数组的下一个数组。 第一个是,这一个和下一个之间没有按词典顺序相邻的字符串。 这要求限制为以下尽可能长的公共前缀,即变化尽可能短的后缀:
后者序列与前一序列之间存在一定的关系,后者序列的求解过程如下。
设置数组(p )=2763541,按字典式排序的话,下一个数组是什么?
2763541 (寻找最后的正序35 () ) ) ) )。
263541(3 (查找3后面大于3的最后一个数4 ) )。
764531(3 (交换3、4的位置) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )。
264135(4 (反转4后面的5、3、1 ) )。
求出p[1…n]的下一个排列的记述如下所示:
求出I=max { j|p [ j1 ] p [ j ] } ((寻找最后一个正序) )
求出j=max { k|p [ I1 ] p [ k ] } (最后寻找大于p [ I1 ]的内容)
以p [ I1 ]和p[j]交换p [1] . p [ I-2 ] p [ j ] p [ I ] . p [ j-1 ] p[I-1] p [ J1 ] . p [ n ]
反转p[j]后的数以获得p [1]…p [ I-2 ] p [ j ] p [ n ]…p [ J1 ] p [ I-1 ]…p [ j-1 ]…I ]
代码实现如下。
权限[ ]获取权限(int [ ] in )。
int[] ns=in;
int base=-1;
for(intI=ns.Length-1; i=1; I----) {
if(ns(I-1 ) ns (I ) ) {
base=i-1;
黑;
}
}
//已经排在最后一排的都是逆序
if(base==-1 )返回空值;
int bigger=0;
for(intI=ns.Length-1; i=base; I----) {
if(ns[I]ns[base] ) {
bigger=i;
黑;
}
}
//system.out.println(bigger );
swap(ns,base,bigger );
reverse(ns,base 1,ns.length-1 );
return ns;
}
privatestaticvoidreverse (int [ ] ns,int i,int j ) {
int left=i,right=j;
while(leftright ) {
swap(ns,left,right );
左;
right----;
}
}
privatestaticvoidswap(int[]ns,int base,int bigger ) {
int temp=ns[base];
ns[base]=ns[bigger];
ns[bigger]=temp;
}
总结
以上是本文对Java语言词典顺序排序算法的分析和代码示例的全部内容,希望对大家有所帮助。 感兴趣的请继续参考本网站的其他相关主题。 如果有不足的地方,欢迎评论。 感谢朋友们对本站的支持!