هل توجد مجموعة فرعية من الأساليع لإعادة بناء سلسلة أخرى؟

cs.stackexchange https://cs.stackexchange.com/questions/117765

  •  28-09-2020
  •  | 
  •  

سؤال

أبحث عن خوارزمية عالية الأداء للتحقق مما إذا كان بإمكاني إعادة بناء سلسلة معينة باستخدام مجموعة معينة من السلاح. مزيد من التفاصيل:

دعونا نقول سلاسلنا فوق الأبجدية $ \ Sigma $ .

المدخلات :

  • سلسلة $ s \ in \ sigma ^ * $
  • مجموعة محدودة من السلاسل $ a={a_1، a_2، ...، a_n \} \ subset \ sigt \ sigma ^ * $ .

الإخراج :

  • ما إذا كان $ \ exist m: \ exist b_1، b_2، \ Ldots، b_m \ in a: b_1 + b_2 + \ cdots + b_m= s $

حيث $ + $ هو سلسلة سلسلة.

على سبيل المثال، إذا كان $ s= {} $ " $ abcd $ " و $ A={$ <} " $ ab $ " $، $ < / span> " $ CD $ " $، $ " $ ac $ " $ \} $ ، الجواب صحيح. لأغراض هذا السؤال، افترض أن السلاسل في يمكن إعادة استخدام $ A $ عدة مرات إذا لزم الأمر.

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

المحلول

إذا تم إعادة استخدام السلاسل في $ A $ يسمح لك بحلها برمجة ديناميكية: أولا، Store Strings في $ $ في شجرة بادئة (مجرد شجرة لاحقة عكسية رابط )، و detrmine بشكل متكرر إذا $ s [i: end] $ يمكن أن يتم بناؤها من $ $ : دع $ \ ELL $ تكون طول السلسلة، ويفترض wlog $ S $ إلحاقها $ \ $$ و $ a \ gets a \ cup \ {{\ $ \} $ . moroever، دع $ m [i] \ in \ {0،1 \} $ indo إذا $ s [i: \ ILL] $ يمكن أن تشنيعها عناصر في $ $ . تهيئة $ m [i] \ gets \ enfty $ for $ i= 0، \ dots، \ ell-1 $ < / span> و $ m [\ ell]= 1 $ (لأن $ s [\ ell]=$$ < / span>). الآن، افترض $ f (i) $ هي الوظيفة التي تعمل بشكل متكرر $ m [i] $ if لم يتم حسابها بالفعل. عندما يتم استدعاء $ f (i) $ ، ابدأ في جذر شجرة لاحقة من $ A $ ، وجتاز $ s [i]، s [i + 1]، \ dots $ على شجرة لاحقة حتى الفهرس $ J $ ، بحيث تكون العقدة المقابلة في $ $ ، اتصل باستمرار $ f (j) $ . إذا عودت $ 1 $ "SPAN Class=" Math-Container "> $ m [i]= 1 $ and Return $ 1 $ . خلاف ذلك، كرر العملية مع اجتياز $ s [j + 1]، s [j + 2]، \ dots $ حتى عضو آخر في $ $ ، أو يتم الوصول إلى ورقة. إذا لم يكن هناك نجاح، تعيين $ M [i]= 0 $ والعودة $ 0 $ . لتحديد المشكلة، اتصل $ f (1) $ . أسوأ التعقيد هو التعقيد هو $ \ ell d $ ، مع $ D $ يجري عمق شجرة لاحقة (أطول تسلسل في $ $ )، بالإضافة إلى تكلفة بناء شجرة البادئة.

سيندريو الأسوأ في كثير من الحالات سيتم تجنبه لأن البحث عن المكالمات العودية يتوقف بمجرد العثور على حل واحد. لذلك في الممارسة العملية، قد يكون الجزء $ \ ell d $ أقل بكثير. يمكن أن تكون بناء شجرة لاحقة باهظة الثمن اعتمادا على $ $ . ولكن إذا تم استخدام $ $ يستخدم لعدة سلاسل $ S $ ، يتم إطفاء التكلفة. إذا $ $ هي كبيرة حقا و $ S $ قصيرة، قد يكون من الأفضل فقط فرز العناصر من $ $ والقيام بحث ثنائي بدلا من اجتياز.

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