স্পষ্টতই, পি = এনপি [বন্ধ]


111

বুলিয়ান এক্সপ্রেশনকে সত্য করা যায় কিনা তা নির্ধারণের ক্ষেত্রে স্যাট সমস্যা উদাহরণস্বরূপ, (এ) A = সত্য সেট করে সত্য করা যেতে পারে, তবে (এন্ড অ্যান্ড ও এ!) কখনই সত্য হতে পারে না। এই সমস্যাটি এনপি-সম্পূর্ণ হিসাবে পরিচিত। দেখুন বুলিয়ান Satisfiability

আপনার কাজটি হ'ল স্যাট-এর জন্য একটি প্রোগ্রাম লিখুন যা বহুপাক্ষিক সময়ে সঞ্চালিত হয়, তবে সমস্ত ক্ষেত্রে সমাধান হতে পারে না।

কিছু উদাহরণের জন্য, এটি আসলে বহুপদী না হওয়ার কারণ হতে পারে:

  1. একটি প্রান্তের কেস রয়েছে যা সুস্পষ্ট নয় তবে রানটাইমটি খুব খারাপ
  2. অ্যালগরিদম আসলে কিছু অপ্রত্যাশিত ক্ষেত্রে সমস্যার সমাধান করতে ব্যর্থ
  3. আপনি যে প্রোগ্রামিং ল্যাঙ্গুয়েজটি ব্যবহার করছেন তার কিছু বৈশিষ্ট্যের পক্ষে আপনি এটি যুক্তিযুক্তভাবে প্রত্যাশা করার চেয়ে দীর্ঘ রানটাইম থাকতে পারেন
  4. আপনার কোডটি দেখতে আসলে যা করা হচ্ছে তার থেকে সম্পূর্ণ আলাদা কিছু করে

আপনি যে কোনও প্রোগ্রামিং ভাষা (বা ভাষার সংমিশ্রণ) ব্যবহার করতে পারেন। আপনার অ্যালগরিদমের জটিলতার কোনও আনুষ্ঠানিক প্রমাণ দেওয়ার দরকার নেই, তবে আপনার অন্তত একটি ব্যাখ্যা প্রদান করা উচিত।

বিচারের প্রাথমিক মানদণ্ডটি কোডটি কতটা নিশ্চিত তা হওয়া উচিত।

এটি একটি জনপ্রিয়তার প্রতিযোগিতা, সুতরাং এক সপ্তাহের মধ্যে সর্বোচ্চ রেট দেওয়া জিতে যায়।


11
যদি আপনি সমস্যা ডোমেনকে সীমাবদ্ধ করেন তবে এটি আরও ভাল হবে , অন্যথায় আপনি "সুপরিচিত" কিসের আশেপাশের অনিশ্চয়তার মেঘকে আহ্বান জানান। কেন একটি একক এনপি-হার্ড সমস্যা বাছাই করে না এবং তাতে মনোযোগ দিন? ভবিষ্যতের প্রশ্নগুলিতে একই লাইন বরাবর এই জাতীয় সমস্যাগুলি উন্মুক্ত রেখে যাওয়ার সুবিধা রয়েছে। কয়েকটি সংকীর্ণ প্রশ্নগুলি একটি বিস্তৃত প্রশ্নের চেয়ে সাইটটিকে আরও চলমান আনন্দ এবং বিনোদন সরবরাহ করতে পারে।
জোনাথন ভ্যান মাত্রে

9
@ gnasher729: আমি একটি স্যাট সমস্যা সমাধানের জন্য সি # সংকলক পেয়েছি ; আমি এটিকে একটি যুক্তিসঙ্গত আকর্ষণীয় অর্জন বলে মনে করি।
এরিক লিপার্ট

9
মজা হবে যদি কেউ এখানে দুর্ঘটনাক্রমে বহুবর্ষীয় সময়ে স্যাট সমাধান করে।
টিউরিয়ান

5
@ টিউরিয়নের গবেষণার দশক, কয়েক মিলিয়ন পুরষ্কার এবং পুরষ্কার এবং সমস্ত মহিলা এবং খ্যাতি যার কাছে থাকতে পারে - তবে পি = এনপি সমাধানের আসল প্রেরণা এই পিসিজি চ্যালেঞ্জ হিসাবে শেষ হবে।
নথিংস ইম্পসিবল

3
আমি এই প্রশ্নটিকে অফ-টপিক হিসাবে বন্ধ করতে ভোট দিচ্ছি কারণ এই সাইটে অধীনতর চ্যালেঞ্জগুলি আর স্বাগত নয়। meta.codegolf.stackexchange.com/a/8326/20469
বিড়াল

উত্তর:


236

সি শার্প

আপনার কাজটি হ'ল স্যাট-এর জন্য এমন একটি প্রোগ্রাম লিখুন যা বহুপদী সময়ে কার্যকর হয় appears

"উপস্থিত" অপ্রয়োজনীয়। আমি এমন একটি প্রোগ্রাম লিখতে পারি যা স্যাট সমস্যা সমাধানের জন্য বহুত্ববাদী সময়ে বাস্তবায়িত হয়। এটি বাস্তবে বেশ সরল।

মেগা বোনাস: আপনি যদি এমন একটি স্যাট-সলভার লিখেন যা প্রকৃতপক্ষে বহুবর্ষের সময় কার্যকর হয় তবে আপনি মিলিয়ন ডলার পাবেন! তবে দয়া করে কোনও স্পোলার ট্যাগ ব্যবহার করুন, যাতে অন্যরা এটি সম্পর্কে অবাক হয়ে যায়।

অসাধারণ. দয়া করে আমাকে মিলিয়ন টাকা প্রেরণ করুন সিরিয়াসলি, আমার এখনই একটি প্রোগ্রাম রয়েছে যা বহুপদী রানটাইমের সাহায্যে স্যাট সমাধান করবে।

আমাকে উল্লেখ করে শুরু করুন যে আমি স্যাট সমস্যার উপর একটি প্রকরণটি সমাধান করতে যাচ্ছি। আমি কীভাবে একটি প্রোগ্রাম লিখতে যাচ্ছি যা কোনও 3-SAT সমস্যার অনন্য সমাধান প্রদর্শন করে । আমার বোলারটি কাজ করার জন্য প্রতিটি বুলিয়ান ভেরিয়েবলের মূল্যায়ন অনন্য হতে হবে ।

আমরা কয়েকটি সহজ সহায়ক পদ্ধতি এবং প্রকারগুলি ঘোষণা করে শুরু করি:

class MainClass
{
    class T { }
    class F { }
    delegate void DT(T t);
    delegate void DF(F f);
    static void M(string name, DT dt)
    {
        System.Console.WriteLine(name + ": true");
        dt(new T());
    }
    static void M(string name, DF df)
    {
        System.Console.WriteLine(name + ": false");
        df(new F());
    }
    static T Or(T a1, T a2, T a3) { return new T(); }
    static T Or(T a1, T a2, F a3) { return new T(); }
    static T Or(T a1, F a2, T a3) { return new T(); }
    static T Or(T a1, F a2, F a3) { return new T(); }
    static T Or(F a1, T a2, T a3) { return new T(); }
    static T Or(F a1, T a2, F a3) { return new T(); }
    static T Or(F a1, F a2, T a3) { return new T(); }
    static F Or(F a1, F a2, F a3) { return new F(); }
    static T And(T a1, T a2) { return new T(); }
    static F And(T a1, F a2) { return new F(); }
    static F And(F a1, T a2) { return new F(); }
    static F And(F a1, F a2) { return new F(); }
    static F Not(T a) { return new F(); }
    static T Not(F a) { return new T(); }
    static void MustBeT(T t) { }

এখন আসুন 3-SAT সমস্যা সমাধানের জন্য বেছে নেওয়া যাক। চল বলি

(!x3) & 
(!x1) & 
(x1 | x2 | x1) & 
(x2 | x3 | x2)

এর আরও কিছুটা বন্ধুত্বপূর্ণ করা যাক।

(!x3) & (
    (!x1) & (
        (x1 | x2 | x1) & 
        (x2 | x3 | x2)))

আমরা এটিকে এনকোড করি:

static void Main()
{
    M("x1", x1 => M("x2", x2 => M("x3", x3 => MustBeT(
      And(
        Not(x3),
        And(
          Not(x1),
          And(
            Or(x1, x2, x1),
            Or(x2, x3, x2))))))));
}

এবং প্রোগ্রামটি চালানোর সময় যথেষ্ট নিশ্চিত হয়ে আমরা বহু-কালীন সময়ে 3-স্যাট-এর একটি সমাধান পাই। আসলে রানটাইম সমস্যার আকারে লিনিয়ার !

x1: false
x2: true
x3: false

আপনি বলেছেন বহুপদী রানটাইম । আপনি বহুবর্ষীয় সংকলনের সময় সম্পর্কে কিছুই বলেননি । এই প্রোগ্রামটি সি # সংকলককে x1, x2 এবং x3 এর জন্য সম্ভাব্য সমস্ত ধরণের সংমিশ্রণগুলি চেষ্টা করতে বাধ্য করে এবং কোনও অনন্য ত্রুটি প্রদর্শন না করে এমন একটি অনন্য চয়ন করতে পারে। সংকলক সমস্ত কাজ করে, তাই রানটাইমের দরকার নেই। আমি 2007 সালে আমার ব্লগে এই আকর্ষণীয় টেকনিকটি প্রথম প্রদর্শিত হয়েছিল: http://blogs.msdn.com/b/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx নোট অবশ্যই এই উদাহরণটি দেখায় যে সি # তে ওভারলোড রেজোলিউশনটি কমপক্ষে এনপি-হার্ড। তা এনপি-হার্ড বা প্রকৃতপক্ষে অনির্বচনীয় Whether জেনেরিক বৈপরীত্যের উপস্থিতিতে ধরণের রূপান্তরযোগ্যতা কীভাবে কাজ করে তার নির্দিষ্ট সূক্ষ্ম বিশদের উপর নির্ভর করে, তবে এটি অন্য দিনের বিষয়।


95
আপনার মিলিয়ন টাকার জন্য আপনাকে মাটির গণিত ইনস্টিটিউটের সাথে যোগাযোগ করতে হবে। তবে আমি নিশ্চিত না যে তারা সন্তুষ্ট হবে
জোনাথন পুলানানো

15
অবশ্যই যে কোনও স্যাট সমস্যাটি সমতুল্য 3-স্যাট সমস্যায় রূপান্তরিত হতে পারে, সুতরাং এই বিধিনিষেধটি কেবল একটি অসুবিধা। আমার "সমাধান" এর সাথে আরও উদ্বেগজনক সমস্যাটি হ'ল সমস্যাটির অনন্য সমাধান হওয়া দরকার। যদি কোনও সমাধান বা একাধিক সমাধান না হয় তবে সংকলক একটি ত্রুটি দেয়।
এরিক লিপার্ট

11
@ এরিকলিপার্টের স্বতন্ত্রতার প্রয়োজনীয়তা ঠিক আছে। আপনি সর্বজনীন সময় এলোমেলোভাবে হ্রাস ব্যবহার করে সর্বদা স্যাটকে ইউনিক-স্যাট (স্যাট তবে অনুমান করে ইনপুটগুলিতে 0 বা 1 অ্যাসাইনমেন্ট রয়েছে) এ হ্রাস করতে পারেন। কীওয়ার্ডস: বিচ্ছিন্নতা লেম্মা, ভ্যালেন্টি-ওয়াজিরানি উপপাদ্য।
দিয়েগো ডি এস্ট্রাদ

44
"সিরিয়াসলি, আমার এখনই একটি প্রোগ্রাম রয়েছে যা বহুপদী রানটাইমের সাহায্যে স্যাট সমাধান করবে।" - আমিও, তবে দুর্ভাগ্যক্রমে এটি এই মন্তব্য বাক্সে ফিট করে না।
कंपুশিপ

11
@ কোবি: হ্যাঁ, এটাই রসিকতা।
এরিক লিপার্ট

166

বহু ভাষা (1 বাইট)

নিম্নলিখিত প্রোগ্রামটি, বেশিরভাগ ভাষায় বৈধ, বেশিরভাগ কার্যকরী এবং রহস্যজনক, প্রচুর সংখ্যক স্যাট সমস্যার সঠিক উত্তর দেবে এবং এর অবিরাম জটিলতা রয়েছে (!!!):

0

আশ্চর্যজনকভাবে, পরবর্তী প্রোগ্রামটি বাকী সমস্ত সমস্যার সঠিক উত্তর দেবে এবং একই জটিলতা রয়েছে। সুতরাং আপনার কেবল সঠিক প্রোগ্রাম বাছাই করা দরকার, এবং আপনার সব ক্ষেত্রেই সঠিক উত্তর থাকবে!

1

6
এটা চমৎকার. আমি নিজেকে একটি ভাল হাসি ছিল।
কার্ল দামগার্ড আসমুসেন

2
একেবারে চ ****** উজ্জ্বল!
ব্লু ডগ

78
হুম। এটা এখন সহজ। আমাকে কেবল একটি প্রোগ্রাম লিখতে হবে যা সঠিক প্রোগ্রামটি বেছে নেবে!
ক্রানচার

অবিকল! :-)
মাউ

6
স্মারকস্বরূপ xkcd.com/221
এমএস 210

34

জাভাস্ক্রিপ্ট

পুনরাবৃত্তিহীন অ-নির্ধারণবাদ ব্যবহার করে, স্যাট বহুপক্ষীয় সময়ে সমাধান করা যেতে পারে!

function isSatisfiable(bools, expr) {
    function verify() {
        var values = {};
        for(var i = 0; i < bools.length; i++) {
            values[bools[i]] = nonDeterministicValue();
        }
        with(values) {
            return eval(expr);
        }
    }
    function nonDeterministicValue() {
        return Math.random() < 0.5 ? !0 : !1;
    }

    for(var i = 0; i < 1000; i++) {
        if(verify(bools, expr)) return true;
    }
    return false;
}

ব্যবহারের উদাহরণ:

isSatisfiable(["a", "b"], "a && !a || b && !b") //returns 'false'

এই অ্যালগরিদম কেবল বুলিয়ান সূত্রটি এলোমেলো ইনপুট সহ হাজার বার চেক করে। প্রায়শই সর্বদা ছোট ইনপুটগুলির জন্য কাজ করে, তবে আরও ভেরিয়েবল প্রবর্তিত হলে কম নির্ভরযোগ্য।

যাইহোক, আমি গর্বিত যে আমার একে অপরের ঠিক পাশেই জাভাস্ক্রিপ্টের দুটির মধ্যে সবচেয়ে নিচে যুক্ত বৈশিষ্ট্যগুলি ব্যবহার করার সুযোগ হয়েছিল: evalএবং with


4
এটি আসলে একটি সুপ্রতিষ্ঠিত পরীক্ষার পদ্ধতি। আমার বিশ্বাস, হাস্কেলের দ্রুত চেক লাইব্রেরিটি সমস্ত মজা শুরু করেছিল। এর পর থেকে এটি বিভিন্ন ভাষায় পুনরায় প্রতিস্থাপন করা হয়েছে।
জন Tyree

4
আমি মনে করি এটি লক্ষ করা উচিত যে, এই প্রোগ্রামটি সঠিক উত্তরটি ফেরত নেওয়ার সম্ভাবনা কম, বৃহত্তর বয়ান প্রকাশ। 1000লুপ একরকম ইনপুট আকার (কিছু বহুপদী অ হে (1) স্কেলিং) সঙ্গে স্কেল উচিত।
ক্রুঙ্কার

2
@ ক্রাঙ্কার আরও সুনির্দিষ্ট হওয়ার জন্য, ভেরিয়েবলের সংখ্যা বৃহত্তর, সঠিক উত্তর ফেরানোর সম্ভাবনা তত কম। (উদাহরণস্বরূপ একটি একক ভেরিয়েবলের সাথে একটি দীর্ঘ দীর্ঘ অভিব্যক্তি প্রায় সবসময় সঠিক উত্তরটি ফিরিয়ে দেবে)
পিটার ওলসন

2
@ টিমসুগেইন আমি স্বীকার করি যে এই প্রসঙ্গে আমার "ননডেটরিস্টিনিস্টিক" শব্দটি ব্যবহার করা সন্দেহজনক, ঠিক যেমন দাবি করা হচ্ছে যে স্যাটকে বহুপদী সময়ে সমাধান করা যায়। আমি জানি এটি সঠিক নয়, এটি প্রতারণার খেলার অংশ মাত্র।
পিটার ওলসন

4
@ পলড্রাপার এবং তারপরে তাদের আন্ডারজেড কল করুন! আমার হাসি খুব ভাল লাগল!
রব

32

গণিত + কোয়ান্টাম কম্পিউটিং Comp

আপনি হয়ত জানেন না যে ম্যাথামেটিকা ​​কোয়ান্টাম কম্পিউটারের সাথে আসে

Needs["Quantum`Computing`"];

কোয়ান্টাম আদিবাটিক কমপুটিং একটি হ্যামিলটোনীয় (এনার্জি অপারেটর) সমাধান করার জন্য এমন একটি সমস্যা এনকোড করে যাতে তার ন্যূনতম শক্তি ("স্থল রাষ্ট্র") সমাধানটির প্রতিনিধিত্ব করে। সুতরাং হ্যামিলটোনীয়ের স্থলভাগে কোয়ান্টাম সিস্টেমের অ্যাডিয়াব্যাটিক বিবর্তন এবং পরবর্তী পরিমাপ সমস্যার সমাধান দেয়।

আমরা একটি সাবহমিলটোনীয়কে সংজ্ঞায়িত করি যা ||ভেরিয়েবল এবং এর উপকারের জন্য পাওলি অপারেটরগুলির উপযুক্ত সংমিশ্রণের সাথে অভিব্যক্তির অংশগুলির সাথে মিলে যায়

এখানে চিত্র বর্ণনা লিখুন

যেখানে এই মত প্রকাশের জন্য

expr = (! x3) && (! x1) && (x1 || x2 || x1) && (x2 || x3 || x2);

যুক্তির মতো দেখতে হবে

{{{1, x3}}, {{1, x1}}, {{0, x1}, {0, x2}, {0, x1}}, {{0, x2}, {0, x3}, {0, x2}}}

বুল এক্সপ্রেশন থেকে এই জাতীয় যুক্তি তৈরির কোড এখানে:

arg = expr /. {And -> List, Or -> List, x_Symbol :> {0, x}, 
    Not[x_Symbol] :> {1, x}};
If[Depth[arg] == 3, arg = {arg}];
arg = If[Depth[#] == 2, {#}, #] & /@ arg

এখন আমরা একটি সম্পূর্ণ হ্যামিল্টোনীয় নির্মাণ করি, সাবহামিলটোনীয়দের সংমিশ্রণ করে (সংক্ষেপটি &&প্রকাশের অংশগুলির সাথে মিলে যায়)

H = h /@ arg /. List -> Plus;

এবং সর্বনিম্ন শক্তি রাষ্ট্রের সন্ধান করুন

QuantumEigensystemForm[H, -1]

এখানে চিত্র বর্ণনা লিখুন

আমরা যদি শূন্যের একটি আইজেনুয়াল পাই, তবে ইগনভেક્ટરটিই সমাধান

expr /. {x1 -> False, x2 -> True, x3 -> False}
> True

দুর্ভাগ্যক্রমে "কোয়ান্টাম কম্পিউটিং" অ্যাড-অনের জন্য অফিসিয়াল সাইটটি সক্রিয় নয় এবং এটি ডাউনলোড করার জন্য আমি কোনও জায়গা খুঁজে পাচ্ছি না, আমি এখনও এটি আমার কম্পিউটারে ইনস্টল করে রেখেছি। অ্যাড-অনে স্যাট সমস্যার একটি ডকুমেন্টেড সমাধান রয়েছে, যার ভিত্তিতে আমি আমার কোডটি ভিত্তি করে রেখেছি।


19
এই উত্তরটি কীভাবে কাজ করে তা আমার কোনও ধারণা নেই। +1
জোনাথন পুলানানো

5
@ XiaogeSu "প্রাকৃতিকভাবে"।
সুইশ করুন

3
@ XiaogeSu বিবর্তন হ্যামিলটোনিয়ান দ্বারা নির্ধারিত, এবং স্বাভাবিকভাবেই এটি সর্বনিম্ন শক্তিতে বিকশিত হয়। সুতরাং বর্ণালী জেনে, আমরা ধরে নিতে পারি যে সিস্টেমটি স্থল অবস্থায় শেষ হবে।
ফিটফাট

3
@ XiaogeSu স্থল অবস্থায় যাওয়ার জন্য, একটি পরিবেশের সাথে একটি মিথস্ক্রিয়া থাকাও প্রয়োজন যা উচ্চতর রাজ্যগুলিকে শত্রু করে তোলে, আপনি ঠিক বলেছেন। এখানে ধারণাটি হ'ল এই ইন্টারঅ্যাকশনটি খুব ছোট, "আদিবাটিক"।
তিউরিওন

3
ক্লাবীয় সিমুলেটেড অ্যানিলিংয়ের সাথে এফআইআই আদিবাটিক কিউএম কম্পিউটিংয়ের অনেক মিল রয়েছে । এখন দ্বাভে দ্বারা প্রয়োগ করা । এটি একটি "কুলিং" তাপমাত্রা / শক্তি ব্যবস্থার অনুরূপ যা স্থানীয় মিনিমে "সন্ধান করে / স্থির হয়" ।
vzn

27

তিনটি পদ্ধতির এখানে সমস্তগুলি তার 2D জ্যামিতিক লিঙ্গুয়া ফ্র্যাঙ্কায় স্যাট হ্রাস করতে জড়িত: ননোগ্রাম লজিক ধাঁধা। লজিক ধাঁধাতে ঘরগুলি SAT ভেরিয়েবলের সাথে সামঞ্জস্য করে, ধারাগুলিতে সীমাবদ্ধ।

সম্পূর্ণ ব্যাখ্যার জন্য (এবং দয়া করে বাগগুলির জন্য আমার কোডটি পর্যালোচনা করুন!) আমি ইতিমধ্যে ননগ্রাম সমাধানের জায়গার মধ্যে নিদর্শনগুলির জন্য কিছু অন্তর্দৃষ্টি পোস্ট করেছি। Https://codereview.stackexchange.com/questions/43770/nonogram-puzzle-solution-space দেখুন। 4 বিলিয়ন ধাঁধা সমাধানগুলি গণনা করে এবং সত্য টেবিলে ফিট করার জন্য এগুলিকে এনকোড করা ফ্র্যাক্টাল নিদর্শনগুলি দেখায় - স্ব-মিল এবং বিশেষত স্ব-আত্ম -তা। এই অ্যাফাইন-রিডানডেন্সি সমস্যার মধ্যে কাঠামো প্রদর্শন করে, সমাধান উত্পন্ন করার জন্য প্রয়োজনীয় গণনার সংস্থানগুলি হ্রাস করতে শোষণযোগ্য। এটি যে কোনও সফল অ্যালগরিদমের মধ্যে বিশৃঙ্খলাযুক্ত প্রতিক্রিয়ার প্রয়োজনীয়তাও দেখায়। পর্বের ক্রান্তিকালনের আচরণে ব্যাখ্যাযোগ্য শক্তি রয়েছে যেখানে "সহজ" উদাহরণগুলি মোটা কাঠামোটির সাথে থাকা, যখন "শক্ত" উদাহরণগুলিতে সূক্ষ্ম বিশদে আরও পুনরাবৃত্তির প্রয়োজন হয়, যা সাধারণ হিউরিস্টিক থেকে গোপন থাকে। আপনি যদি এই অসীম চিত্রের কোণে জুম করতে চান (সমস্ত <= 4x4 ধাঁধা উদাহরণগুলি এনকোড করা আছে) দেখুন http://re-curse.github.io/visualizing-intractability/nonograms_zoom/nonograms.html

পদ্ধতি 1. বিশৃঙ্খলাবদ্ধ মানচিত্র এবং মেশিন লার্নিং ব্যবহার করে ননগ্রাম সমাধান স্থানের ছায়াকে এক্সট্রোপোলেট করুন (ম্যান্ডেলব্রোট সেট উত্পন্ন করার মতো ফিটিং ফাংশনগুলি মনে করুন)।

http://i.stack.imgur.com/X7SbP.png

এখানে অন্তর্ভুক্তির একটি ভিজ্যুয়াল প্রমাণ রয়েছে। আপনি যদি এই চারটি চিত্র বাম থেকে ডানদিকে স্ক্যান করতে পারেন এবং মনে করছেন যে অনুপস্থিত 5 তম ... 6th ষ্ঠ ... ইত্যাদি চিত্র উত্পন্ন করার জন্য আপনার কাছে একটি ভাল ধারণা রয়েছে তবে আমি ননোগ্রাম সমাধানের সিদ্ধান্ত সমস্যার জন্য আপনাকে কেবলমাত্র আমার এনপি ওরাকল হিসাবে প্রোগ্রাম করেছি অস্তিত্ব. বিশ্বের সবচেয়ে শক্তিশালী সুপার কম্পিউটার হিসাবে আপনার পুরষ্কার দাবি করতে এগিয়ে যান। আমি আপনাকে এখন পর্যন্ত এবং তারপরে জোল্ট বিদ্যুৎ সরবরাহ করব যখন বিশ্বের আপনার গণনামূলক অবদানের জন্য আপনাকে ধন্যবাদ জানায়।

পদ্ধতি 2. ইনপুটগুলির বুলিয়ান চিত্র সংস্করণে ফুরিয়ার ট্রান্সফর্ম ব্যবহার করুন। এফএফটি একটি উদাহরণের মধ্যে ফ্রিকোয়েন্সি এবং অবস্থান সম্পর্কে বিশ্বব্যাপী তথ্য সরবরাহ করে। ইনপুট জোড়ার মধ্যে প্রস্থের অংশটি সমান হওয়া উচিত, তবে তাদের ধাপের তথ্য সম্পূর্ণ আলাদা - একটি নির্দিষ্ট অক্ষ বরাবর সমাধান প্রক্ষেপণ সম্পর্কে দিকনির্দেশিত তথ্য ধারণ করে। আপনি যদি যথেষ্ট চালাক হন তবে আপনি ইনপুট পর্বের চিত্রগুলির বিশেষ কয়েকটি সুপারপজিশনের মাধ্যমে সমাধানের পর্ব চিত্রটি পুনর্গঠন করতে পারেন । তারপরে বিপরীতমুখীকরণটি পর্যায়ের এবং সাধারণ মাত্রার সমাধানের সময় ডোমেনে ফিরে আসে।

এই পদ্ধতিটি কী ব্যাখ্যা করতে পারে? নিয়মিত রানগুলির মধ্যে নমনীয় প্যাডিং সহ বুলিয়ান চিত্রগুলির প্রচুর অনুমতি রয়েছে। এটি ইনপুট -> সমাধানের সাথে বহুগুণে যত্ন নিয়ে সমাধানের সময় ম্যাপিংয়ের অনুমতি দেয় যখন এখনও এফএফটি'র দ্বিদলীয় সম্পত্তি রাখে, সময় ডোমেনের মধ্যে অনন্য ম্যাপিং <-> (ফ্রিকোয়েন্সি, পর্ব)। এর অর্থ হ'ল "কোনও সমাধান নেই" বলে কোনও জিনিস নেই। এটি যা বলবে তা হ'ল ধারাবাহিক ক্ষেত্রে এমন গ্রেস্কেল সমাধান রয়েছে যা আপনি traditionalতিহ্যবাহী ননোগ্রাম ধাঁধা সমাধানের বিলেভ চিত্রটি দেখার সময় বিবেচনা করছেন না।

আপনি এটা করবেন না কেন? এটি প্রকৃতপক্ষে গণনা করার একটি ভয়ঙ্কর উপায়, কারণ আজকের ভাসমান-পয়েন্ট বিশ্বে এফএফটিগুলি বড় উদাহরণগুলির সাথে অত্যন্ত ভুল হবে। যথার্থতা একটি বিশাল সমস্যা, এবং কোয়ান্টাইজড परिमाण এবং পর্যায় চিত্রগুলি থেকে চিত্রগুলি পুনর্গঠন সাধারণত খুব আনুমানিক সমাধান তৈরি করে, যদিও সম্ভবত চোখের দোরের জন্য দৃশ্যত নয় । এই সুপারপজিশনিং ব্যবসায়টি নিয়ে আসা খুব কঠিন, কারণ এটি বর্তমানে কীভাবে কাজ করছে তা অজানা। এটি কি একটি সাধারণ গড় স্কিম হবে? সম্ভবত না, এবং অন্তর্দৃষ্টি ব্যতীত এটির সন্ধানের জন্য কোনও সন্ধানের নির্দিষ্ট পদ্ধতি নেই।

পদ্ধতি 3. একটি সেলুলার অটোমেটা নিয়ম সন্ধান করুন (ভন নিউম্যান 2-রাষ্ট্রীয় বিধিগুলির জন্য একটি সম্ভাব্য 4 বিলিয়ন ডলারের নিয়ম টেবিলগুলির মধ্যে) যা ননগ্রাম ধাঁধার একটি প্রতিসাম্য সংস্করণ সমাধান করে। আপনি এখানে কোষগুলিতে সমস্যাটির সরাসরি এম্বেডিং ব্যবহার করেন। রক্ষণশীল, প্রতিসম ননোগ্রাম ms

কম্পিউটিংয়ের ভবিষ্যতের জন্য সরলতা এবং ভাল প্রভাবগুলির ক্ষেত্রে এটি সম্ভবত সবচেয়ে মার্জিত পদ্ধতি। এই নিয়মের অস্তিত্ব প্রমাণিত নয়, তবে আমার কাছে একটি কুঁচক আছে এটি বিদ্যমান। কারণটা এখানে:

অ্যালগোরিদমের ঠিক সমাধানের জন্য ননোগ্রামগুলিকে প্রচুর বিশৃঙ্খলা ফিডব্যাকের প্রয়োজন require কোড রিভিউতে লিঙ্কযুক্ত ব্রুট ফোর্স কোড দ্বারা এটি প্রতিষ্ঠিত। বিশৃঙ্খল প্রতিক্রিয়া প্রোগ্রাম করার জন্য সর্বাধিক সক্ষম ভাষা সম্পর্কে সিএ।

এটি দেখতে সঠিক, দৃষ্টিশক্তিভাবে। নিয়মটি এম্বেডিংয়ের মাধ্যমে বিবর্তিত হবে, আনুভূমিকভাবে এবং উলম্বভাবে তথ্য প্রচার করবে, হস্তক্ষেপ করবে, তারপরে কোনও সমাধানে স্থির হবে যা সেট কোষের সংখ্যা সংরক্ষণ করেছিল। এই প্রচারের পথটি সেই পথে (পিছনের দিকে) অনুসরণ করে যা আপনি সাধারণত কোনও দৈহিক বস্তুর ছায়াটি মূল কনফিগারেশনে প্রজেক্ট করার সময় মনে করেন। ননোগ্রামগুলি বিচ্ছিন্ন টমোগ্রাফির একটি বিশেষ ক্ষেত্রে থেকে উদ্ভূত, সুতরাং দুটি কিটি-কোণে সিটি স্ক্যানারগুলিতে একযোগে বসে কল্পনা করুন .. এইভাবে এক্স-রে মেডিকেল ইমেজগুলি তৈরি করার প্রস্তাব দিতে পারে। অবশ্যই, সীমানা সংক্রান্ত সমস্যা রয়েছে - সিএ মহাবিশ্বের প্রান্তগুলি সীমা ছাড়িয়ে তথ্য প্রচার করতে পারে না, যদি না আপনি টেরয়েডাল মহাবিশ্বকে অনুমতি না দেন। এটি ধীরে ধীরে সীমানা মান সমস্যা হিসাবে ধাঁধাটি কাস্ট করে।

এটি আউটপুট হিসাবে আউটপুট হিসাবে অদলবদল এবং তদ্বিপরীত মধ্যে অবিচ্ছিন্ন দোলন প্রভাব মধ্যে ক্ষণস্থায়ী রাষ্ট্র হিসাবে একাধিক সমাধান ব্যাখ্যা করে। এটি এমন উদাহরণগুলিকে ব্যাখ্যা করে যেগুলির মূল কনফিগারেশন হিসাবে কোনও সমাধান নেই যা সেট ঘরগুলির সংখ্যা সংরক্ষণ করে না। এই জাতীয় নিয়ম সন্ধানের প্রকৃত ফলাফলের উপর নির্ভর করে, এমনকি ঘরের রাজ্যগুলি সুরক্ষিত রয়েছে এমন ঘনিষ্ঠ সমাধানের সাথে এটি প্রায় অবিশ্বাস্য উদাহরণ হতে পারে ।


2
আমাকে "কেন আমি এটি ভেবে দেখিনি ?" বলে ছেড়ে যাওয়ার জন্য +1 ? : পি
নবীন

আপনি স্টিফেন ওল্ফ্রাম এবং আমি আমার পাঁচ পাউন্ড দাবি!
কুইকপ্লসোন

4
এই উত্তরটি সত্যই আরও বেশি creditণের দাবিদার, কারণ এটি একটি দৃinc়প্রত্যয়ী প্রোগ্রাম করার সর্বোত্তম প্রয়াস । ভাল প্রদর্শনী.
জোনাথন পুলানানো

10

সি ++

এখানে এমন একটি সমাধান রয়েছে যা বহুমুখী সময়ে চলার গ্যারান্টিযুক্ত: এটি O(n^k)কোথায় চলে আসে যেখানে nবুলিয়ানগুলির সংখ্যা এবং kএটি আপনার পছন্দের ধ্রুবক।

এটি তাত্পর্যপূর্ণভাবে সঠিক, যা আমি বিশ্বাস করি যে এটি "ভাগ্যের কিছুটা সময় দিয়ে বেশিরভাগ সময় সঠিক উত্তর দেয়" (এবং, এই ক্ষেত্রে, একটি যথাযথভাবে বড় মূল্য k- সম্পাদনা এটি আমার কাছে ঘটেছিল) এর জন্য সিএস-স্পোক বলে বিশ্বাস করি actually যে কোনও স্থির জন্য nআপনি এটি সেট করতে পারেন - তা কি প্রতারণা?)।kn^k > 2^n

#include <iostream>  
#include <cstdlib>   
#include <time.h>    
#include <cmath>     
#include <vector>    

using std::cout;     
using std::endl;     
typedef std::vector<bool> zork;

// INPUT HERE:

const int n = 3; // Number of bits
const int k = 4; // Runtime order O(n^k)

bool input_expression(const zork& x)
{
  return 
  (!x[2]) && (
    (!x[0]) && (
      (x[0] || x[1] || x[0]) &&
      (x[1] || x[2] || x[1])));
}

// MAGIC HAPPENS BELOW:    

 void whatever_you_do(const zork& minefield)
;void always_bring_a_towel(int value, zork* minefield);

int main()
{
  const int forty_two = (int)pow(2, n) + 1;
  int edition = (int)pow(n, k);
  srand(time(6["times7"]));

  zork dont_panic(n);
  while(--edition)
  {
    int sperm_whale = rand() % forty_two;
    always_bring_a_towel(sperm_whale, &dont_panic);

    if(input_expression(dont_panic))
    {
      cout << "Satisfiable: " << endl;
      whatever_you_do(dont_panic);
      return 0;
    }
  }

  cout << "Not satisfiable?" << endl;
  return 0;
}
void always_bring_a_towel(int value, zork* minefield)
{
  for(int j = 0; j < n; ++j, value >>= 1)
  {
    (*minefield)[j] = (value & 1);
  }
}

void whatever_you_do(const zork& minefield)
{
  for(int j = 0; j < n; ++j) 
  {
    cout << (char)('A' + j) << " = " << minefield[j] << endl;
  }
}

ভাল উত্তর. আমি ব্যাখ্যাটি একটি স্পয়লার ট্যাগে রেখে দিতাম যাতে লোকেরা এটি তাকিয়ে থাকে এবং তাদের মাথাটি কিছুটা স্ক্র্যাচ করতে পারে।
জোনাথন পুলানানো

@ জোনাথানপ্লানানো এই পরামর্শের জন্য ধন্যবাদ, আমি একটি স্পয়লার ট্যাগ যুক্ত করেছি এবং কোডটি কিছুটা অবলম্বন করেছি।
কমপিউশিপ

যাইহোক, আমি কেবলমাত্র এটি সম্পর্কে সন্ধান করেছি bitfield, সম্ভবত আমি এটিকে পছন্দ করতাম std::vector
কমপিউশিপ

3
সৃজনশীল দ্বন্দ্ব এবং হিচিকারের রেফারেন্সের জন্য +1
ব্লেক মিলার

2
হ্যাঁ অবশ্যই এটি প্রতারণা করছে, কে যদি n এর উপর নির্ভর করে তবে এটি কোনও ধ্রুবকের বেশি নয় :-)
রিমকো গ্রিলিচ

3

রুবি / gnuplot 3d পৃষ্ঠ

(ওহ কঠোর প্রতিযোগিতা!) ... যাইহোক ... হাজার শব্দের মূল্যবান একটি ছবি? এগুলি 3 স্যাট স্থানান্তরের পয়েন্টের gnuplot মধ্যে পৃথক পৃথক পৃষ্ঠতল প্লট হয়। (x, y) অক্ষগুলি হ'ল ধারা এবং পরিবর্তনশীল গণনা এবং z উচ্চতা সলভারে মোট # পুনরাবৃত্ত কল। রুবিতে লিখিত কোড এটি প্রতিটি 100 টি নমুনায় 10x10 পয়েন্টের নমুনা দেয়। এটি পরিসংখ্যানের প্রাথমিক নীতিগুলি প্রদর্শন করে / ব্যবহার করে এবং এটি মন্টি কার্লো সিমুলেশন

এটির মূলত একটি ডেভিস পুতনম অ্যালগরিদম ডিআইএমএসিএস ফর্ম্যাটে তৈরি হওয়া এলোমেলো ঘটনাগুলিতে চলছে on এই ব্যায়াম যে ধরনের আদর্শভাবে বিশ্বজুড়ে সি এস শ্রেণীর মধ্যে সম্পন্ন করা হবে, যাতে ছাত্রছাত্রীরা পড়াশোনা শেখে পারে মূলসূত্র কিন্তু প্রায় বিশেষভাবে এ সব শেখানো হয় না ... হয়তো কোনো কারণে কেন এত বাজে আছে পি এন পি প্রমাণাদি? = ? রূপান্তর পয়েন্ট ঘটনাটি (কোনও গ্রহণকারী?) বর্ণনা করে এমন একটি ভাল উইকিপিডিয়া নিবন্ধও নেই যা পরিসংখ্যান পদার্থবিজ্ঞানের একটি অত্যন্ত বিশিষ্ট বিষয় এবং সিএসেও এটি মূল বিষয়। [ক] [খ] সিএসে রূপান্তর পয়েন্টে অনেকগুলি কাগজপত্র রয়েছে তবে খুব কম লোকই ভূপৃষ্ঠ প্লট দেখায় বলে মনে হচ্ছে! (পরিবর্তে সাধারণত 2 ডি স্লাইস দেখানো হয়))

রানটাইমের তাত্পর্যপূর্ণ বৃদ্ধি 1 প্লটে স্পষ্টভাবে স্পষ্ট । 1 প্লটের মাঝামাঝি সময়ে চলতে থাকা স্যাডল হ'ল ট্রানজিশন পয়েন্ট। 2 তম এবং 3 তম প্লট% সন্তোষজনক স্থানান্তর দেখায়।

[a] সিএস পিটিপিতে টবি ওয়ালশ পর্বের রূপান্তরের আচরণ
[খ] কে-স্যাট সন্তোষজনকতার অভিজ্ঞতা অভিজ্ঞতা tcs.se
[গ] অভিজ্ঞতা / পরীক্ষামূলক গণিতে দুর্দান্ত মুহুর্ত / (টি) সিএস / স্যাট , টিমচাইন ব্লগ

এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন এখানে চিত্র বর্ণনা লিখুন

পি =? এনপি কিউইডি!

#!/usr/bin/ruby1.8

def makeformula(clauses)
    (1..clauses).map \
    {
            vars2 = $vars.dup
            (1..3).map { vars2.delete_at(rand(vars2.size)) * [-1, 1][rand(2)] }.sort_by { |x| x.abs }
    }

end

def solve(vars, formula, assign)

    $counter += 1
    vars2 = []
    formula.each { |x| vars2 |= x.map { |y| y.abs } }
    vars &= vars2

    return [false] if (vars.empty?)
    v = vars.shift
    [v, -v].each \
    {
            |v2|
            f2 = formula.map { |x| x.dup }
            f2.delete_if \
            {
                    |x|
                    x.delete(-v2)
                    return [false] if (x.empty?)
                    x.member?(v2)
            }
            return [true, assign + [v2]] if (f2.empty?)
            soln = solve(vars.dup, f2, assign + [v2])
            return soln if (soln[0])
    }
    return [false]
end

def solve2(formula)
    $counter = 0
    soln = solve($vars.dup, formula, [])
    return [$counter, {false => 0, true => 1}[soln[0]]]
end


c1 = 10
c2 = 100
nlo, nhi = [3, 10]
mlo, mhi = [1, 50]
c1.times \
{
    |n|
    c1.times \
    {
            |m|
            p1 = nlo + n.to_f / c1 * (nhi - nlo)
            p2 = mlo + m.to_f / c1 * (mhi - mlo)
            $vars = (1..p1.to_i).to_a
            z1 = 0
            z2 = 0
            c2.times \
            {
                    f = makeformula(p2.to_i)
                    x = solve2(f.dup)
                    z1 += x[0]
                    z2 += x[1]
            }
#           p([p1, p2, z1.to_f / c2, z2.to_f / c2]) # raw
#           p(z1.to_f / c2)                         # fig1
#           p(0.5 - (z2.to_f / c2 - 0.5).abs)       # fig2
            p(z2.to_f / c2)                         # fig3
    }
    puts
}

2
আপনি এই উত্তরটি অবদান রেখে আমি আনন্দিত। পি বনাম এনপি (যে কোনও উপায়ে) এর যে কোনও সফল প্রমাণে ভবিষ্যদ্বাণীপূর্ণ শক্তির জন্য এটি অনেকগুলি প্রয়োজনীয়তার একটি। এর গুরুত্ব নির্দেশ করার জন্য ধন্যবাদ। :)

সম্পর্কে আরও মন্তব্যে পি বনাম দ্বারা NP অনেক Top / সংগৃহীত refs, ইত্যাদি
vzn
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.