NAND গেটগুলি ব্যবহার করে একটি 4-ভার্টেক্স সংযুক্তি পরীক্ষক তৈরি করুন


12

একটি সংযুক্ত গ্রাফ গ্রাফ যে কোনো দু'রকমের মধ্যে একটি পাথ থাকে।

চ্যালেঞ্জ

একটি [2-ইনপুট NAND-গেট] সার্কিট তৈরি করুন যা 4-ভার্টেক্স গ্রাফটি সংযুক্ত কিনা তা নির্ধারণ করে।
(একটি গেট এর 2 ইনপুট করতে পারেন একই ইনপুট বিট বা অন্যান্য গেট হতে।)
আউটপুট যদি সত্য হয় গ্রাফ সংযুক্ত করা হয়, এবং মিথ্যা অন্যথায়।

ইনপুট

একটি সাধারণ গ্রাফের ছয়টি সম্ভাব্য প্রান্ত যা 4 টি শীর্ষ দ্বি দিয়ে:

[ 01 , 02 , 12 , 03 , 13 , 23 ]

যেখানে একটি প্রতিনিধিত্ব করে সেখানে ছেদচিহ্ন মধ্যে একটি প্রান্ত কিনা একটি এবং

সংযোগটি নিম্নলিখিত শর্তের সমতুল্য:

  • যদি 3 টিরও কম ইনপুট সত্য হয় তবে ফলস ফলস।

  • যদি 3 টিরও বেশি ইনপুট সত্য হয় তবে আউটপুট সত্য।

  • ঠিক যদি 3 ইনপুট সত্য হয় এবং সেগুলি একটি ত্রিভুজ তৈরি করে তবে ফলস ফলস।

  • অন্যথায়, আউটপুট সত্য।

উত্তর যে কয়েকটি গেট জিততে পারে তা জয় করে। বন্ধনগুলি
সর্বনিম্ন সার্কিট গভীরতায় (ইনপুট থেকে আউটপুট পর্যন্ত দীর্ঘতম পাথের দৈর্ঘ্য) দ্বারা বিচ্ছিন্ন হবে ।


আপনি কি আরও ইনপুট ফর্ম্যাট নির্দিষ্ট করতে পারবেন?
LegionMammal978

iej কিনা তা ব্যবহারকারীকে অথবা একটি নয় অনুযায়ী সত্য বা মিথ্যা প্রান্ত থেকে প্রান্তবিন্দু আমি প্রান্তবিন্দু ঞ।

ইনপুট হিসাবে নেওয়া যেতে পারে 0এবং 1? আউটপুট কেমন?
দ্য কফিকপ

3
@ দ্য কফিকুপ এটি কোডিক গল্ফ নয়, একটি লজিক সার্কিট ডিজাইনের সমস্যা ।
lirtosiast

@ থমাসকওয়া ওফস, খেয়াল করেনি।
দ্য কফিকপ

উত্তর:


4

30 ন্যানডেস

আমরা কখন একটি 1 পাব তা জিজ্ঞাসার পরিবর্তে, আমি কখন 0 পাই কখনই আমি প্রশ্নটি জিজ্ঞাসা করি 1 কারণ এটি 1 এর চেয়ে 0 কম রয়েছে round

প্রান্ত সংখ্যা অনুসারে বিতরণ এখানে রয়েছে (প্যাসকের ত্রিভুজটির 6th ষ্ঠ সারি)

Edges     0  1  2  3  4  5  6
Frequency 1  6 15 20 15  6  1 (total 64)
Output    0  0  0  *  1  1  1
* = 0 if triangle (4 possibilities) 1 if claw (4 possibilities) 
1 if two opposite edges and one other (12 possibilities)

এইভাবে প্রশ্নটি জিজ্ঞাসা করে, আমরা নিম্নলিখিত চিত্র এবং এক্সপ্রেশন পেয়েছি

 ___D___
|\     /|
| E   F |
|  \ /  |
A   X   C
|  / \  |
| /   \ |
|/__B__\|

(A|C|D|B)&(A|D|E)&(D|B|E|F)&(C|B|E)&(A|C|E|F)&(D|F|C)&(A|F|B) 

আমরা ধরে নিই যে আউটপুটটি 1 এ ডিফল্ট হবে তবে নিম্নলিখিত অবস্থার যে কোনও একটিতে 0 এ পরিবর্তিত হবে

তিনটি সংলগ্ন প্রান্তের জন্য 1.এ 0 (পরীক্ষা 3 ইনপুট)

2.একটি দুটি প্রকার বিরোধী জোড়ের জন্য (পরীক্ষার 4 ইনপুট)

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

((A|D)|((C|B)&E))&((B|E)|((D|F)&C))&((C|F)|((A|E)&D))&(A|F|B)    =6 inverters
   1      1  1       1      1  1       1      1  1      1        =10 (7 OR with both inputs inverted, 3 NAND)
      2                 2                 2               2      =8  (4 OR with one input inverted)
                 2                 2                 2           =6  (3 AND) 
                                                        Total    =30

প্রতিটি &বা এর জন্য স্কোর |প্রতীক নীচে স্থাপন করা হয় এবং নীচে ন্যায়সঙ্গত:

স্তর 0: আমরা প্রতিটি ইনপুট জন্য একটি বৈদ্যুতিন সংকেতের মেরু বদল বিনিয়োগ: 6 ন্যানডেস

স্তর 1: আমরা ইনপুটটিতে একটি ইনভার্টার লাগিয়ে একটি NAND গেট থেকে একটি ওআর তৈরি করতে পারি (মোট 3 ন্যানডস) তবে আমরা ইতিমধ্যে পূর্ববর্তী ধাপে 6 ন্যানডে বিনিয়োগ করেছি আমরা 7 ন্যান্ড গেট থেকে 7 বা গেট তৈরি করতে পারি। আমাদের 3 ও গেটও দরকার। এগুলির জন্য, আমরা কেবল ন্যানড ব্যবহার করব এবং আউটপুটটিকে উল্টে ছেড়ে দেব। 10 ন্যানডেস

স্তর 2: আবার আমরা ন্যান্ড গেটগুলি থেকে 4 বা গেটগুলি তৈরি করি। প্রতিটি ক্ষেত্রে আমাদের কাছে একটি ওআর গেট থেকে 1 টি ইনপুট রয়েছে, সুতরাং আমাদের এটি উল্টাতে হবে। তবে অন্য ইনপুটটি ইতিমধ্যে উল্টানো হয়েছে (পূর্ববর্তী ধাপে এনএএনডিগুলির মধ্যে একটি থেকে আগত যা &তিনটি ক্ষেত্রে একটি চিহ্নের সাথে মিলে যায়, এবং শেষটির একটি ইনভার্টার থেকে) সুতরাং আমাদের প্রতিটি বা কার্যকারিতার জন্য কেবল দুটি গেট প্রয়োজন। 4 * 2 = 8

স্তর 3: আমাদের এখন চারটি আউটপুট একসাথে করা দরকার। এর জন্য 3 এবং 2 টি গেট প্রয়োজন, প্রতিটি 2 এনএন্ড, 3 * 2 = 6 থেকে নির্মিত

এটি |স্তরের 1 বা 3 + 1 + 4 = 8 স্তরের 1 স্তরের শাখাগুলির জন্য 2 + 2 + 4 = 8 ন্যানডের সর্বোচ্চ গভীরতার সাথে মোট 30 ন্যান্ড গেট &

নিম্নলিখিত রুবি স্ক্রিপ্ট দৃষ্টিভঙ্গি নিশ্চিত করে যে উপরের অভিব্যক্তিটি বৈধ।

64.times{|i|
  a=i%2
  b=i/2%2
  c=i/4%2
  d=i/8%2
  e=i/16%2 
  f=i/32%2

puts i, ((a|d)|((c|b)&e))&((b|e)|((d|f)&c))&((c|f)|((a|e)&d))&(a|f|b)

puts " ___#{d}___
|\\     /|
| #{e}   #{f} |
|  \\ /  |
#{a}   X   #{c}
|  / \\  |
| /   \\ |
|/__#{b}__\\|


"
}

7

19 ন্যান্ড

এর চেয়ে সহজ সরল কোন সার্কিট নেই।

ছবির নীচে এটি পরীক্ষার জন্য কোড রয়েছে। এটি বোঝার জন্য, এটি কঠিন। সেখানে কয়েকটি দু'টি গেট রয়েছে এবং ইনপুটগুলি বিশ্লেষণের জন্য এক এক করে মুক্ত কোণার লাইন যুক্ত করে একটি ত্রিভুজের মধ্যে বিভক্ত করা হয়, তবে সরল উপায়ে নয়। কেউ যদি এটি বুঝতে সক্ষম হন তবে আমি মুগ্ধ হব।

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

পরীক্ষার সাথে ভেরিলোগ কোড:

// 4-vertex Connectedness Tester                                                                  
// Minimal at 19 NANDs                                                                            
//                                                                                                
// By Kim Øyhus 2018 (c) into (CC BY-SA 3.0)                                                      
// This work is licensed under the Creative Commons Attribution 3.0                               
// Unported License. To view a copy of this license, visit                                        
// https://creativecommons.org/licenses/by-sa/3.0/                                                
//                                                                                                
// This is my entry to win this Programming Puzzle & Code Golf                                    
// at Stack Exchange:                                                                             
// /codegolf/69912/build-a-4-vertex-connectedness-tester-using-nand-gates/                                                                                      
//                                                                                                
// I am sure there are no simpler solutions to this problem.                                      
// It has a logical depth of 11, which is deeper than                                             
// circuits using a few more NANDs.                                                               

module counting6 ( in_000, in_001, in_002, in_003, in_004, in_005, in_006, out000 );
  input  in_000, in_001, in_002, in_003, in_004, in_005, in_006;
  output out000;
  wire   wir000, wir001, wir002, wir003, wir004, wir005, wir006, wir007, wir008, wir009, wir010, wir011, wir012, wir013, wir014, wir015, wir016, wir017;

  nand gate000 ( wir000, in_000, in_000 );
  nand gate001 ( wir001, in_001, in_003 );
  nand gate002 ( wir002, wir001, wir000 );
  nand gate003 ( wir003, in_002, wir002 );
  nand gate004 ( wir004, wir002, wir002 );
  nand gate005 ( wir005, wir004, in_002 );
  nand gate006 ( wir006, wir005, wir004 );
  nand gate007 ( wir007, in_005, wir006 );
  nand gate008 ( wir008, in_003, wir006 );    
  nand gate009 ( wir009, in_004, wir003 );
  nand gate010 ( wir010, wir003, wir009 );
  nand gate011 ( wir011, wir009, wir000 );
  nand gate012 ( wir012, wir011, in_001 );
  nand gate013 ( wir013, wir008, wir012 );
  nand gate014 ( wir014, wir013, in_005 );
  nand gate015 ( wir015, wir006, wir013 );
  nand gate016 ( wir016, wir015, wir007 );
  nand gate017 ( wir017, wir016, wir010 );
  nand gate018 ( out000, wir014, wir017 );
endmodule


module connecting6_test;
   reg [5:0] X;
   wire a;

  counting6 U1 (
  .in_000 (X[0]),
  .in_001 (X[1]),
  .in_002 (X[2]),
  .in_003 (X[3]),
  .in_004 (X[4]),
  .in_005 (X[5]),
  .in_006 (X[6]),
  .out000 (a )
  );

  initial begin
    X = 0;
  end

  always
    #10  X = X+1;

 initial  begin
    $display("\t\t     \t_");
    $display("\t\ttime,\t \\db/_,\tconnected");
    $monitor("%d,\t%b,\t%d",$time, X, a );
  end

  initial
   #630  $finish;

endmodule

// iverilog -o hello hello.v                                                                      
// vvp hello                                                                                      

কিম আইহুস


আপনি এই ন্যূনতম প্রমাণ করেছেন, এবং যদি তাই হয় কিভাবে?
26:25

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

1

গণিত, 17 গেট g

আমরা কেবল সমস্ত নিয়ম গণনা করি, বুলিয়ান ফাংশনটি NANDতৈরি করি এবং আকারে এটি হ্রাস করি ।

#->If[Total@#<3||
       MemberQ[{{1,1,1,0,0,0},{1,0,0,1,1,0},{0,1,0,1,0,1},{0,0,1,0,1,1}},#]
       ,0,1] /.{1->True,0->False}& /@
     Tuples[{0,1},6];
BooleanMinimize[BooleanFunction[rule], "NAND"]

ফলাফল :

(#1⊼#2⊼#4)⊼(#1⊼#2⊼#5)⊼(#1⊼#2⊼#6)⊼(#1⊼#3⊼#4)⊼ \
(#1⊼#3⊼#5)⊼(#1⊼#3⊼#6)⊼(#1⊼#4⊼#6)⊼(#1⊼#5⊼#6)⊼ \
(#2⊼#3⊼#4)⊼(#2⊼#3⊼#5)⊼(#2⊼#3⊼#6)⊼(#2⊼#4⊼#5)⊼ \
(#2⊼#5⊼#6)⊼(#3⊼#4⊼#5)⊼(#3⊼#4⊼#6)⊼(#4⊼#5⊼#6)&

, যেখানে #1...#6আর্গুমেন্টের জন্য 6 স্লট।


পরীক্ষার কেস :

f=%; (* assign the function to symbol f *)

f[True, True, True, True, False, False]
(* True *)

f[True, True, False, True, False, False]
(* True *) (*, three Trues do not form a triangle *)

f[True, True, True, False, False, False]
(* False *) (*, three Trues form a triangle *)

পাকির মানে কি not (p&q&r)? আপনার ফলাফলের চূড়ান্ত & অর্থ কী?

@ রিকিডিমার হ্যাঁ, এর p⊼q⊼rঅর্থ (p⊼q)⊼r, যা সমান !(p&&q&&r)
এনজিপিপোরগান

মিথ্যা, মিথ্যা, সত্য প্রদর্শিত হয় প্লাগিং দেখাতে হবে যে (p⊼q)⊼rসমমানের নয় !(p&&q&&r)

@ রিকিডিমার এটি একটি সমস্যা ... আমি এটিকে সম্মতি দিয়েছি।
njpipeorgan

এছাড়াও, কমপক্ষে বুলিয়ান মিনিমাইজ [এক্সপ্রেস, "নান্দ"] এর ওল্ফ্রামাল্ফা সংস্করণে ন্যাংএসের সংখ্যা অগত্যা হ্রাস করা উচিত নয় । (বুলিয়ান মিনিমাইজ করুন চেষ্টা করুন [(((একটি ন্যান্ড বি) নান্দ (সি নান্দ ডি)) নান্দ ((ই নান্দ চ) নান্দ (জি ন্যান্ড এইচ))), "নান্দ"]।) ম্যাথামেটিকায় কি এটি চালানো আউটপুট দেয়? সর্বাধিক 7 ন্যানডস সহ?

1

64 ন্যান্ড

ছয়টি প্রান্তটি তিনটি বিপরীত প্রান্তে বিভক্ত হতে পারে। কোনও গ্রাফ সংযুক্ত হওয়ার জন্য, দুটি বিপরীত প্রান্তের পাশাপাশি তৃতীয় প্রান্ত অবশ্যই হবে বা একই প্রান্তের সাথে তিনটি প্রান্ত যুক্ত থাকতে হবে।

       •
       U

   Z   •   Y  
    V     W 
 •     X     •

বিপরীত জোড়গুলি হ'ল ইউএক্স, ভিওয়াই, ডাব্লুজেড, তাই:

A = U+V   ;3 gates
B = W+X
C = Y+Z

D = UV(B+C)  ;2+2+3=7 gates
E = WX(A+C)
F = YZ(C+A)

Result = D+E+F+UVW+UYZ+XVZ+XWY ; 18 + 16 = 34 gates

স্বাভাবিক ভাবে ওপরে ওআর গেটগুলি তৈরি করা হয়, ব্যবহৃত মোট গেটের সংখ্যা 3*3+7*3+34= 64।


[সত্য, সত্য, মিথ্যা, সত্য, মিথ্যা, মিথ্যা] কোনও বিপরীত প্রান্ত ছাড়াই একটি সংযুক্ত গ্রাফ দেয়।

@ রিকিডিমার আমার মনে হয় এটি এখন কাজ করে ...
লিটারোসিয়াসট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.