המונח סדר לקסיקוגרפי הוא מונח מתמטי המוכר בשמות: סדר מילוני, תוצר לקסיקוגרפי(אל), סדר אלפביתי או סדר מילון.
חלק זה יכסה את הסדר הלקסיקוגרפי של הנושא, הגדרתו ומידע מפורט אחר. לאחר מכן, נלמד כיצד להשתמש במושג הסדר הלקסיקוגרפי ב- שפת תכנות Java .
הגדרת סדר לקסיקוגרפי
סדר לקסיקוגרפי או לקסיקוגרפי במתמטיקה הוא הכללה של הרצף האלפביתי של המילונים לרצפים של הסמלים המסודרים או האלמנטים של רשימה מסודרת לחלוטין. המונח סדר לקסיקוגרפי מונע על ידי המילה 'לקסיקון'. לקסיקון הוא קבוצת המילים המשמשת בחלק מהשפות האחרות ויש לה סדר קונבנציונלי. לפיכך, סדר לקסיקוגרפי הוא דרך לפורמליזציה של סדר מילים שבו ניתן סדר הסמלים הבסיסיים.
בתכנות, הסדר הלקסיקוגרפי ידוע בשמו העממי סדר מילון ומשמש למיון מערך מחרוזות, השוואת שתי מחרוזות או מיון אלמנטים של מערך. זה הופך להיות די קל למיין אלמנטים בצורה מילונית. הסיבה לכך היא שלסדר הלקסיקוגרפי מספר גרסאות והכללות שבהן:
- וריאציה אחת חלה על רצפים באורכים שונים, כמו לפני ששוקלים את האלמנטים המסוימים, אורכי הרצפים מושווים.
- הווריאציה השנייה משמשת בתת-קבוצות של קבוצה סופית נתונה. הוא עושה זאת על ידי הקצאת סדר כולל לקבוצה הסופית. אחר כך הוא ממיר תת-קבוצות לרצפים הולכים וגדלים שעליהם מוחל הסדר הלקסיקוגרפי.
- ההכללה מתייחסת לרצף המוצרים הקרטזיאני של ערכות בהזמנה חלקית, ורצף כזה הוא הזמנה כוללת, אם ורק אם כל גורם של המוצר הקרטזי מסודר באופן מלא.
הבנת הרעיון הפורמלי של סדר לקסיקוגרפי
- על מנת להבין את הרעיון הפורמלי של הסדר הלקסיקוגרפי:
- זה מתחיל עם קבוצה א' סופית, המכונה האלפבית והוא רצף לחלוטין. זה עוד אומר שעבור a ו-b (כל שני סמלים שהם שונים ולא זהים) ב-A, או a
- כאן, המילים של A הן הרצף הסופי של סמלים מ-A וכולל מילים באורך 1 המחזיקות סמל בודד, מילים באורך 2 עם שני סמלים, ולמילים באורך שלוש, זה 3, וכן הלאה. בקשר לזה, זה כולל גם את הרצף הריק ? ללא סמלים כלל. לפיכך ניתן לתאר את הסדר הלקסיקוגרפי עבור קבוצה סופית A כך:
- נניח, עבור שני העולמות השונים באותו אורך, a=a1א2…אקו-b=b1ב2…בקנתון. כאן, סדר שני מילים תלוי בסדר האלפביתי של הסמלים במקום הראשון i שבו שתי מילים משתנות כאשר סופרים מתחילת המילים, כלומר, עומדות בתנאי a אני i בסדר האלפבית A.
- אם שתי מילים השתנו באורכן, הסדר הלקסיקוגרפי הרגיל מרפד את המילה באורך קצר יותר עם ריקים בסוף עד ששתי המילים הופכות להיות זהות באורכן, ואז המילים מושוות.
יישום לקסיקוגרפי ב-Java
כפי שצוין לעיל, ניתן להשתמש בסדר לקסיקוגרפי להשוואה בין שתי מחרוזות או למיון האלמנטים. כאן, נדון בשתי השיטות וניישם כל אחת מהן.
מיון אלמנטים לפי סדר לקסיקוגרפי
נגזרות חלקיות בלטקס
סידור מילים לפי סדר ידוע בשם סדר לקסיקוגרפי או ידוע גם בשם סדר מילון . משמעות הדבר היא שביישום הסדר הלקסיקוגרפי, המילים מסודרות בסדר אלפביתי לפי האלפבית המרכיבים אותן. למיון מערך מחרוזות לפי סדר לקסיקוגרפי, יש לנו את שתי השיטות הבאות:
שיטה 1: יישום כל שיטת מיון
להלן הקוד לדוגמה שניתן לנו שיאפשר לנו להבין כיצד אנו יכולים לבצע מיון על אלמנטים בסדר לקסיקוגרפי:
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;>
בביצוע הפלט לעיל, קיבלנו את הפלט המוצג להלן:
השוואת שתי מחרוזות באמצעות סדר לקסיקוגרפי ב-Java
להשוואת שתי מחרוזות באמצעות סדר לקסיקוגרפי, יש לנו את שתי השיטות הבאות:
שימוש בשיטת compareTo ().
נתחיל בזה אחר זה:
שימוש בשיטת compareTo ().
מקבץ
להלן דוגמה ליישום שבאמצעותו אנו יכולים להשוות למחרוזות מבחינה לקסיקוגרפית:
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)>