سؤال

وأنا باستخدام مجموعة تحمل عناوين. كل مؤشر عناوين يناظر معرف في قاعدة البيانات التي تحتوي على أتش تي أم أل لهذا العنوان معينة.

ودعونا نقول لدي سلسلة الذي يحتوي على واحد من العناوين.

title = "why-birds-fly";
titles[] // an array which contains all the titles

لاستخدام السلسلة "عنوان" للحصول على معرف المقابلة ما يمكن القيام به:

for (i = 0; i < titles.length-1; i++) {
  if (titles[i] == title)
    return i+1;
}

وهناك طريقة أخرى يمكنني استخدام هو خلق مجموعة النقابي جنبا إلى جنب مع مجموعة العناوين التي هو عكس ذلك تماما من العناوين. وهذا يعني أنه يستخدم سلسلة وذلك في مؤشر وإرجاع الرقم.

titles_id {blah:0,why-birds-fly:1,blah2:2}

وأنا يمكن بعد ذلك الوصول إلى ID من قبل:

return titles_id[title]+1;

وماذا سيكون الأكثر فعالية النظر في وحدة المعالجة المركزية، الذاكرة، وما إلى ذلك؟

وأيضا، واسمحوا لي أن أعرف إذا كان لي المنطق كله غير صحيح.

والشكر ويليم

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

المحلول

وهذا النهج البحث الخطي لديه تعقيد من O (n)، وأعتقد أن أسوأ الحال بالنسبة لنهج مجموعة النقابي هو على الارجح O (سجل ن)، (و<م> أفضل حالة ربما O (1) إذا كان محرك JS يستخدم التجزئة والحصول على أي اصطدام). وسوف تعتمد على الطريقة التي تنفذ محرك JS عادة صفائف النقابي / الأجسام ، ولكن هل يمكن أن يكون تأكد من أنها سوف تغلب O (ن).

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

نصائح أخرى

ومن المهم أيضا أن تنظر في عدد من أزواج قيمة المفتاح سوف تحتاج إلى المخزن. إذا به أقل من 50 ~ (اعتمادا على التنفيذ) ثم القيام بعملية بحث الخطي سوف تكون فعالة كما فعل تجزئة طاولة البحث، نظرا للتكلفة حساب قيمة التجزئة وحل الاصطدامات. ويستثنى من ذلك جوجل كروم V8 محرك جافا سكريبت يبقى نوعا من النسخة المخبأة من كافة الكائنات التي تتيح له إجراء بحث المباشر للعقار على كائن، وبالتالي فإن استخدام فئة كائن كجدول التجزئة قد يكون أسرع، على الرغم من أنني لست متأكدا مما إذا كان تكلفة إنشاء هذه النسخة المخبأة سوف تفوق الفائدة للقوائم الصغيرة.

ويمكنك استخدام وظيفة indexOf صفيف في أسلوب الأول.

وفيما يلي المعلومات من موزيلا المطور: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference: قطع: صفيف: indexOf

وindexOf هو امتداد جافا سكريبت لمعيار ECMA-262. على هذا النحو قد لا تكون موجودة في تطبيقات أخرى من هذا المعيار. يمكنك حل هذا عن طريق إدخال التعليمات البرمجية التالية في بداية البرامج النصية، مما يتيح استخدام indexOf في ECMA-262 تطبيقات التي لا تدعم ذلك أصلا. هذه الخوارزمية هي بالضبط تلك المستخدمة في فايرفوكس وسبايدر مونكي.

if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
   };
}

وصفائف جافا سكريبت يمكن استخدام قيمة مثل عنوان "لماذا-الطيور تطير" للمؤشر.

وحصول exmaple:   عنوان فار = "لماذا-الطيور الطيران"؛

وفار TitleArray [] = صفيف جديد ()؛

وTitleArray [لقب] = معرف؛

وثم لديك إمكانية الوصول المباشر إلى هوية بالعنوان:

والعودة TitleArray [لقب]؛

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