Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

सी प्रोग्राम में पर्थ्रेड का उपयोग कर बाइनरी सर्च?


हम जानते हैं कि द्विआधारी खोज दृष्टिकोण सबसे उपयुक्त और प्रभावी छँटाई एल्गोरिथ्म में से एक है। यह क्रमबद्ध क्रम पर काम करता है। एल्गोरिथम सरल है, यह केवल तत्व को बीच से ढूंढता है, फिर सूची को दो भागों से विभाजित करता है, और या तो लेफ्ट सबलिस्ट या राइट सबलिस्ट की ओर बढ़ता है।

हम इसका एल्गोरिदम जानते हैं। अब हम देखेंगे कि मल्टीथ्रेडिंग वातावरण में बाइनरी सर्च तकनीक का उपयोग कैसे करें। थ्रेड्स की संख्या सिस्टम में मौजूद कोर की संख्या पर निर्भर करती है। आइए विचार प्राप्त करने के लिए कोड देखें।

उदाहरण

#include <iostream>
#define MAX 16
#define MAX_THREAD 4
using namespace std;
//place arr, key and other variables as global to access from different thread
int arr[] = { 1, 6, 8, 11, 13, 14, 15, 19, 21, 23, 26, 28, 31, 65, 108, 220 };
int key = 31;
bool found = false;
int part = 0;
void* binary_search(void* arg) {
   // There are four threads, each will take 1/4th part of the list
   int thread_part = part++;
   int mid;
   int start = thread_part * (MAX / 4); //set start and end using the thread part
   int end = (thread_part + 1) * (MAX / 4);
   // search for the key until low < high
   // or key is found in any portion of array
   while (start < end && !found) { //if some other thread has got the element, it will stop
      mid = (end - start) / 2 + start;
      if (arr[mid] == key) {
         found = true;
         break;
      }
      else if (arr[mid] > key)
         end = mid - 1;
      else
         start = mid + 1;
   }
}
main() {
   pthread_t threads[MAX_THREAD];
   for (int i = 0; i < MAX_THREAD; i++)
      pthread_create(&threads[i], NULL, binary_search, (void*)NULL);
   for (int i = 0; i < MAX_THREAD; i++)
      pthread_join(threads[i], NULL); //wait, to join with the main thread
   if (found)
      cout << key << " found in array" << endl;
   else
      cout << key << " not found in array" << endl;
}

आउटपुट

31 found in array

  1. इष्टतम बाइनरी सर्च ट्री

    पूर्णांकों का एक सेट क्रमबद्ध क्रम में दिया गया है और एक अन्य सरणी freq आवृत्ति गणना के लिए दिया गया है। हमारा काम सभी खोजों के लिए न्यूनतम लागत खोजने के लिए उन डेटा के साथ एक बाइनरी सर्च ट्री बनाना है। उप-समस्याओं के समाधान को हल करने और संग्रहीत करने के लिए एक सहायक सरणी लागत [एन, एन] बनाई गई है।

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

    द्विआधारी खोज, जिसे अर्ध-अंतराल खोज, लॉगरिदमिक खोज या बाइनरी चॉप के रूप में भी जाना जाता है, एक खोज एल्गोरिथ्म है जो एक क्रमबद्ध सरणी के भीतर लक्ष्य मान की स्थिति का पता लगाता है। बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है। यदि वे समान नहीं हैं, तो आधा जिसमें लक्ष्य झूठ नहीं बोल सकत

  1. सी # में बाइनरी सर्च

    द्विआधारी खोज क्रमबद्ध सरणी पर कार्य करता है। मान की तुलना सरणी के मध्य तत्व से की जाती है। यदि समानता नहीं मिलती है, तो आधा भाग समाप्त हो जाता है जिसमें मूल्य नहीं होता है। इसी तरह दूसरे आधे हिस्से की तलाशी ली जाती है। यहाँ हमारे सरणी में मध्य तत्व है। मान लीजिए कि हमें 62 खोजने की जरूरत है, फिर ब