Maison >Java >javaDidacticiel >Recherche ou tri en Java : principales différences et applications
Cet article compare les algorithmes de recherche et de tri de Java, en mettant en évidence leurs fonctions, méthodes et complexités temporelles distinctes. Il fournit des exemples et des implémentations pratiques, tels que Merge Sort pour l'organisation des données et Binary Search pour une récupération efficace, mettant en valeur leurs capacités de résolution de problèmes réels.
En Java, une bonne maîtrise des algorithmes de recherche et de tri, ainsi que de leurs principales différences, est essentielle pour la fonctionnalité des applications et une gestion efficace des données. La recherche identifie des données spécifiques dans un ensemble de données, tandis que le tri réorganise les données elles-mêmes. Cet article utilise des exemples pour explorer leurs différences d'objectif, de méthodologie et d'applications.
Les principales distinctions entre les algorithmes de recherche et de tri de Java résident dans leurs objectifs, leurs résultats, leur efficacité et leur complexité temporelle. Reportez-vous au tableau 1 pour une analyse comparative.
Tableau 1 Recherche ou tri en Java
La sélection de l'algorithme dépend souvent du résultat souhaité, des besoins de l'application (taille de l'ensemble de données, données pré-triées, etc.) et des exigences spécifiques.
Le tableau 2 illustre des exemples de pseudocode et les complexités temporelles de plusieurs algorithmes de recherche et de tri :
Tableau 2
Complexités d'exécution et exemples de pseudocode
Remarque : Sans l'interface Comparable
de Java, le code ne convient qu'aux types de données primitifs. (Source : Lysecky, R., & Lizarraga, A. (2022). Programmation en Java avec ZyLabs, notation 18.3 O, Figure 18.3.2.)
Merge Sort, un algorithme diviser pour régner, divise de manière récursive un tableau de données en sous-tableaux plus petits, les trie, puis fusionne les sous-tableaux triés (GeeksforGeeks, 2020a). La recherche binaire, à l'inverse, fonctionne sur des tableaux pré-triés, réduisant de moitié à plusieurs reprises l'intervalle de recherche jusqu'à ce que l'élément cible soit localisé ou jugé absent (GeeksforGeeks, 2020b).
L'exemple suivant montre le tri d'un ArrayList
de Book
objets par année de publication à l'aide du tri par fusion, suivi d'une recherche binaire sur la liste triée :
Livre.java
<code class="language-java">/** * Book object with title and publication year. Implements Comparable for year-based sorting. * * @author Alexander Ricciardi * @version 1.0 * @date 07/14/2024 */ class Book implements Comparable<Book> { String title; int year; /** * Book constructor. * @param title Book title. * @param year Publication year. */ public Book(String title, int year) { this.title = title; this.year = year; } /** * Compares books by publication year. * @param other Book to compare. * @return Comparison result. */ @Override public int compareTo(Book other) { return Integer.compare(this.year, other.year); } /** * Returns book's string representation. * @return String representation. */ @Override public String toString() { return title + " (" + year + ")"; } }</code>
BookSortingSearching.java
<code class="language-java">import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; /** * Sorts and searches a list of books using merge sort and binary search. * * @author Alexander Ricciardi * @version 1.0 * @date 07/14/2024 */ public class BookSortingSearching { // ... (mergeSort and binarySearch methods remain the same) ... public static void main(String[] args) { // ... (main method remains largely the same) ... } }</code>
...(Les méthodes mergeSort et binaireSearch seraient incluses ici, telles qu'elles l'étaient dans l'entrée d'origine. Je les ai omises par souci de brièveté, car elles sont longues et déjà présentes.)
Sortie (exemple) :
... (Original and sorted lists are displayed here) ... <p>Enter a year to search for: 1951 Book found: The Catcher in the Rye (1951)</p>
La complexité O(n log(n)) de Merge Sort le rend efficace pour les grands ensembles de données, tandis que l'approche ciblée de Binary Search est bien adaptée aux applications telles que l'apprentissage automatique (par exemple, la recherche d'hyperparamètres optimaux).
En conclusion, les algorithmes de recherche et de tri, bien que distincts, sont interdépendants. Le tri (comme le tri par fusion) prépare les données pour une recherche efficace (comme la recherche binaire), ce qui rend les deux indispensables pour diverses résolutions de problèmes dans divers domaines.
Références :
GeekspourGeeks. (2020a, 18 novembre). Tri par fusion. GeekspourGeeks. https://www.php.cn/link/d0e7b521c18b09876cb7693e42880dba
GeekspourGeeks. (2020b, 3 février). Recherche binaire. GeekspourGeeks. https://www.php.cn/link/d29af1fd577b037033dd1149e816d521
Lysecky, R., & Lizarraga, A. (2022). Programmation en Java avec ZyLabs. Zyante, Inc.
Publié à l'origine sur Alex.omegapy sur Medium par Level UP Coding le 22 novembre 2024.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!