/ অন্য অবরুদ্ধ হলে কীভাবে সত্যের টেবিলটিকে ক্ষুদ্রতমতম হিসাবে রূপান্তর করা যায়


20

আমি কীভাবে সত্যের টেবিলটি নিয়ে যাব এবং যদি এটি অবরুদ্ধ করা হয় তবে এটি একটি কমপ্যাক্টে পরিণত করতে পারি?

উদাহরণস্বরূপ, ধরা যাক আমার কাছে এই সত্য সারণী রয়েছে যেখানে A এবং B শর্ত এবং x, y এবং z সম্ভাব্য ক্রিয়া:

A B | x y z
-------------
0 0 | 0 0 1
0 1 | 0 0 1
1 0 | 0 1 0
1 1 | 1 0 0

এটি নীচে রূপান্তর করতে পারে যদি ব্লক:

if(A)
{
    if(B)
    {
        do(x)
    }
    else
    {
        do(y)
    }
}
else
{
    do(z)
}

এটি একটি সহজ নমুনা, তবে আমার প্রায়শই বেশ কয়েকটি শর্ত রয়েছে যা বিভিন্ন উপায়ে একত্রিত হওয়ার ফলে বিভিন্ন আউটপুট তৈরি করা উচিত এবং যদি একটি ব্লকটিতে তাদের যুক্তি উপস্থাপনের জন্য সর্বাধিক সংক্ষিপ্ত এবং মার্জিত উপায় বের করা শক্ত হয়ে যায়।


10
আপনার অর্থ কর্ণফো মানচিত্রকে ইফলেস ক্যাসকেডে রূপান্তর করা?
রাচেট ফ্রিক

@ র্যাচেট: দেখে মনে হচ্ছে আমি এটা করি না? আমি তাদের সম্পর্কে আগে জানতাম না। কিছু পঠন করতে হবে তবে তবুও এবং অ্যাপ্লিকেশন যা এটি আমার পক্ষে করবে তা আমার হাতের তৈরি ফলাফলগুলি যাচাই করতে খুব সুন্দর হবে else
হুয়ান

1
@ জালায়েন বেশিরভাগ কার্নোগ সরঞ্জামগুলি ডিজিটাল সার্কিটরির জন্য; যাদের প্রশ্নটি রয়েছে তার চেয়ে তাদের আলাদা আলাদা হিরিস্টিক্স রয়েছে
রাচেট ফ্রিক

1
@ জসোল্ডি: আপনি যে উত্তরগুলি পেয়েছেন তা নির্ভর করবে আপনি কোন সাইটে জিজ্ঞাসা করবেন তার উপর। যদি আপনি কিছু নির্দিষ্ট-কিছু ব্লক সমন্বিত কোনও নির্দিষ্ট কোড টুকরো সম্পর্কে মন্তব্য খুঁজছেন তবে তা অবশ্যই কোড পর্যালোচনা (বিটা) এর অন্তর্গত । স্ট্যাকওভারফ্লো আপনাকে সরঞ্জাম এবং কৌশল শেখাবে teach প্রোগ্রামার্স.এসই-তে লোকেরা আপনাকে বলবে যে আপনার / কি মানুষের বোঝার জন্য যুক্তি বিবৃতিগুলি পুনর্লিখন, বা দ্রুত সম্পাদনের জন্য উদ্বিগ্ন হওয়া উচিত নয় should
রওয়ং

2
সরঞ্জামের সুপারিশগুলি অফ-টপিক, তবে আপনি যদি প্রশ্নটিকে " আমি কীভাবে এটি করতে পারি " তে পরিবর্তন করেন ? এটি অন টপিক হবে। আপনি যদি কোনও সফ্টওয়্যার সুপারিশ চান তবে আপনার সফটওয়্যারrecs.stackexchange.com এ যাওয়া উচিত।
কিলিয়ান ফট

উত্তর:


14

আপনি যদি কর্নোখের মানচিত্র থেকে নকশা তৈরি করছেন তবে কোডটি সেইভাবেও দেখতে পারা যায়:

//                   a      b
def actionMap = [ false: [false: { z() },
                          true:  { z() }],
                  true:  [false: { x() },
                          true:  { y() }]]

actionMap[a][b]()

এই কি ভাষা? জাভাস্ক্রিপ্ট? পাইথন?
TheLQ

দি এলকিউ, এটি অজগর নয়, জাভাস্ক্রিপ্ট হতে পারে। অজগর লিখিত তবে এটি খুব অনুরূপ হবে
grizwako

@ দ্য এলকিউ: এটি গ্রোভি, কারণ আমি আজকাল এটিই করছি এবং সম্ভবত রুবিও। জাভাস্ক্রিপ্ট বা পাইথন বা এলইউএ বা পার্লের কোডটি খুব অনুরূপ।
কেভিন cline

2
এটি অবশ্যই খ মূল্যায়নের প্রভাব ফেলেছে এমনকি যখন মূল্যায়নের প্রয়োজন হয় না। সম্ভবত এটি একটি সমস্যা, সম্ভবত এটি না।
ছদ্মনাম

@ কেভিনক্লিন প্লিজ, বেশ দয়া করে, "লুয়া", "এলইউএ" নয়। :)
মাচাডো

4

সি # .নেটে, আপনি কোনও ফলশ্রুতি নীচে নিম্নরূপে ইএলএসই ছাড়াই ফলাফল পেতে অভিধান অভিধানের ক্লাস ব্যবহার করতে পারেন - এটি সম্পর্কে দুর্দান্ত জিনিসটি হ'ল:

  1. এটি পাঠযোগ্য
  2. নতুন কীগুলি অনন্য হবে (অন্যথায়, আপনি একটি ত্রুটি পান)
  3. সিকোয়েন্স কিছু যায় আসে না
  4. এন্ট্রি যুক্ত বা সরানো সহজ

আপনার কাছে অভিধান শ্রেণীর সমতুল্য না থাকলে আপনি বাইনারি চেহারা / অনুসন্ধান ফাংশনে একই কাজ করতে পারেন।

//A B | x y z
//-------------
//0 0 | 0 0 1
//0 1 | 0 0 1
//1 0 | 0 1 0
//1 1 | 1 0 0
// Create a Dictionary object and populate it
Dictionary<string, string> _decisionTable = new Dictionary<string, string>() { 
    { "0,0", "0,0,1" }, 
    { "0,1", "0,0,1" }, 
    { "1,0", "0,1,0" }, 
    { "1,1", "1,0,0"} 
};

//usage example: Find the values of X,Y,Z for A=1,B=0
Console.WriteLine(_decisionTable["1,0"]);
Console.Read();

1
আমি এই সমাধানটি পছন্দ করি, কেবলমাত্র আমি পরিবর্তন করব একটি অভিধান <স্ট্রিং, স্ট্রিং> এর পরিবর্তে একটি অভিধান <টুপল <bool, bool>, Tuple <bool, bool, bool> ব্যবহার করুন। তারপরে আপনাকে অনুসন্ধানের জন্য স্ট্রিং তৈরি করার দরকার নেই এবং ফলাফলটি ডিকনস্ট্রাক্ট করার পরে যেমন টিপলস আপনার পক্ষে এটি করবে।
লাইস

@ লাইজ, আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। আপনি একেবারে সঠিক। আমি যখন সুযোগ পাই তখন আপনার ভাল বিষয়টি আমার অন্তর্ভুক্ত করা উচিত।
NoChance

2

আপনি যা চান তা হ'ল রিট অ্যালগরিদম । এটি স্বয়ংক্রিয়ভাবে নিয়মের একটি গোছা কম্বস করে এবং আপনার বর্ণনা অনুসারে এগুলিকে একটি গাছে অগ্রাধিকার দেয়।

অনেকগুলি বাণিজ্যিক "নিয়ম ইঞ্জিন" সিস্টেম রয়েছে যা খুব বড় স্কেল (লক্ষ লক্ষ নিয়ম) এ সঞ্চালন করে যেখানে মৃত্যুদন্ড কার্যকর করার গতি অপরিহার্য।


2

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

def x():
    print "xxxx"

def y():
    print "yyyyy"

def z(): #this is default function
    print "zzzzz"

def A():
    return 3 == 1

def B():
    return 2 == 2


def insert(statements,function):
    rows.append({ "statements":statements, "function":function })

def execute():
    for row in rows:
        print "==============="
        flag = 1

        for index, val in enumerate(row["statements"]):
            #for first pass of lopp, index is 0, for second its 1....
            #if any function returns result different than one in our row, 
            # we wont execute funtion of that row (mark row as not executable)
            if funcs[index]() != val:
                flag = 0

        if flag == 1:
            #we execute function 
            row["function"]()
        else: z() #we call default function


funcs = [A,B]  #so we can access functions by index key
rows = []

insert( (0,0), y)
insert( (0,1), y)
insert( (1,0), x)
insert( (1,1), x)
insert( (0,1), x)

execute()

1

ইনপুটগুলিকে একটি মানে মানচিত্র করুন এবং তারপরে এটি স্যুইচ করুন:

#define X(a, b) (!!(a) * 2 + !!(b))
switch(X(A, B)) {
case X(0, 0):
    ...
    break;
case X(0, 1):
    ...
    break;
case X(1, 0):
    ...
    break;
case X(1, 1):
    ...
    break;
}
#undef X

1

ফাংশন পয়েন্টারযুক্ত একটি সারণী কিছু পরিস্থিতিতে ভাল কাজ করতে পারে। সিতে, উদাহরণস্বরূপ, আপনি এর মতো কিছু করতে পারেন:

typedef void(*VoidFunc)(void);

void do(int a, int b)
{
    static VoidFunc myFunctions[4] = {z, z, y, x}; // the lookup table

    VoidFunc theFunction = myFunctions[ a * 2 + b ];
    theFunction();
}

সারণীতে প্রবেশের সংখ্যাটি 2 be n থাকতে হবে যেখানে এন ইনপুটগুলির সংখ্যা হ'ল এটি ইনপুটগুলির সংখ্যা তুলনামূলকভাবে কম হলে এটি একটি ভাল সমাধান। 7 বা 8 ইনপুটগুলি পরিচালনাযোগ্য হতে পারে, 10 বা 12 টি কুরুচিপূর্ণ হতে শুরু করে। আপনার যদি এমন অনেকগুলি ইনপুট থাকে তবে প্রথমে অন্য উপায়ে (যেমন কর্নোখের মানচিত্রগুলি) সহজ করার চেষ্টা করুন।


0

"গর্জিয়াস কর্নোহো" সফ্টওয়্যারটি দেখুন - এটি সত্য নমুনাটিকে আপনার নমুনার মতো ঠিক গ্রহণ করতে পারে, বিশ্লেষণী বুলিয়ান সূত্র সংজ্ঞা গ্রহণ করতে পারে, সত্য টেবিলগুলি তৈরি করতে লুয়া স্ক্রিপ্টিং গ্রহণ করতে পারে। এরপরে, "গর্জিয়াস কর্নহোহ" সফ্টওয়্যারটি নেওয়া ইনপুটটির জন্য কে-ম্যাপস আঁকেন, যা আপনি ম্যানুয়ালি বা "এসপ্রেসো" লজিক মিনিমাইজার ব্যবহার করতে পারেন এবং সি / সি ++ এবং কিছু হার্ডওয়্যার ভাষার জন্য আউটপুট উত্পাদন করে। "গর্জিয়াস কর্নোহো" - এর জন্য সংক্ষিপ্ত বৈশিষ্ট্যগুলির পৃষ্ঠাটি দেখুন - http://purefractalsolutions.com/show.php?a=xgk/gkm


এটি দেখতে আমার যা প্রয়োজন তা অনেকটা দেখতে, কিন্তু ifসত্যের টেবিলে প্রবেশের পরে খালি গুলি ছাড়া অন্য কোনও কিছু দেখানোর জন্য সি / সি ++ কোড পাইনি ।
হুয়ান

হ্যাঁ, সেই সরঞ্জামটি লজিক ফাংশন হ্রাস করার জন্য ডিজাইন করা হয়েছে - সত্য সারণীতে প্রবেশের পরে আপনাকে লজিক ফাংশনটি ন্যূনতম করতে হবে (পিওএস / এসওপি - 0 / বাই 1 দ্বারা)। সি ++ কোড হ্রাস করার পরে "মিনিমাইজেশন ফলাফল" উইন্ডোতে পাওয়া যাবে।
পেট্রুচিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.