El terme Ordre lexicogràfic és un terme matemàtic conegut per noms: ordre lèxic, producte lexicogràfic(al), ordre alfabètic o ordre del diccionari.
Aquesta secció tractarà l'ordre lexicogràfic del tema, la seva definició i altra informació detallada. Després d'això, aprendrem a utilitzar el concepte d'ordre lexicogràfic en el Llenguatge de programació Java .
Definició de l'ordre lexicogràfic
L'ordre lexicogràfic o lexicogràfic en matemàtiques és una generalització de la seqüència alfabètica dels diccionaris a les seqüències dels símbols o elements ordenats d'una llista totalment ordenada. El terme ordre lexicogràfic està motivat per la paraula 'lèxic'. El lèxic és el conjunt de paraules utilitzades en algunes de les altres llengües i té un ordenament convencional. Així, l'ordre lexicogràfic és una manera de formalitzar l'ordre de les paraules on es dóna l'ordre dels símbols subjacents.
En programació, l'ordre lexicogràfic es coneix popularment com Ordre del diccionari i s'utilitza per ordenar una matriu de cadenes, comparar dues cadenes o ordenar elements de matriu. Es fa bastant fàcil ordenar els elements lèxicament. És perquè l'ordre lexicogràfic té diverses variants i generalitzacions en les quals:
- Una variant és aplicable a les seqüències de diferents longituds, ja que abans de considerar els elements particulars, es comparen les longituds de les seqüències.
- La segona variant s'utilitza en subconjunts d'ordre d'un conjunt finit donat. Ho fa assignant un ordre total al conjunt finit. A continuació, està convertint subconjunts en seqüències creixents a les quals s'aplica l'ordre lexicogràfic.
- La generalització es refereix a la seqüència del producte cartesià de conjunts parcialment ordenats, i aquesta seqüència és un ordre total, si i només si cada factor del producte cartesià està ordenat totalment.
Comprensió de la noció formal d'ordre lexicogràfic
- Per entendre la noció formal d'ordre lexicogràfic:
- Comença amb un conjunt finit A, que es coneix com a alfabet i està completament seqüenciat. A més, vol dir que per a a i b (dos símbols qualsevol que siguin diferents i no iguals) a A, o a
- Aquí, les paraules de A són la seqüència finita de símbols de A i inclou paraules de longitud 1 que contenen un sol símbol, paraules de longitud 2 amb dos símbols, i per a paraules de longitud tres, és 3, etc. Pel que fa, també inclou la seqüència buida ? no porta cap símbol. Així, l'ordre lexicogràfic del conjunt finit A es pot descriure com:
- Suposem, per als dos mons diferents de la mateixa longitud, a=a1a2…aki b=b1b2…bkés donat. Aquí, l'ordre de dues paraules depèn de l'ordre alfabètic dels símbols en primer lloc i, on dues paraules varien en comptar des del principi de les paraules, és a dir, complint la condició a i i dins l'ordre de l'alfabet A.
- Si dues paraules han variat en longitud, l'ordre lexicogràfic habitual omple la paraula amb una longitud més curta amb espais en blanc al final fins que ambdues paraules es converteixen en la mateixa longitud, i després es comparen les paraules.
Implementació de la lexicogràfica en Java
Com s'ha comentat anteriorment, aquest ordre lexicogràfic es pot utilitzar per comparar dues cadenes o per ordenar els elements. Aquí, parlarem dels dos mètodes i implementarem cadascun.
Ordenació d'elements per ordre lexicogràfic
Es coneix com a ordenar les paraules ordre lexicogràfic o també conegut com Ordre del diccionari . Vol dir que en aplicar l'ordre lexicogràfic, les paraules s'ordenen alfabèticament segons els seus alfabets components. Per ordenar una matriu de cadenes en ordre lexicogràfic, tenim els dos mètodes següents:
Mètode 1: Aplicant qualsevol mètode d'ordenació
A continuació es mostra el codi d'exemple que ens permetrà entendre com podem realitzar l'ordenació d'elements en ordre lexicogràfic:
public class Main { public static void main(String[] args) { String[] name = { 'John','Remo','Mixy','Julie','Ronny'}; int n = 5; System.out.println('Before Sorting'); for(int i = 0; i <n; i++) { system.out.println(name[i]); } for(int i="0;" < n-1; ++i) for (int j="i" + 1; 0) string temp="name[i];" name[i]="name[j];" name[j]="temp;" system.out.println(' after performing lexicographical order: '); n; pre> <p> <strong>Code Explanation:</strong> </p> <p>In the above code, we have created a class Main within which the main () method is created.</p> <ul> <li>A string has been initialized, holding some values to it, and each word will get printed as per for loop.</li> <li>Then, we have implemented the main logic within another for loop with the help of which we can form the lexicographical order of the words given.</li> <li>Finally, via for loop, the arranged words are printed on the screen.</li> </ul> <p> <strong>On executing the above example code, we got the following output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/62/lexicographical-order-java.webp" alt="Lexicographical Order Java"> <p>From the output, we can analyze that the given sequence of the words was not in alphabetical order but after applying the lexicographical order code, we can see that every word is sequenced now in alphabetical order.</p> <p> <strong>Method 2: Applying sort () function</strong> </p> <p>The sort () method is available in the Arrays class within the util package.</p> <p>Below is the example code given that will let us understand that how we can perform sorting on elements in Lexicographical order:</p> <pre> import java.io.*; import java.util.Arrays; class Main { public static void printArray(String str[]) { for (String string : str) System.out.print(string + ' '); System.out.println(); } public static void main(String[] args) { String arr[] = {'John','Harry','Emlie','Ronny','Julie','Mary' }; Arrays.sort(arr,String.CASE_INSENSITIVE_ORDER); printArray(arr); } } </pre> <p> <strong>On executing the above output, we got the below-shown output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/62/lexicographical-order-java-2.webp" alt="Lexicographical Order Java"> <h3>Comparing two strings using Lexicographical order in Java</h3> <p>For comparing two strings using Lexicographical order, we have the following two methods:</p> <p> <strong>Using compareTo () method</strong> </p> <p>Let's begin one by one:</p> <p> <strong>Using compareTo () method</strong> </p> <p>Below is an example implementation by which we can compare to strings lexicographically:</p> <pre> import java.lang.*; public class StringExample { public static void main(String[] args) { String str1 = 'String', str2 = 'Comparison'; int get_val = str1.compareTo(str2); if (get_val <0) { system.out.println('str1 is greater than str2'); } else if (get_val="=" 0) equal to less < pre> <p> <strong>Code Explanation:</strong> </p> <ul> <li>We have created a class StringExample where we have implemented the main () method.</li> <li>We have initialized two strings, i.e., str1 and str2.</li> <li>Next, using the compareTo () method, we have compared the strings str1 and str2.</li> <li>After it, if the get_val value is found less than 0, it means str1 is greater than str2.</li> <li>Else if the get_val value is equal to 0, it means both str1 and str2 strings are equal.</li> <li>Else, both the strings str1 is less than str2.</li> </ul> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/62/lexicographical-order-java-3.webp" alt="Lexicographical Order Java"> <p> <strong>By creating a user-defined function</strong> </p> <p>Below we have created a user-defined function using which we can compare two strings lexicographically. The code is as follows:</p> <pre> public class StringExample { public static void main(String[] args) { String firstString = 'Red'; String secondString = 'Red'; String thirdString = 'Green'; String fourthString = 'Yellow'; String fifthString = 'REdGreen'; System.out.println('Comparing two strings lexicographically by user defined function'); System.out.print(' Compairing firstString ('+firstString+') to the secondString ('+secondString+') returns: '); System.out.println(compareString(firstString, secondString)); System.out.print(' Compairing secondString ('+secondString+') to the thirdString ('+thirdString+') returns: '); System.out.println(compareString(secondString, thirdString)); System.out.print(' Compairing thirdString ('+thirdString+') to the fourthString ('+fourthString+') returns: '); System.out.println(compareString(thirdString, fourthString)); System.out.print(' Compairing fourthString ('+fourthString+') to the firstString ('+firstString+') returns: '); System.out.println(compareString(fourthString, firstString)); System.out.print(' Compairing firstString ('+firstString+') to the fifthString ('+fifthString+') returns: '); System.out.println(compareString(firstString, fifthString)); } public static int compareString(String str, String argString) { int lim= Math.min(str.length(), argString.length()); int k=0; while(k<lim) { if(str.charat(k)!="argString.charAt(k))" return (int) str.charat(k)- argstring.charat(k); } k++; str.length() - argstring.length(); < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/62/lexicographical-order-java-4.webp" alt="Lexicographical Order Java"> <p> <strong>Code Explanation:</strong> </p> <ul> <li>We have created a Java class where we have initialized five strings.</li> <li>Next, we have compared the first string with the second string, the second to the third-string, and so on..</li> <li>For making the comparison, we have created a user-defined function compareString () whereby comparing the length and each character of the strings, and we got the results.</li> </ul> <p>Therefore, in this way, we can make use of the lexicographical order in Java for performing such tasks.</p> <hr></lim)></pre></0)></pre></n;>
En executar la sortida anterior, hem obtingut la sortida que es mostra a continuació:
Comparació de dues cadenes utilitzant l'ordre lexicogràfic a Java
Per comparar dues cadenes mitjançant l'ordre lexicogràfic, tenim els dos mètodes següents:
Utilitzant el mètode compareTo ().
Comencem un per un:
Utilitzant el mètode compareTo ().
A continuació es mostra un exemple d'implementació mitjançant el qual podem comparar les cadenes lexicogràficament:
import java.lang.*; public class StringExample { public static void main(String[] args) { String str1 = 'String', str2 = 'Comparison'; int get_val = str1.compareTo(str2); if (get_val <0) { system.out.println(\'str1 is greater than str2\'); } else if (get_val="=" 0) equal to less < pre> <p> <strong>Code Explanation:</strong> </p> <ul> <li>We have created a class StringExample where we have implemented the main () method.</li> <li>We have initialized two strings, i.e., str1 and str2.</li> <li>Next, using the compareTo () method, we have compared the strings str1 and str2.</li> <li>After it, if the get_val value is found less than 0, it means str1 is greater than str2.</li> <li>Else if the get_val value is equal to 0, it means both str1 and str2 strings are equal.</li> <li>Else, both the strings str1 is less than str2.</li> </ul> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/62/lexicographical-order-java-3.webp" alt="Lexicographical Order Java"> <p> <strong>By creating a user-defined function</strong> </p> <p>Below we have created a user-defined function using which we can compare two strings lexicographically. The code is as follows:</p> <pre> public class StringExample { public static void main(String[] args) { String firstString = 'Red'; String secondString = 'Red'; String thirdString = 'Green'; String fourthString = 'Yellow'; String fifthString = 'REdGreen'; System.out.println('Comparing two strings lexicographically by user defined function'); System.out.print(' Compairing firstString ('+firstString+') to the secondString ('+secondString+') returns: '); System.out.println(compareString(firstString, secondString)); System.out.print(' Compairing secondString ('+secondString+') to the thirdString ('+thirdString+') returns: '); System.out.println(compareString(secondString, thirdString)); System.out.print(' Compairing thirdString ('+thirdString+') to the fourthString ('+fourthString+') returns: '); System.out.println(compareString(thirdString, fourthString)); System.out.print(' Compairing fourthString ('+fourthString+') to the firstString ('+firstString+') returns: '); System.out.println(compareString(fourthString, firstString)); System.out.print(' Compairing firstString ('+firstString+') to the fifthString ('+fifthString+') returns: '); System.out.println(compareString(firstString, fifthString)); } public static int compareString(String str, String argString) { int lim= Math.min(str.length(), argString.length()); int k=0; while(k<lim) { if(str.charat(k)!="argString.charAt(k))" return (int) str.charat(k)- argstring.charat(k); } k++; str.length() - argstring.length(); < pre> <p> <strong>Output:</strong> </p> <img src="//techcodeview.com/img/java-tutorial/62/lexicographical-order-java-4.webp" alt="Lexicographical Order Java"> <p> <strong>Code Explanation:</strong> </p> <ul> <li>We have created a Java class where we have initialized five strings.</li> <li>Next, we have compared the first string with the second string, the second to the third-string, and so on..</li> <li>For making the comparison, we have created a user-defined function compareString () whereby comparing the length and each character of the strings, and we got the results.</li> </ul> <p>Therefore, in this way, we can make use of the lexicographical order in Java for performing such tasks.</p> <hr></lim)></pre></0)>0)>