سؤال

سألني أحدهم سؤالاً عبر البريد الإلكتروني حول الأقسام الصحيحة في ذلك اليوم (حيث أنني قمت بإصدار وحدة Perl، Integer::Partition، لإنشاءها)، ولم أتمكن من الإجابة عليه.

خلفية:هنا جميع الأقسام الصحيحة للرقم 7 (مجموع كل صف يساوي 7).

7
6 1
5 2
5 1 1
4 3
4 2 1
4 1 1 1
3 3 1
3 2 2
3 2 1 1
3 1 1 1 1
2 2 2 1
2 2 1 1 1
2 1 1 1 1 1
1 1 1 1 1 1 1

الآن إذا نظرنا إلى أطوال كل قسم وأحصينا عدد كل طول:

1 1
2 3
3 4
4 3
5 2
6 1
7 1

...نرى قسمًا واحدًا يبلغ طوله 1 (7)، وقسمًا واحدًا يبلغ طوله 7 (1 1 1 1 1 1 1).هناك 4 أقسام يبلغ طولها 3:(5 1 1)، (4 2 1)، (3 3 1)، (3 2 2).

بالنسبة للأعداد الأكبر من N، إذا قمت برسم بياني لتوزيع أطوال الأقسام، فسيظهر منحنى غير متماثل، منحرفًا نحو الأصل.إذا كنت فضوليًا، قم برسم بياني لعدد طول القسم التالي لـ N=40.

1 20 133 478 1115 1945 2738 3319 3589 3590 3370 3036 2637 2241 1861 1530 1236 995 790 627 490 385 297 231 176 135 101 77 56 42 30 22 15 11 7 5 3 2 1 1

إذا كنت مهتمًا بإنشاء أعداد التوزيع هذه، فإليك الكود الذي استخدمته:

#! /usr/local/bin/perl

use strict;
use warnings;

use Integer::Partition;

my $n = shift || 1;

while (1) {
    my $start = time;
    my $i = Integer::Partition->new($n);
    my %size;
    while (my $p = $i->next) {
        $size{scalar @$p}++;
    }

    open my $out, '>>', "bucket-count.out";
    for my $s (sort {$a <=> $b} keys %size) {
        print $out "$n\t$s\t$size{$s}\n";
    }
    close $out;
    my $delta = time - $start;
    print "$n\t$delta secs\n";
    ++$n;
}

(ملحوظة:على جهاز الكمبيوتر الخاص بي، يستغرق إنشاء N=90 حوالي 10 دقائق).

لذلك سؤالي هو:ما المعادلة التي يمكن استخدامها لمطابقة منحنى التوزيع المرصود؟هل هو غاوس (هل يمكن أن يكون التوزيع الغوسي غير متماثل؟) أو توزيع بواسون، أو أي شيء آخر؟

كيف يمكنني حلها لـ N؟إذا كنت أتذكر الرياضيات من المدرسة الثانوية، يمكنني تحديد الذروة عن طريق حل متى يتقاطع المشتق مع 0.كيف يمكنني إنتاج المشتق؟لقد بحثت في الويب ولكن كل ما أعود إليه هو أوراق رياضية غامضة.أنا فقط بحاجة إلى بعض التعليمات البرمجية :)

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

المحلول

أعتقد أن توزيع بواسون هو تقدير معقول.بالنظر إلى هذا الافتراض، تتحول مشكلتك الآن إلى إيجاد الحد الأقصى للتردد، k، بالنظر إلى N.أعتقد أن لديك نهجين:

  1. اكتشف ذلك من وجهة نظر رياضية (سأبدأ بالنظر إلى التوافقيات, ، ولكن هذا قد لا يكون توجيهًا جيدًا بشكل خاص)
  2. افترض أنه بواسون وقم بقياس الذروة لأي N معين، كما فعلت أعلاه.

بمجرد حصولك على الذروة (k)، يجب أن يكون تقدير لامدا واضحًا (جرب عددًا قليلًا) وستحصل على المنحنى الخاص بك.

هناك طريقة أخرى تتمثل في العمل على كل شيء في لغة بايثون والسؤال عن لوحات numpy أو scipy :-)

هث

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