Τι Είναι η Τριαδική Αναζήτηση;
Σκέψου ότι έχεις μια μεγάλη λίστα με αριθμούς, και θέλεις να βρεις ένα συγκεκριμένο αριθμό. Τώρα, φαντάσου ότι η Τριαδική Αναζήτηση είναι σαν να παίζεις ένα παιχνίδι κρυμμένων θησαυρών, αλλά αντί να κάνεις μια ερώτηση κάθε φορά (όπως στη Δυαδική Αναζήτηση), κάνεις τρεις ερωτήσεις σε κάθε βήμα.
Πώς Λειτουργεί;
- Χωρίστε σε Τρία Μέρη: Φαντάσου ότι έχεις την λίστα με αριθμούς και θέλεις να βρεις έναν συγκεκριμένο αριθμό. Ο πρώτος βήμα είναι να χωρίσεις την λίστα σε τρία μέρη, όχι δύο, όπως στη Δυαδική Αναζήτηση.
- Έλεγχος με Τρεις Ερωτήσεις:
- Ελέγχεις αν ο αριθμός που ψάχνεις είναι μικρότερος από την πρώτη τρίτη του πίνακα.
- Ελέγχεις αν ο αριθμός που ψάχνεις είναι μεταξύ της πρώτης και της δεύτερης τρίτης του πίνακα.
- Ελέγχεις αν ο αριθμός που ψάχνεις είναι μεγαλύτερος από τη δεύτερη τρίτη του πίνακα.
- Στένεμα της Αναζήτησης: Αν βρεις ότι ο αριθμός σου είναι σε ένα από τα τρία μέρη, τότε ψάχνεις μόνο σε εκείνο το μέρος. Επαναλαμβάνεις την διαδικασία για να βρεις τον αριθμό σου.
Παράδειγμα με Αριθμούς
Φαντάσου ότι έχεις την εξής λίστα:
2, 5, 7, 10, 12, 14, 18, 21, 26, 30, 34, 37, 40
Ας πούμε ότι θέλεις να βρεις τον αριθμό 21
.
- Χωρίζουμε την λίστα σε τρία μέρη:
- Το πρώτο τρίτο είναι από το
2
μέχρι το10
. - Το δεύτερο τρίτο είναι από το
12
μέχρι το26
. - Το τρίτο τρίτο είναι από το
30
μέχρι το40
.
- Το πρώτο τρίτο είναι από το
- Ελέγχουμε:
- Ο αριθμός
21
δεν είναι στην πρώτη τρίτη (πρώτο τρίτο μέρος). - Ο αριθμός
21
είναι στη δεύτερη τρίτη (δεύτερο τρίτο μέρος). - Επομένως, ψάχνουμε μόνο στο δεύτερο τρίτο μέρος της λίστας.
- Ο αριθμός
- Συνεχίζουμε την Αναζήτηση:
- Η νέα λίστα που ψάχνουμε είναι:
12, 14, 18, 21, 26
. - Επαναλαμβάνουμε τη διαδικασία, χωρίζοντας σε τρία μέρη ξανά μέχρι να βρούμε τον αριθμό
21
.
- Η νέα λίστα που ψάχνουμε είναι:
Σημαντικά Σημεία
- Χρησιμοποιούμε την Τριαδική Αναζήτηση όταν η λίστα είναι ταξινομημένη. Αυτό σημαίνει ότι οι αριθμοί είναι ήδη σε σειρά, όπως από τον μικρότερο στον μεγαλύτερο.
- Είναι σαν παιχνίδι με τρεις επιλογές, αλλά είναι λίγο πιο περίπλοκο από την Δυαδική Αναζήτηση, που έχει μόνο δύο επιλογές κάθε φορά.
Κωδικός στην C#
Ας δούμε πώς να εφαρμόσουμε την Τριαδική Αναζήτηση σε ένα πρόγραμμα C#:
using System;
class TernarySearchExample
{
static void Main()
{
int[] array = { 2, 5, 7, 10, 12, 14, 18, 21, 26, 30, 34, 37, 40 };
int target = 21;
int result = TernarySearch(array, target, 0, array.Length - 1);
Console.WriteLine(result != -1
? $"Ο αριθμός {target} βρέθηκε στη θέση {result}."
: $"Ο αριθμός {target} δεν βρέθηκε.");
}
static int TernarySearch(int[] array, int target, int left, int right)
{
if (right >= left)
{
// Διαιρέστε την περιοχή σε τρία μέρη
int mid1 = left + (right - left) / 3;
int mid2 = right - (right - left) / 3;
// Ελέγξτε αν ο στόχος είναι στη θέση mid1
if (array[mid1] == target)
return mid1;
// Ελέγξτε αν ο στόχος είναι στη θέση mid2
if (array[mid2] == target)
return mid2;
// Αναζητήστε στο πρώτο τρίτο
if (target < array[mid1])
return TernarySearch(array, target, left, mid1 - 1);
// Αναζητήστε στο δεύτερο τρίτο
if (target > array[mid1] && target < array[mid2])
return TernarySearch(array, target, mid1 + 1, mid2 - 1);
// Αναζητήστε στο τρίτο τρίτο
return TernarySearch(array, target, mid2 + 1, right);
}
// Επιστρέφει -1 αν δεν βρέθηκε ο αριθμός
return -1;
}
}
Αυτή είναι η βασική ιδέα πίσω από την Τριαδική Αναζήτηση! Ελπίζω να την καταλάβεις και να σου φαίνεται πιο απλή τώρα. Αν έχεις ερωτήσεις ή χρειάζεσαι περισσότερες πληροφορίες, πες μου!