سؤال

لدي وظيفة مثيرة للاهتمام. يستغرق مجموعات فرعية من {1، ...، n} إلى أعداد صحيحة إيجابية، أي $ f: p ([n]) \ rawrow z ^ + $ . أعلم أنه إذا كانت S مجموعة فرعية من S '، $ f (s) . أيضا، إذا كانت S و S 'نفس الكائدة، فإن الطلب الناجم عن F هو معجم، لذلك على سبيل المثال $ f (\ {1،2،4 \}) . بالنظر إلى القيمة z $ f (s) <= z $ و $ f (s) <= f (t) <= z $ يعني $ f (s)= f (t) $ - وهذا هو، أريد أن أفعل بحثا عن شعرية من مجموعات فرعية من [N].

إذا كنت أعرف أن الطلب كان معجميا تماما، فسأستخدم بحث ثنائي بسيط. أنا لا أعرف ذلك، وأعتقد أنه ليس (على سبيل المثال، $ f (\ {1،2،3،4،5،6 \}) $ ربما أكبر من $ f (\ {7 \}) $ ). هل هناك خوارزمية جيدة O (N) للقيام بهذا البحث على POSET؟ من الواضح أن N من أي حجم ملموس لا بد لي من حساب F على ذبابة ولا يمكنني الاعتماد على تخزين في الذاكرة.

توضيح بعد مناقشة التعليقات: $ f $ أنا أتعامل مع مادة مضافة - على وجه التحديد، $ f (s)=sum_ {k \ في s} g (k) + f (\ emplyset) $ ، مع $ G $ وظيفة متزايدة رتابة. قد يكون هذا أسهل من الحالة العامة (التي هي أيضا مثيرة للاهتمام، ولكن ليس مشكلتي الخاصة).

هل كانت مفيدة؟

المحلول

هنا خوارزمية بسيطة تعمل في $ O (n ^ 2) $ الوقت و $ O (n) $ الفضاء، على افتراض أن $ f (\ emplyset) $ ، $ f (\ {1 \}) $ ، $ f (\ {2 \}) $ ، $ \ cdots $ ، $ f (\ {n \}) $ يتم تقديمها في صفيف.

فكرة البدء هي نفس الشيء الذي قدمه المرجع نفسه في تعليقه. "سنبحث عن مجموعات فرعية من حجم K باستخدام الترتيب المعجم، لكل $ k $ من $ 0 $ إلى $ n $ . الاحتفاظ بأفضل قيمة $ f $ . "

المشكلة هي ثم كيفية البحث بأفضل قيمة $ f $ على مجموعات فرعية من الحجم $ k $ ، اسمه $ b_k $ ، في $ O (n) $ الوقت. بدلا من البحث الثنائي، سوف نتحقق مما إذا كان $ N $ ، $ n-1 $ ، \ cdots، يجب تضمين $ 1 $ في أفضل مجموعة فرعية واحدة تلو الأخرى، من خلال أخذ الميزة الحقيقية للترتيب المعجم على مجموعات فرعية.

  1. تهيئة $ b_k= f (\ emplyset) $ . $ \ b_k $ ستكون أفضل قيمة في مجموعات فرعية من الحجم $ k $ في نهاية هذا الإجراء .
  2. تهيئة عدد $= 0. $ $ \ count $ هو عدد العناصر التي لدينا المدرجة في أفضل مجموعة فرعية حتى الآن.
  3. تحقق $ f (\ {n \}) $ . إذا $ b_k + f (\ {n \}) + f (\ {1، 2، \ cdots، k-count -1) \ le z $ ، يجب تضمين $ N $ . إضافة $ f (\ {n \}) $ to $ b_k $ وإضافة 1 إلى عدد $ $ .
  4. تحقق $ f (\ {n-1 \}) $ . إذا $ b_k + f (\ {n-1 \}) + f (\ {1، 2، \ cdots، k-cont-1 \}) \ le z $ ، يجب تضمين $ N-1 $ . إضافة $ f (\ {n-1 \}) $ إلى $ b_k $ وإضافة 1 إلى < Span Class="حاوية الرياضيات"> $ count $ .
  5. وهلم جرا.
  6. حتى> قد فحصنا $ f (\ {1 \}) $ أو $ count== k $ < / span>.
  7. قد نتساءل، إذا كان سيأخذ $ O (n) $ (n) $ لحساب كل $ f (\ {1 ، 2، \ CDOTS، K-Cont-1 \}) $ ، الحوسبة كل $ b_k $ وحده سوف تأخذ $ O (n * n) $ الوقت. ومع ذلك، منذ $ f $ مضافة، يمكننا حساب جميع مبادئ البادئة من $ f (\ {1 \}) ، $ f (\ {2 \}) $ ، $ \ cdots $ Span Class="حاوية الرياضيات"> $ f (\ {n \}) $ مقدما في $ O (n) $ الوقت. ثم يستغرق $ O (1) $ للوصول إلى كل مبلغ بادئة.

    منذ البحث $ b_k $ يأخذ $ O (n) $ الوقت، لكل $ k $ from $ 0 $ إلى $ n $ ، إجمالي وقت التشغيل هو $ O (n ^ 2) $ .


    الوصف أعلاه من الخوارزمية يتخطى أسهل حالة عند $ f (\ emplyset) \ gt z $ . في هذه الحالة، يجب أن تعود الخوارزمية إلى عدم وجود مجموعة فرعية من هذا القبيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top