أحمد ريحان نشر 16 سبتمبر 2021 أرسل تقرير نشر 16 سبتمبر 2021 ممكن مساعدة في تفريع هذه السكريبت (سي شارب): Public static void Mergesort_Recursive (int[] num,int left,int right){ int mid, if (right>left) { mid=(right+left)/2; Mergesort_Recursive(num,left,mid); Mergesort_Recursive(num,mid+1,right); Do merge(num,left,mid+1,right) {{ Main code: Random r = new random(); Int len=2000; Int[]numbers1=new int[len]; Int[]numbers2=new int[len]; For(i=0;i<len;++i){ int temp= (int)r.next(10000); numbers1[i]=temp; numbers2 [i]=temp;} هذه الخوارزمية هي خاورزمية الفرز بالدمج (فرق تسد) اقتباس
0 Ali Haidar Ahmad نشر 16 سبتمبر 2021 أرسل تقرير نشر 16 سبتمبر 2021 سأفترض أنك تعمل على معالج واحد.. هنا عندما نقسم أول مرة، فإننا نقسم البرنامج إلى جزئين، وبما أننا ننفذ البرنامج في معالج واحد بالتالي سوف يذهب التنفيذ إلى القسم اليساري ينتهي منه تماماً، ثم يعود ليرتب القسم اليميني. وهنا يمكننا الاستنتاج إنه في الوقت الذي يكون فيه المعالج يتولى أمر الجزء اليساري، يكون الجزء اليميني منتظر حتى ينتهي المعالج عمله مع الجزء اليساري وبالتالي هنا يمكننا الاستفادة من التفرعية ونقوم بتفريع القسمين الأوليين إلى ثريدين. لذا يكون: Thread th1=new thread (() =>{ Mergesort.Mergesort_Recursive(numbers1,0,len/2)}); Thread th2=new thread (() =>{ Mergesort.Mergesort_Recursive(numbers1,,(len/2 )+1,len-1)}); Th1.start();th2.start(); Th1.join();th2.join(); Thread th1=new thread (() =>{ Mergesort.Domerge(numbers1,0, (len/2)+1,len-1); عندما ندمج المصفوفتان يجب أن يكونا مرتبتين ولن يكونا مرتبتين حتى ينتهي التابع Mergesort_Recursive من عمله تماماً وحتى نضمن ذلك يجب وضع th1.join و th2.join من أجل عدم تنفيذ Domerge قبل أن ينتهي التابع Mergesort_Recursive وإلا فسوف تظهر اخطاء كثيرة ولن تترتب المصفوفة. اقتباس
السؤال
أحمد ريحان
ممكن مساعدة في تفريع هذه السكريبت (سي شارب):
هذه الخوارزمية هي خاورزمية الفرز بالدمج (فرق تسد)
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.