كرر على جميع الأنماط الفرعية لقناع معين


يحدث أنه من الضروري تعداد كل متواليات البت ذات طول معين. أو بعبارة أخرى ، كرر كل الخيارات الممكنة ، حيث يتم تحديد حالة من حالتين ممكنتين لكل كائن.

في مثل هذه الحالات ، من الممكن تنفيذ التعداد باستخدام أقنعة البت. ميزة هذا النهج هي أن هذا الكود يعمل بشكل غير متكرر ويعمل على الأرقام بدلاً من المجموعات أو ما شابه ، مما يحسن الأداء بشكل كبير.

الكود العام باستخدام bitmasks موضح أدناه: إنتن. // عدد الكائنات o (طول تسلسل البت) لـ (int mask = 0؛ mask & lt؛ (1 & lt؛ & lt؛ n)؛ mask ++) {// حلقة عبر جميع الأرقام من 0 إلى 2 ^ n - 1 ، حيث يتوافق كل رقم مع قناع بت // قناع الرقم الحالي هو قناع بت ، حيث تحدد البتة i حالة الكائن من الدرجة الأولى لـ (int i = 0؛ i & lt؛ n؛ i ++) {// كرر عبر n بت لفهم الحالة التي يمتلكها كل كائن if ((1 & lt؛ & lt؛ i) & amp؛ mask) {// تحقق مما إذا كانت البتة i تساوي واحدًا // معالجة الخيار الذي يكون للكائن i-th الحالة & # 39 ؛ 1 & # 39 ؛ } else {// الحالة عندما تكون البتة i صفرية // معالجة الخيار الذي هو الكائن الأول من الحالة & # 39 ؛ 0 & # 39 ؛ } } }
يتم تشغيل هذا الرمز في O (2 ^ n * f (n)) ، حيث f (n) هو الوقت الذي تستغرقه في معالجة ملف قابل للتكرار.

يحدث أنه من الضروري تعداد كل متواليات البت ذات طول معين. أو بعبارة أخرى ، كرر كل الخيارات الممكنة ، حيث يتم تحديد حالة من حالتين ممكنتين لكل كائن.

في مثل هذه الحالات ، من الممكن تنفيذ التعداد باستخدام أقنعة البت. ميزة هذا النهج هي أن هذا الكود يعمل بشكل غير متكرر ويعمل على الأرقام بدلاً من المجموعات أو ما شابه ، مما يحسن الأداء بشكل كبير.

الكود العام باستخدام bitmasks موضح أدناه: إنتن. // عدد الكائنات o (طول تسلسل البت) لـ (int mask = 0؛ mask & lt؛ (1 & lt؛ & lt؛ n)؛ mask ++) {// حلقة عبر جميع الأرقام من 0 إلى 2 ^ n - 1 ، حيث يتوافق كل رقم مع قناع بت // قناع الرقم الحالي هو قناع بت ، حيث تحدد البتة i حالة الكائن من الدرجة الأولى لـ (int i = 0؛ i & lt؛ n؛ i ++) {// كرر عبر n بت لفهم الحالة التي يمتلكها كل كائن if ((1 & lt؛ & lt؛ i) & amp؛ mask) {// تحقق مما إذا كانت البتة i تساوي واحدًا // معالجة الخيار الذي يكون للكائن i-th الحالة & # 39 ؛ 1 & # 39 ؛ } else {// الحالة عندما تكون البتة i صفرية // معالجة الخيار الذي هو الكائن الأول من الحالة & # 39 ؛ 0 & # 39 ؛ } } }
يتم تشغيل هذا الرمز في O (2 ^ n * f (n)) ، حيث f (n) هو الوقت الذي تستغرقه في معالجة ملف قابل للتكرار.