اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم 

هو انا ازي اقدر اي انفيذ الPriority Queues في Python ؟

وليه تنفذ هياكل البيانات اسهل في باثيون عني اي لغه برمجه تاني ؟

تم التعديل في بواسطة Ali Ahmed55

Recommended Posts

  • 0
نشر

يمكنك تنفيذ Priority Queue في Python باستخدام queue.PriorityQueue من المكتبة القياسية أو باستخدام قائمة قائمة الأولويات heap مع heapq، حيث يتم ترتيب العناصر تلقائيا حسب الأولوية عند الإدراج ، فمثلا باستخدام heapq، يمكنك إدراج العناصر كأزواج ليتم فرزها بناءً على الأولوية تلقائيا.

ما يجعل تنفيذ هياكل البيانات أسهل في Python مقارنة بلغات أخرى هو أن Python توفر مكتبات مدمجة مثل collections و heapq و queue التي تبسط العمل مع القوائم، والـ heaps دون الحاجة إلى إعادة تنفيذها من الصفر، كما أن Python تعتمد على تركيب بسيط ومرن يجعل كتابة الكود وتنفيذ الهياكل أسرع وأوضح مقارنة بلغات أخرى مثل C++ أو Java، حيث تتطلب هذه اللغات تعريفات صريحة للأنواع وكتابة كود أكثر تعقيدًا لإدارة الذاكرة، يمكنك كتابة الكود بهذا الشكل:

import heapq

pq = []
heapq.heappush(pq, (1, "Task A"))  # أولوية 1
heapq.heappush(pq, (3, "Task C"))  # أولوية 3
heapq.heappush(pq, (2, "Task B"))  # أولوية 2

while pq:
    print(heapq.heappop(pq))  # يسترجع العناصر حسب الأولوية

 

  • 0
نشر

في Python يمكنك تنفيذ Priority Queue باستخدام عدة طرق 

أولا بإستخدام heapq وهي الطريقة الأكثر إستخدام  حيث يستخدم heapq بنية Min-Heap افتراضيا :

import heapq

# إنشاء قائمة انتظار ذات أولوية
pq = []

# إدراج عناصر مع تحديد الأولوية (الأولوية الأقل تُخدم أولًا)
heapq.heappush(pq, (1, "Task A"))  # الأولوية 1 (أعلى أولوية)
heapq.heappush(pq, (3, "Task C"))  # الأولوية 3
heapq.heappush(pq, (2, "Task B"))  # الأولوية 2

# إخراج العناصر حسب الأولوية
while pq:
    priority, task = heapq.heappop(pq)
    print(f"Processing: {task} (Priority: {priority})")

الطريقة الثانية إذا كنت تعمل من خلال Threading يمكنك استخدام queue.PriorityQueue :

from queue import PriorityQueue

pq = PriorityQueue()

# إدراج المهام مع تحديد الأولويات
pq.put((1, "Task A"))
pq.put((3, "Task C"))
pq.put((2, "Task B"))

# إخراج المهام حسب الأولوية
while not pq.empty():
    priority, task = pq.get()
    print(f"Processing: {task} (Priority: {priority})")

 

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته,

ويعد تنفيذ قوائم الأولوية في بايثون عملية بسيطة بفضل مكتبة heapq التي توفر أدوات فعالة وسهلة الاستخدام كم اتم التوضيح في التعليقات السابقة .

و يمكن أيضاً بناء قائمة أولوية باستخدام قائمة مرتبة أو شجرة ثنائية، لكن هذا الخيار أكثر تعقيدًا وأقل كفاءة من استخدام heapq. 

يتميز تنفيذ هياكل البيانات في بايثون بالسهولة مقارنةً بلغات أخرى مثل C أو C++ أو Java، وذلك بسبب أن  بايثون تتمتع بصياغة بسيطة وواضحة، مما يُسهل كتابة الخوارزميات وفهمها دون التورط في تعقيدات غير ضرورية. وتتولى بايثون إدارة الذاكرة تلقائيًا  مما يُعفي المبرمج من التعامل مع تخصيص الذاكرة وتحريرها يدويًا، كما هو مطلوب في لغات مثل C++.

وذلك بجانب توفر مكتبات جاهزة مثل heapq وcollections وqueue، تتيح تنفيذ هياكل البيانات بسرعة دون الحاجة إلى بنائها من الصفر.

والعديد من المميزات الأخرى التي تتمتع بها بايثون من غالبية اللغات عالية المستوى

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...