বাইনারি গাছ
বাইনারি ট্রি একটি গাছ যা তিন ধরণের নোডযুক্ত:
- টার্মিনাল নোড, যার কোনও সন্তান নেই
- unary নোড, যার প্রতিটি একটি করে সন্তান রয়েছে
- বাইনারি নোড, যার দুটি করে বাচ্চা থাকে
আমরা বিএনএফ (ব্যাকাস us নওর ফর্ম) এ প্রদত্ত নিম্নলিখিত ব্যাকরণের সাথে তাদের প্রতিনিধিত্ব করতে পারি :
<e> ::=
<terminal>
| <unary>
| <binary>
<terminal> ::=
"0"
<unary> ::=
"(1" <e> ")"
<binary> ::=
"(2" <e> " " <e> ")"
এই ব্যাকরণে নোডগুলি পূর্ব অর্ডারে দেওয়া হয় এবং প্রতিটি নোড এমন একটি অঙ্ক দ্বারা উপস্থাপিত হয় যা এটির সংখ্যা বাচ্চাদের।
মোটজকিন নম্বর
মোটজকিন সংখ্যা ( ওইআইএস ) ( উইকিপিডিয়া ) এর অনেকগুলি ব্যাখ্যা রয়েছে, তবে একটি ব্যাখ্যা হ'ল n
মটজকিন সংখ্যাটি নোডযুক্ত স্বতন্ত্র বাইনারি গাছের সংখ্যা n
। মোটজকিন সংখ্যার একটি টেবিল শুরু হয়
N Motzkin number M(N)
1 1
2 1
3 2
4 4
5 9
6 21
7 51
8 127
...
যেমন M(5)
9, এবং 5 টি নোড সহ নয়টি স্বতন্ত্র বাইনারি গাছ রয়েছে are
1 (1 (1 (1 (1 0))))
2 (1 (1 (2 0 0)))
3 (1 (2 0 (1 0)))
4 (1 (2 (1 0) 0))
5 (2 0 (1 (1 0)))
6 (2 0 (2 0 0))
7 (2 (1 0) (1 0))
8 (2 (1 (1 0)) 0)
9 (2 (2 0 0) 0)
কার্য
n
ইনপুট হিসাবে একটি একক ধনাত্মক পূর্ণসংখ্যা নিন এবং n
নোডগুলি সহ পৃথক সমস্ত বাইনারি গাছগুলি আউটপুট দেয় ।
n
পাঠযোগ্যতার জন্য প্রথম বন্ধনী সহ 1 থেকে 5 পর্যন্ত উদাহরণ Ex
0
(1 0)
(1 (1 0))
(2 0 0)
(1 (1 (1 0)))
(1 (2 0 0))
(2 0 (1 0))
(2 (1 0) 0)
(1 (1 (1 (1 0))))
(1 (1 (2 0 0)))
(1 (2 0 (1 0)))
(1 (2 (1 0) 0))
(2 0 (1 (1 0)))
(2 0 (2 0 0))
(2 (1 0) (1 0))
(2 (1 (1 0)) 0)
(2 (2 0 0) 0)
ইনপুট
ইনপুটটি একটি ইতিবাচক পূর্ণসংখ্যা হবে।
আউটপুট
আউটপুটটি এমন অনেকগুলি নোডের সাথে স্বতন্ত্র বাইনারি গাছগুলির একটি স্বতন্ত্র উপস্থাপনা হওয়া উচিত। উপরের বিএনএফ ব্যাকরণ দ্বারা প্রদত্ত সঠিক স্ট্রিংটি ব্যবহার করা বাধ্যতামূলক নয়: ব্যবহৃত সিনট্যাক্সগুলি গাছের একটি দ্ব্যর্থহীন প্রতিনিধিত্ব করে sufficient যেমন আপনি ব্যবহার করতে পারে []
পরিবর্তে ()
, বন্ধনী একটি অতিরিক্ত স্তর [[]]
পরিবর্তে []
, বাইরের প্রথম বন্ধনী, বর্তমান বা অনুপস্থিত অতিরিক্ত কমা বা কোন কমা, অতিরিক্ত স্পেস, প্রথম বন্ধনী বা কোন প্রথম বন্ধনী, ইত্যাদি
এই সমস্ত সমতুল্য:
(1 (2 (1 0) 0))
[1 [2 [1 0] 0]]
1 2 1 0 0
12100
(1 [2 (1 0) 0])
.:.--
*%*55
(- (+ (- 1) 1))
-+-11
@ Xnor দ্বারা একটি মন্তব্যে প্রণীত একটি প্রকরণ। যেহেতু কোনও ফর্ম্যাটে এটি অনুবাদ করার একটি উপায় রয়েছে যা এটি বোঝা যায় এটি গ্রহণযোগ্য।
[[[]][]] is (2 (1 0) 0)
এই সহজ কিছু রূপান্তর বুঝতে করতে []
করতে ()
তাই মত
[([])()]
এখন আপনি যদি শুরু
[]
তারপরে একটি বাইনারি সন্নিবেশ করুন যা আপনার কাছে দুটি অভিব্যক্তি দরকার
[()()] which is 2
এবং তারপরে প্রথম () এর জন্য একটি আনারি সন্নিবেশ করান যার জন্য আপনার কাছে পাওয়া একটি এক্সপ্রেশন প্রয়োজন
[([])()] which is 21
তবে যেহেতু []
বা ()
কোনও অভ্যন্তরীণ বন্ধনীর সাথে 0 টি প্রতিনিধিত্ব করতে পারে যা আপনাকে এর মতো ব্যাখ্যা করতে পারে এমন আর কোনও এক্সপ্রেশন নেই
2100
নোট করুন যে উত্তরগুলি তাত্ত্বিকভাবে অসীম মেমরির সাথে কাজ করতে পারে তবে বাস্তবায়ন-নির্ভর সসীম ইনপুটটির জন্য স্পষ্টতই স্মৃতিশক্তি শেষ হয়ে যাবে।
আউটপুট এর বিভিন্নতা
BNF xnor Christian Ben
b(t, b(t, t)) [{}{{}{}}] (0(00)) (1, -1, 1, -1)
b(t, u(u(t))) [{}{(())}] (0((0))) (1, -1, 0, 0)
b(u(t), u(t)) [{()}{()}] ((0)(0)) (1, 0, -1, 0)
b(b(t, t), t) [{{}{}}{}] ((00)0) (1, 1, -1, -1)
b(u(u(t)), t) [{(())}{}] (((0))0) (1, 0, 0, -1)
u(b(t, u(t))) [({}{()})] ((0(0))) (0, 1, -1, 0)
u(b(u(t), t)) [({()}{})] (((0)0)) (0, 1, 0, -1)
u(u(b(t, t))) [(({}{}))] (((00))) (0, 0, 1, -1)
u(u(u(u(t)))) [(((())))] ((((0)))) (0, 0, 0, 0)
সদৃশ গাছগুলির জন্য চেক করার একটি সম্ভাব্য জায়গা
সদৃশটি পরীক্ষা করার জন্য একটি জায়গা এম (5) এর সাথে রয়েছে।
এই গাছটি এম (4) টি গাছ থেকে এম (5) এর জন্য দু'বার তৈরি হয়েছিল
(2 (1 0) (1 0))
প্রথমটিতে একটি অখণ্ড শাখা যুক্ত করে
(2 (1 0) 0)
এবং দ্বিতীয়টিতে একটি আনরি শাখা যুক্ত করে
(2 0 (1 0))
বিএনএফ বোঝা
বিএনএফ সহজ বিধি দ্বারা গঠিত:
<symbol> ::= expression
যেখানে বাম দিকে ঘেরা একটি প্রতীক নাম <>
।
ডানদিকে প্রতীকটি নির্মাণের জন্য অভিব্যক্তি। কিছু বিধি নির্মাণে অন্যান্য বিধি ব্যবহার করে, যেমন
<e> ::= <terminal>
e
হতে পারে একটি terminal
এবং কিছু নিয়মের অক্ষর রয়েছে যা চিহ্ন তৈরিতে ব্যবহৃত হয়, যেমন
<terminal> ::= "0"
terminal
শুধু শূন্য চরিত্র।
কিছু নিয়মের এগুলি নির্মাণের একাধিক উপায় রয়েছে, যেমন
<e> ::=
<terminal>
| <unary>
| <binary>
একটি e
একটি <terminal>
বা একটি <unary>
বা একটি হতে পারে <binary>
।
এবং কিছু বিধি অংশের ক্রম, যেমন
<unary> ::= "(1" <e> ")"
একটি unary
অক্ষর (1
কি নির্মাণ করা যেতে পারে দ্বারা অনুসরণ e
দ্বারা অনুসরণ )
।
আপনি সর্বদা শুরু করার নিয়ম দিয়ে শুরু করেন, এটি এর জন্য <e>
।
কয়েকটি সহজ উদাহরণ:
সরল ক্রমটি ঠিক 0
। সুতরাং আমরা শুরু করার নিয়মটি দিয়ে শুরু করি <e>
এবং দেখুন যে তিনটি পছন্দ রয়েছে:
<terminal>
| <unary>
| <binary>
সুতরাং প্রথম এক নিতে <terminal>
। এখন একটি টার্মিনালের কোনও পছন্দ নেই এবং তা 0
। তাই প্রতিস্থাপন <terminal>
সঙ্গে 0
এ <e>
নিয়ম এবং আপনার কাজ সম্পন্ন করা হয়।
তার পরেরটি হ'ল (1 0)
। যা আছে তার সাথে শুরু করুন <e>
এবং ব্যবহার করুন<unary>
"(1" <e> ")"
এখন এটির একটি দরকার <e>
তাই আমরা ফিরে যাব <e>
এবং তিনজনের মধ্যে একটিকে বেছে নেব, এবার নির্বাচন করা, <terminal>
যা দেয় 0
। প্রতিস্থাপন করা হচ্ছে 0
মধ্যে (1 <e> )
দেয় (1 0)
, এবং এই প্রতিস্থাপিত হয় মধ্যে <unary>
তাই <e>
হয় (1 0)
।