خوارزمية لتقسيم سلسلة متباعدة على قدم المساواة، غير الاصطدام

StackOverflow https://stackoverflow.com/questions/1526281

سؤال

حصلت على هذه المشكلة أنني لا أستطيع فقط حل القشويا.

دعنا نقول أن لدي التقاط فيديو يلتقط دائما إطارات الفيديو بسعر ثابت F (دعنا نقول 30 إطارات في الثانية).

ما أريده هو "تقسيم" تسلسل الإطار هذا في N (قل أربعة) لاحقة. كل لاحق له FTHRAMERES FN، من الواضح أنه <f. إطارات في لاحق متباعدة على قدم المساواة في الوقت المناسب، لذلك على سبيل المثال سيتم تعرج بعض تسلسل F1 صالح 10 FPS صالحا مثل F = 30 FPS والوقت = 1 ثانية:

(0S هي الإطارات التي لا تنتج إلى لاحقا، 1s هي إطارات تفعل):

100 (in 1 second it will repeated like: 100100100100100100100100100100)

أو

010 (again, in 1 sec it will go like: 010010010010010010010010010010)

أو، ل F = 30 و F = 8:

100000001

(وسوف يستغرق MCD (30،8) = 120 إطارات قبل إعادة تشغيل ثانية مع "1").

المشكلة هي أن المشكلة لاحقة لا يمكن أن تصطدم، لذلك إذا كانت F = 30، F1 = 10 FPS (كل ثلاثة إطارات) و F2 = 5 FPS (كل إطارات)، هذا التسلسل على ما يرام:

102100 (again, in a second: 102100102100102100102100102100)

ولكن إذا أضفنا F3 = 6 FPS

132100 (1 AND 3) <--- collides! 02100102100102100102100

أو

102103102130102 (1 AND 3) <--- collides! 00102100102100

والبعد الثالث سوف يصطدم بأول مرة.

السؤال هو:

  • هل هناك طريقة للعثور عليها كل مزيج من Framerates of N (مع N <= 4) لاحقات لن تصطدم وسيتم تباعده بنفس القدر؟

(أحتاج إلى الحالة العامة، ولكن في هذه الحالة بالذات، سأحتاج إلى جميع المجموعات الصحيحة لتسلسل واحد فقط (تافهة)، وجميع المجموعات الصحيحة للتسلسلات، وجميع المجموعات الصحيحة من ثلاثة تسلسل، وجميعها لأربعة تسلسل) وبعد

آمل أن يستطيع شخص ما تنوير عقلي. شكرًا لك!

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

المحلول

إذا كان لديك إلقاء نظرة على أسعارك، فسوف تلاحظ أن:

  • هناك K في N (أعداد صحيحة> = 0) بحيث f1 = k * f2
  • لا يوجد ك في N مثل F1 = K * F3

المزيد إلى النقطة، F1 و F2 خاصة في ذلك، يمنحك F2 لاحقا لما سيعطيه F1 عند نفس النقطة. ثم نظرا لأن اثنين من تسلسلات F1 لن تعبر أبدا ما إذا كانت لا تبدأ في نفس النقطة (فكروا بالتوازي)، فإن F2 بشكل طبيعي لن يعبر F1 أيضا!

يمكنك أيضا أن ترى أن العكس من ذلك، نظرا لأن F3 ليس لاحقا F1 (أي، F3 ليس مقسما من F1)، فهناك موجود I، J في Z (أعداد صحيحة) بحيث أناF1 + J.F3 = 1، على الرغم من أنني لا أستطيع تذكر أي من نظرية هذا من. هذا يعني أنه يمكنني في الواقع العثور على تصادم مهما كان الموقف في وقت لاحق.

يعني ALOS أنه يمكنك الابتعاد عن F1 = 29 و F3 = 27 إذا كان بإمكانك أن يكون لديك بعض الإطارات، ولكن في نهاية المطاف سوف تصطدم إذا كنت تستمر لفترة طويلة بما يكفي (على الرغم من التنبؤ وليس الحوسبة، فهي خارجي في الوقت الحالي) وبعد


باختصار: انتخب تردد "سيد" واحد (أسرع كل أولئك الذين تريده) ثم فقط التقاط مقصات من هذا التردد وسوف تكون بخير مهما كان طول الفيديو الخاص بك.

نصائح أخرى

أعتقد أن هذا من شأنه أن يفعل ذلك من أجل القضية 4 دفق، وينبغي أن يكون واضحا ما يجب القيام به لحالات تيار أقل.

for a in range(1,31):
    for b in range(a,31):
        for c in range(b,31):
            for d in range(c,31):
                if (1.0/a+1.0/b+1.0/c+1.0/d)<=1.0 and gcd(a,b,c,d)>=4:
                    print a,b,c,d

في الأساس، مهما كانت الترددات التي تفكر فيها، 1) لا يمكنهم تناول أكثر من كل الدفق 2) إذا كان قاسما أكبر مشترك هو <4، فلا يمكنك العثور على ترتيب لهم لن يتعارضون. (على سبيل المثال، النظر في حالة رقمين رئيسيين؛ GCD (P1، P2) هو دائما 1، وسوف يتعارضون دائما في <= p1 * p2 frames بغض النظر عن كيفية تعويضها)

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