সরাসরি পর্বে যান
পর্ব ৬৩ · ৮৩-এর মধ্যে · মডিউল ১০

Graph coloring — chromatic number, scheduling আর চার রঙের উপপাদ্য

Graph Colouring — Chromatic Number, Greedy Bounds, Scheduling, the Five- and Four-Colour Theorems and the Chromatic Polynomial

Taught in Bangla, this lesson defines proper colourings and the chromatic number, proves ω(G) ≤ χ(G) ≤ Δ(G) + 1 and states Brooks' theorem. It shows greedy colouring needing n colours on a crown graph, applies colouring to exam timetables, registers and Sudoku, proves the five-colour theorem with Kempe chains and explains the computer-assisted four-colour proof. Chromatic polynomials follow by deletion–contraction. In-page Python compares greedy with exact colouring and computes chromatic polynomials.

এই পর্বে যা শিখবেন

  • Proper colouring, chromatic number আর Kn, cycle, wheel ও bipartite graph-এর χ প্রমাণসহ
  • ω ≤ χ, χ ≥ n/α আর χ ≤ Δ + 1-এর প্রমাণ; Brooks-এর উপপাদ্যের বক্তব্য
  • Greedy colouring কেন ক্রমের ওপর নির্ভর করে, crown graph-এর ফাঁদ আর Welsh–Powell-এর সীমা
  • ছয় আর পাঁচ রঙের উপপাদ্যের সম্পূর্ণ প্রমাণ, Kempe-র ভুল আর চার রঙের উপপাদ্যের ইতিহাস
  • Chromatic polynomial-এর deletion–contraction সূত্র, tree আর cycle-এর সূত্রের প্রমাণ, আর scheduling-এ প্রয়োগ

১ · রং করার সমস্যা — proper colouring আর chromatic number

বাজারঘর তার কর্মীদের জন্য সাতটি প্রশিক্ষণ চালায়: Excel, Packing, Safety, Rider, Cash, Stock আর Service. প্রতিটি প্রশিক্ষণের শেষে একটি পরীক্ষা। একজন কর্মী দুটি প্রশিক্ষণে থাকলে সেই দুটির পরীক্ষা একই সময়ে রাখা যায় না। প্রশ্ন: সবচেয়ে কম কয়টি সময়-স্লটে সব পরীক্ষা নেওয়া যায়?

স্কুলের পরীক্ষার রুটিন বানানোর সময় শিক্ষকেরা ঠিক এই কাজটি করেন: যে দুটি বিষয় একই শিক্ষার্থী নেয়, সেগুলো একই দিনে নয়। প্রতিটি বিষয়কে একটি বিন্দু, আর “একসাথে রাখা যাবে না” সম্পর্ককে একটি রেখা ধরলে রুটিন মানে বিন্দুগুলোকে দিনের নাম দিয়ে “রং” করা, যাতে কোনো রেখার দুই মাথায় একই দিন না পড়ে।

এভাবে পাওয়া graph-কে বলে conflict graph: প্রতিটি প্রশিক্ষণ একটি vertex, আর দুটি প্রশিক্ষণে অন্তত একজন সাধারণ কর্মী থাকলে তাদের মধ্যে একটি edge. নিচের সারণিতে আটজন কর্মীর ভর্তি (কাল্পনিক), আর ছবিতে তার conflict graph.

কর্মীপ্রশিক্ষণকর্মীপ্রশিক্ষণ
রাফিE, SতানিমK, R
মিতুE, C, Kজয়াV, E
সজীবR, SআরিফP, S, C
নীলাC, VলিমাP, K

বাজারঘরের প্রশিক্ষণ-পরীক্ষার conflict graph, ৩টি স্লটে রং করা

E Excel · P Packing · S Safety · R Rider · C Cash · K Stock · V Service. একই রঙের দুটি বৃত্তের মধ্যে কোনো রেখা নেই, তাই তাদের পরীক্ষা একই স্লটে রাখা যায়।

Conflict graph of seven trainings with a proper 3-colouring: blue C and R, green E and P, yellow K, S and V CRE PKSV নীল = স্লট ১: C, R · সবুজ = স্লট ২: E, P হলুদ = স্লট ৩: K, S, V
সংজ্ঞা ১.১ (proper colouring, chromatic number)

G = (V, E) একটি loop-হীন undirected graph (parallel edge থাকলেও ফল বদলায় না, তাই সাধারণত simple graph ধরা হয়)। একটি k-colouring হলো একটি ফাংশন c : V → {1, 2, …, k}, যাতে প্রতিটি edge uv-এর জন্য c(u) ≠ c(v). এমন c-কে বলে proper colouring, আর এমন c থাকলে G হলো k-colourable. সবচেয়ে ছোট যে k-তে G k-colourable, সেটিই G-এর chromatic number χ(G).

একই রঙের সব vertex মিলে একটি colour class. কোনো দুটি একই রঙের vertex পাশাপাশি নয়, তাই প্রতিটি colour class একটি independent set (যাদের কোনো দুজনের মধ্যে edge নেই)। সুতরাং একটি k-colouring মানে V-কে বড়জোর k টি independent set-এ ভাগ করা: পর্ব ৫৫-এর partition-এর ভাষায়, প্রতিটি ব্লক independent. Loop থাকলে কোনো proper colouring নেই (একটি vertex নিজের প্রতিবেশী), তাই loop বাদ।

উপপাদ্য ১.২ (চেনা graph-এর χ)

(ক) χ(Kn) = n. (খ) n ≥ 3-এর cycle Cn-এ χ = 2, যদি n জোড়; χ = 3, যদি n বিজোড়। (গ) অন্তত একটি edge থাকলে χ(G) = 2 ঠিক তখন, যখন G bipartite, অর্থাৎ G-তে কোনো odd cycle নেই। (ঘ) wheel Wn (Cn-এর সঙ্গে সবার সঙ্গে যুক্ত একটি hub)-এ χ = 3, যদি n জোড়; χ = 4, যদি n বিজোড়।

  1. (ক) Kn-এ যেকোনো দুটি vertex পাশাপাশি, তাই সব রং আলাদা হতে হয়: অন্তত n টি। প্রত্যেককে আলাদা রং দিলে n টিতেই হয়। — সংজ্ঞা
  2. (খ) জোড় n: পরপর 1, 2, 1, 2, … দিলে শেষ vertex vn পায় 2, আর তার প্রতিবেশী v1-এর রং 1; সঠিক। একটি edge আছে বলে 1 রঙে হয় না। — নির্মাণ
  3. বিজোড় n: ধরি দুই রঙে হয়। v1-এর রং 1 হলে পাশাপাশি রং বদলাতে হয়, তাই vi-এর রং 1 ঠিক যখন i বিজোড়। n বিজোড়, তাই vn-এর রং 1, অথচ vn আর v1 পাশাপাশি। বিরোধ। তিন রং যথেষ্ট: শেষ vertex-কে 3 দিন। — contradiction
  4. (গ) পর্ব ৫৭ “গ্রাফ — সংজ্ঞা, degree আর handshake theorem”-এ প্রমাণিত: bipartite ⇔ 2-colourable ⇔ odd cycle নেই। দুটি দল মানেই দুটি colour class. — সংজ্ঞার অনুবাদ
  5. (ঘ) Rim-এর Cn-এ (খ)-এর মতো রং দিন; hub সবার প্রতিবেশী, তাই তার জন্য একটি নতুন রং লাগে আর যথেষ্ট: χ(Wn) = χ(Cn) + 1. ∎ — hub-এর কোনো রং rim-এ থাকতে পারে না

লক্ষ করুন, “χ(G) = k” প্রমাণ করতে সবসময় দুটি কাজ: একটি k-colouring দেখানো (ওপরের সীমা), আর k − 1 রঙে যে অসম্ভব তার যুক্তি (নিচের সীমা)। প্রথমটি সহজ, একটি উদাহরণই যথেষ্ট; দ্বিতীয়টিই আসল গণিত। ছবির graph-এ ৩টি রং দেখানো হয়েছে; E, C, K তিনজন পরস্পর যুক্ত (মিতু তিনটিতেই আছেন), তাই ২টিতে অসম্ভব, আর χ = 3.

২ · নিচের আর ওপরের সীমা — clique, independent set আর greedy

সাধারণ graph-এ χ নির্ভুলভাবে বের করা কঠিন (§৮)। তাই আগে দুই দিক থেকে সীমা টানা হয়, ঠিক যেমন মাপার আগে আন্দাজ: “কমপক্ষে এত, বড়জোর এত”।

সংজ্ঞা ২.১ (clique, independence number, maximum degree)

যে vertex-সেটের প্রতিটি জোড়া পাশাপাশি, তা একটি clique; সবচেয়ে বড় clique-এর আকারকে বলে clique number, ω(G). সবচেয়ে বড় independent set-এর আকার independence number, α(G). আর Δ(G) হলো সব vertex-এর degree-এর মধ্যে সবচেয়ে বড়টি।

উপপাদ্য ২.২ (নিচের সীমা)

n টি vertex-এর যেকোনো graph G-তে χ(G) ≥ ω(G) আর χ(G) ≥ ⌈n / α(G)⌉.

  1. একটি clique-এর প্রতিটি জোড়া পাশাপাশি, তাই তার ω টি vertex-এর রং সব আলাদা; ফলে যেকোনো proper colouring-এ অন্তত ω টি রং। — উপপাদ্য ১.২(ক)-এর যুক্তি
  2. একটি χ-colouring-এর colour class V1, …, Vχ সবাই independent, তাই প্রতিটির আকার ≤ α. — α-এর সংজ্ঞা
  3. n = |V1| + ⋯ + |Vχ| ≤ χ · α, তাই χ ≥ n/α, আর χ পূর্ণসংখ্যা বলে ⌈n/α⌉. ∎ — partition-এর আকার যোগ

ওপরের সীমার জন্য একটি পদ্ধতি। Greedy colouring: vertex-গুলোকে কোনো একটি ক্রমে v1, v2, …, vn সাজান; ক্রমানুসারে প্রত্যেককে এমন সবচেয়ে ছোট রং দিন, যা তার আগে রং পাওয়া প্রতিবেশীদের কারও নেই। এটি greedy: একবার রং দিলে আর বদলায় না।

উপপাদ্য ২.৩ (greedy-র সীমা)

যেকোনো ক্রমে greedy colouring সঠিক, আর বড়জোর Δ(G) + 1টি রং ব্যবহার করে। ফলে χ(G) ≤ Δ(G) + 1. আরও নির্দিষ্টভাবে, vi-এর আগে থাকা প্রতিবেশীর সংখ্যা bi হলে greedy ≤ 1 + maxi biটি রং নেয়।

  1. vi-এর পালায় তার রং-পাওয়া প্রতিবেশী bi জন, তারা বড়জোর biটি আলাদা রং আটকায়। — শুধু আগের vertex-এর রং আছে
  2. তাই {1, …, bi + 1}-এর অন্তত একটি রং খালি, আর greedy তার মধ্যে সবচেয়ে ছোটটি দেয়: c(vi) ≤ bi + 1. — pigeonhole-এর সরল রূপ
  3. রং দেওয়ার সময় কোনো আগের প্রতিবেশীর সঙ্গে মেলে না, আর পরের প্রতিবেশী পরে নিজেই এড়িয়ে চলে; তাই প্রতিটি edge-এর দুই প্রান্ত আলাদা। — সঠিকতা
  4. bi ≤ deg(vi) ≤ Δ, তাই সব রং ≤ Δ + 1. ∎

দুটি সীমাই কখনো কখনো ঠিক সমান: Kn-এ ω = χ = Δ + 1 = n, আর odd cycle-এ Δ + 1 = 3 = χ. কিন্তু সাধারণত ফাঁক থাকে। W5-এ ω = 3 (hub আর rim-এর একটি edge), অথচ χ = 4; C5-এ ω = 2, χ = 3. অর্থাৎ বড় clique না থাকলেও বেশি রং লাগতে পারে (প্র ০৩-এ এর চরম রূপ)। ওপরের দিকে প্রায় সব ক্ষেত্রে Δ + 1-এর চেয়ে ভালো করা যায়:

উপপাদ্য ২.৪ (Brooks, ১৯৪১)

G একটি connected simple graph, যা complete graph নয় আর odd cycle-ও নয়। তাহলে χ(G) ≤ Δ(G).

প্রমাণটি দীর্ঘ (একটি বিশেষ ক্রম বেছে greedy চালানো, যাতে শেষ vertex-এর দুটি প্রতিবেশী একই রং পায়); এখানে বাদ রাখা হলো, Diestel বা West-এর graph theory পাঠ্যবইয়ে পাবেন। ব্যবহার দেখুন: Petersen graph (১০টি vertex, ৩-regular) connected, complete নয়, cycle নয়, তাই χ ≤ 3; আর এতে একটি ৫-cycle আছে, তাই χ ≥ 3. ফল χ = 3. এর α = 4, তাই উপপাদ্য ২.২ দেয় শুধু χ ≥ ⌈10/4⌉ = 3, এখানে সেটিও খাপ খায়।

একটি পরীক্ষার অঙ্ক। ১২টি vertex-এর একটি graph-এ α = 3, ω = 3, Δ = 5, আর graph-টি connected, K6 বা odd cycle নয়। χ সম্পর্কে কী বলা যায়? নিচে: ⌈12/3⌉ = 4 আর ω = 3, তাই χ ≥ 4. ওপরে Brooks: χ ≤ 5. অতএব χ ∈ {4, 5}; নির্দিষ্ট উত্তরের জন্য graph-টি দেখতে হবে।

৩ · Greedy-র ক্রম, crown graph আর Welsh–Powell

উপপাদ্য ২.৩ বলে greedy কখনো Δ + 1-এর বেশি রং নেয় না। কিন্তু χ-এর কত কাছে আসে? উত্তর পুরোপুরি ক্রমের ওপর নির্ভর করে, আর দুই দিকেই চরম।

উপপাদ্য ৩.১ (একটি সেরা ক্রম সবসময় আছে)

যেকোনো graph G-এর জন্য vertex-এর এমন একটি ক্রম আছে, যাতে greedy colouring ঠিক χ(G)টি রং ব্যবহার করে।

  1. একটি সেরা colouring নিন, colour class V1, …, Vχ. ক্রম: আগে V1-এর সবাই, তারপর V2-এর সবাই, …, শেষে Vχ. — নির্মাণ
  2. দাবি: Vi-এর প্রতিটি vertex greedy-তে রং পায় ≤ i. i-এর ওপর induction (পর্ব ১০)। — induction-এর কাঠামো
  3. Vi-এর একটি vertex x-এর পালায় আগের প্রতিবেশীরা Vi-এ থাকতে পারে না (Vi independent), তাই তারা V1 ∪ ⋯ ∪ Vi−1-এ, আর hypothesis অনুযায়ী তাদের রং ≤ i − 1. — hypothesis
  4. তাই রং i খালি, আর greedy সবচেয়ে ছোট খালি রং দেয়: c(x) ≤ i. ফলে মোট রং ≤ χ, আর χ-এর চেয়ে কম অসম্ভব। ∎

সমস্যা হলো, এই ক্রম বানাতে আগেই একটি সেরা colouring জানা লাগে। অচেনা ক্রমে কী হতে পারে, তা দেখায় crown graph Sn: দুই দল a1, …, an আর b1, …, bn; ai আর bj যুক্ত ঠিক তখন, যখন i ≠ j. এটি Kn,n থেকে n টি “নিজের জোড়া” edge সরানো, তাই bipartite, χ = 2.

Crown graph S4: ৮টি vertex, ১২টি edge

ওপরের সারি a-দল, নিচের সারি b-দল। ai নিজের নিচের bi ছাড়া b-দলের বাকি সবার সঙ্গে যুক্ত। দুই দলকে দুই রং দিলেই হয়।

Crown graph S4: a_i is joined to b_j exactly when i differs from j a1a2a3a4 b1b2b3b4 ai — bj যুক্ত শুধু i ≠ j হলে
1ক্রম ১: a1 b1 a2 b2 …2a1, b13a2, b24a3, b35a4, b4: ৪টি রং6ক্রম ২: a1 a2 a3 a47b1 b2 b3 b4: ২টি রং
রং (– = এখনো রংহীন)
a1..a4
b1..b4
আটকানো
  1. খারাপ ক্রম। জোড়ায় জোড়ায়: a1, b1, a2, b2, a3, b3, a4, b4. সবাই রংহীন।
  2. a1 আর b1. a1-এর কোনো প্রতিবেশী রং পায়নি, তাই 1. b1-এর প্রতিবেশী a2, a3, a4, কিন্তু a1 নয়, তাই b1-ও পায় 1.
  3. a2 আর b2. a2-এর রং-পাওয়া প্রতিবেশী b1 (1), তাই 2. b2-এর রং-পাওয়া প্রতিবেশী a1 (1); a2 তার প্রতিবেশী নয়, তাই b2 পায় 2.
  4. a3 আর b3. a3 দেখে b1 = 1, b2 = 2, তাই 3. b3 দেখে a1 = 1, a2 = 2, তাই 3.
  5. a4 আর b4. দুজনেই 1, 2, 3 আটকানো দেখে, তাই 4. মোট ৪টি রং, অথচ χ = 2: প্রতিটি ai, bi জোড়া একই রং পেয়ে পরের সবাইকে নতুন রঙে ঠেলে দেয়।
  6. ভালো ক্রম। আগে পুরো a-দল: a-রা পরস্পর যুক্ত নয়, তাই সবাই 1.
  7. তারপর b-দল। প্রতিটি bj-এর রং-পাওয়া প্রতিবেশী শুধু a-রা, সবার রং 1, তাই সবাই 2. মোট ২টি রং = χ. ক্রম বদলালে একই algorithm দ্বিগুণ রং নিয়েছিল।

সাধারণ n-এ একই যুক্তি (i-এর ওপর induction): খারাপ ক্রমে ai-এর আগের প্রতিবেশী b1, …, bi−1, যাদের রং 1, …, i − 1, তাই ai পায় i; bi-এর ক্ষেত্রেও তাই। অর্থাৎ 2n টি vertex-এর একটি bipartite graph-এ greedy n টি রং নেয়: greedy-র ফল আর χ-এর অনুপাত যত খুশি বড় হতে পারে।

ভুলটি ধরুন: “greedy colouring সবসময় সবচেয়ে কম রং দেয়”। Crown graph এই দাবি ভাঙে। প্রায়ই এর সঙ্গে আসে একটি ভুল “প্রমাণ”: “প্রতিটি vertex সবচেয়ে ছোট সম্ভাব্য রং পায়, তাই মোট রংও সবচেয়ে কম।” প্রতিটি ধাপে স্থানীয়ভাবে সেরা বাছাই সামগ্রিকভাবে সেরা হবে, এটি প্রমাণ ছাড়া মেনে নেওয়া যায় না; উপপাদ্য ৩.১ শুধু বলে একটি ভালো ক্রম আছে, যেকোনো ক্রম ভালো নয়।

Welsh–Powell ক্রম। Dominic Welsh আর Martin Powell ১৯৬৭ সালে প্রস্তাব করেন বলে জানা যায়: degree অনুযায়ী বড় থেকে ছোট সাজিয়ে (d1 ≥ d2 ≥ ⋯ ≥ dn) greedy চালান। যুক্তি সহজ: যার প্রতিবেশী বেশি, তার হাতে বিকল্প কম, তাই তাকে আগে রং দিন। নিশ্চয়তাটি এই:

χ(G) ≤ maxi min(di + 1, i)

প্রমাণ। i-তম vertex-এর আগের প্রতিবেশী বড়জোর i − 1 জন (তার আগে মোটে i − 1টি vertex) আর বড়জোর di জন; উপপাদ্য ২.৩-এর যুক্তিতে তার রং ≤ min(di, i − 1) + 1 = min(di + 1, i). ∎ এই সীমা Δ + 1-এর চেয়ে কখনো খারাপ নয়, আর কয়েকটি vertex-এর degree খুব বড় হলে অনেক ভালো। কিন্তু crown graph-এ সবার degree n − 1, ফলে সীমা n, আর জোড়ায় জোড়ায় ক্রমটিও বৈধ Welsh–Powell ক্রম (সমান degree-তে যেকোনো ক্রম চলে)। অর্থাৎ এটি একটি ভালো অনুমাননির্ভর নিয়ম (heuristic), সর্বোত্তমের নিশ্চয়তা নয়। Daniel Brélaz-এর DSatur (১৯৭৯) প্রতি ধাপে “সবচেয়ে বেশি আলাদা রঙের প্রতিবেশী যার” তাকে বাছে, বাস্তবে সাধারণত আরও ভালো করে।

নিচের ব্লক চারটি graph-এ backtracking দিয়ে নির্ভুল χ বের করে, আর greedy-কে সব সম্ভাব্য ক্রমে চালিয়ে (৮টি vertex পর্যন্ত সব n! ক্রম; Petersen-এ ১০! = 3628800টি ক্রম অনেক, তাই ৫০০০টি এলোমেলো ক্রম) সবচেয়ে কম আর বেশি রং দেখায়। প্রথমবার চালালে ব্রাউজারে Python (Pyodide) নামতে কয়েক সেকেন্ড লাগে; পরের ব্লকগুলো দ্রুত চলে।

import random, itertools
random.seed(63)
def greedy(G, order):                   # smallest colour not used by a neighbour
    c = {}
    for v in order:
        used = {c[u] for u in G[v] if u in c}
        c[v] = min(k for k in range(1, len(G) + 2) if k not in used)
    return max(c.values())
def exact_chi(G):                       # backtracking for k = 1, 2, 3, ...
    V = sorted(G, key=lambda v: -len(G[v]))
    def fill(i, c, k):
        if i == len(V): return True
        for col in range(k):
            if all(c.get(u) != col for u in G[V[i]]):
                c[V[i]] = col
                if fill(i + 1, c, k): return True
                del c[V[i]]
        return False
    return next(k for k in range(1, len(G) + 1) if fill(0, {}, k))
def und(edges):
    G = {}
    for a, b in edges:
        G.setdefault(a, set()).add(b); G.setdefault(b, set()).add(a)
    return G
cyc = [(i, (i + 1) % 5) for i in range(5)]
graphs = {'C5': und(cyc), 'W5': und(cyc + [(i, 'h') for i in range(5)]),
          'crown4': und((f'a{i}', f'b{j}') for i in range(4) for j in range(4) if i != j),
          'petersen': und(cyc + [(i, i+5) for i in range(5)] + [(5+i, 5+(i+2) % 5) for i in range(5)])}
for name, G in graphs.items():
    V = sorted(G, key=str)
    orders = itertools.permutations(V) if len(V) <= 8 else (random.sample(V, len(V)) for _ in range(5000))
    counts = [greedy(G, o) for o in orders]
    wp = greedy(G, sorted(V, key=lambda v: -len(G[v])))        # Welsh-Powell order
    D = max(len(G[v]) for v in G)
    print(f"{name:8} chi={exact_chi(G)} Delta+1={D + 1} greedy min={min(counts)} max={max(counts)} WP={wp}")

আসল আউটপুট (ব্রাউজারের Python):

C5       chi=3 Delta+1=3 greedy min=3 max=3 WP=3
W5       chi=4 Delta+1=6 greedy min=4 max=4 WP=4
crown4   chi=2 Delta+1=4 greedy min=2 max=4 WP=2
petersen chi=3 Delta+1=4 greedy min=3 max=4 WP=3

প্রতিটি সারিতে greedy min = χ, ঠিক উপপাদ্য ৩.১-এর কথা: সেরা ক্রম সবসময় আছে। max কখনো Δ + 1 ছাড়ায় না (উপপাদ্য ২.৩)। Crown graph-এ ৮! = 40320টি ক্রমের মধ্যে কোনোটিতে ৪টি রং লাগে, যদিও χ = 2. W5-এ hub-এর degree 5, তাই Δ + 1 = 6, কিন্তু greedy সব ক্রমে ৪-এ থামে: সীমাটি এখানে ঢিলে। exact_chi k = 1, 2, … চেষ্টা করে, প্রতিবার backtracking-এ সব সম্ভাবনা দেখে; ছোট graph-এ দ্রুত, কিন্তু worst case-এ exponential (DSA কোর্সের পর্ব ৫৬)। এখানে Welsh–Powell (WP) সবখানে χ দিয়েছে, কারণ crown graph-এ সমান degree-র মধ্যে sorted নাম-ক্রম (a-দল আগে) রেখেছে; ভাগ্য।

৪ · প্রয়োগ — পরীক্ষার সময়সূচি, register, frequency আর Sudoku

Graph colouring-এর শক্তি এর সাধারণতায়: “কিছু জিনিসকে কয়েকটি দলে ভাগ করুন, যাতে সংঘাতে থাকা দুটি একই দলে না যায়”। সংঘাতকে edge আর দলকে রং ধরলেই একই গণিত। §১-এর প্রশিক্ষণ-পরীক্ষায় ফিরে যাই: নিচের ব্লক ভর্তির তালিকা থেকে conflict graph বানায়, সব সম্ভাব্য স্লট-পরিকল্পনা brute force-এ দেখে সবচেয়ে কম স্লট বের করে, আর একটি clique দিয়ে প্রমাণ দেয় যে এর কম সম্ভব নয়।

from itertools import combinations, product
enrol = {'Rafi': 'ES', 'Mitu': 'ECK', 'Sajib': 'RS', 'Nila': 'CV',
         'Tanim': 'KR', 'Joya': 'VE', 'Arif': 'PSC', 'Lima': 'PK'}
names = {'E': 'Excel', 'P': 'Packing', 'S': 'Safety', 'R': 'Rider',
         'C': 'Cash', 'K': 'Stock', 'V': 'Service'}
G = {t: set() for t in names}
for courses in enrol.values():          # same person in both -> conflict edge
    for a, b in combinations(courses, 2):
        G[a].add(b); G[b].add(a)
print("trainings:", len(G), " conflict edges:", sum(map(len, G.values())) // 2)
V = sorted(G)
def plans(k):                           # brute force over all k^n slot plans
    for c in product(range(k), repeat=len(V)):
        s = dict(zip(V, c))
        if all(s[a] != s[b] for a in G for b in G[a]):
            yield s
k = 1
while next(plans(k), None) is None:
    k += 1
plan = next(plans(k))
print("minimum number of slots chi =", k)
for slot in range(k):
    print(f"  slot {slot + 1}:", ", ".join(names[t] for t in V if plan[t] == slot))
Q = next(Q for r in range(len(V), 0, -1) for Q in combinations(V, r)
         if all(b in G[a] for a, b in combinations(Q, 2)))
print("largest clique:", [names[t] for t in Q], "-> at least", len(Q), "slots")
print("number of proper 3-slot plans:", sum(1 for _ in plans(3)))

আসল আউটপুট (ব্রাউজারের Python):

trainings: 7  conflict edges: 12
minimum number of slots chi = 3
  slot 1: Cash, Rider
  slot 2: Excel, Packing
  slot 3: Stock, Safety, Service
largest clique: ['Cash', 'Excel', 'Stock'] -> at least 3 slots
number of proper 3-slot plans: 12

৭টি প্রশিক্ষণ, ১২টি সংঘাত। ১ বা ২ স্লটে কোনো বৈধ পরিকল্পনা নেই, ৩টিতে আছে: ঠিক §১-এর ছবির রং। Cash, Excel, Stock একটি clique (মিতু তিনটিতেই), তাই উপপাদ্য ২.২ অনুযায়ী ৩-এর কম অসম্ভব; উত্তরটি সার্টিফিকেটসহ। শেষ লাইন: ৩টি স্লটে মোট ১২টি বৈধ পরিকল্পনা, যা §৭-এর chromatic polynomial-এর মান P(G, 3). স্লটের নাম বদলালে (3! = 6 রকম) একই ভাগ আসে, তাই আসলে আলাদা ভাগ মাত্র ১২/৬ = ২টি। Brute force এখানে 37 = 2187টি পরিকল্পনা দেখেছে; ১০০টি প্রশিক্ষণে 3100, যা অসম্ভব।

Register allocation. Compiler একটি ফাংশনের প্রতিটি চলককে CPU-র সীমিত register-এ বসাতে চায়। দুটি চলক একই সময়ে “জীবিত” (পরে আবার লাগবে) থাকলে তারা একই register ভাগ করতে পারে না। চলক = vertex, একসাথে জীবিত = edge (interference graph), register = রং। Register-এর সংখ্যার চেয়ে বেশি রং লাগলে কিছু চলককে মেমরিতে পাঠাতে হয়, যাকে বলে spill. ১৯৮০-এর দশকের শুরুতে IBM-এর Gregory Chaitin ও সহকর্মীরা এই পদ্ধতি জনপ্রিয় করেন বলে জানা যায় (Computer Architecture কোর্সের পর্ব ৩১)।

Frequency assignment. কাছাকাছি দুটি রেডিও টাওয়ার একই frequency ব্যবহার করলে সংকেত মিশে যায়। টাওয়ার = vertex, “কাছাকাছি” = edge, frequency = রং। বাস্তব ব্যবস্থায় শর্ত আরও জটিল (পাশের frequency-ও এড়াতে হয়), কিন্তু মূল কাঠামো colouring.

Sudoku. ৮১টি ঘর = vertex; একই সারি, কলাম বা ৩×৩ বাক্সের দুটি ঘর = edge. প্রতিটি ঘরের প্রতিবেশী 8 (সারি) + 8 (কলাম) + 4 (বাক্সের বাকি, যা সারি-কলামে আগে গোনা হয়নি) = 20, তাই handshake অনুযায়ী edge 81 · 20 / 2 = 810. সমাধান করা Sudoku মানে এই graph-এর একটি proper 9-colouring, যা দেওয়া সূত্রগুলোর (আগে থেকে রং করা কিছু vertex) সঙ্গে মেলে: precolouring extension. পর্ব ০৭-এ একই ধাঁধা SAT solver দিয়ে সমাধানের কথা আছে।

যখন সংঘাত আসে সময়ের ব্যবধান থেকে: প্রতিটি কাজ একটি সময়-ব্যবধান (interval) হলে, আর দুটি ব্যবধান মিললে edge, তখন graph-টি একটি interval graph. এখানে শুরুর সময়ের ক্রমে greedy সর্বোত্তম। প্রমাণ: কোনো ব্যবধান I রং k পেলে আগের k − 1টি রং আটকানো ছিল এমন ব্যবধানে, যারা I-এর আগে শুরু হয়েছে আর I-এর সঙ্গে মেলে, তাই সবাই I-এর শুরুর মুহূর্তটি ধারণ করে; I-সহ এই k টি পরস্পর মেলে, একটি k-clique. তাই greedy-র রং = ω ≤ χ. ∎ বাজারঘরের ডেলিভারি ভ্যানের সময়-ভিত্তিক ভাগাভাগি এমনই।

৫ · Planar graph — ছয় রং সহজে, পাঁচ রং Kempe chain দিয়ে

মানচিত্রে পাশাপাশি দুটি জেলাকে আলাদা রং দিতে হলে কয়টি রং লাগে? প্রতিটি জেলাকে একটি vertex আর “একটি সীমানা-রেখা ভাগ করে” সম্পর্ককে একটি edge ধরলে যে graph পাওয়া যায়, তা কাগজে কোনো edge না কেটে আঁকা যায় (প্রতিটি জেলার ভেতরে একটি বিন্দু, আর সীমানা পেরিয়ে রেখা)। এমন graph-কে বলে planar graph. পর্ব ৬২ “Planar graph — Euler-এর সূত্র আর Kuratowski”-এ Euler-এর সূত্র v − e + f = 2 থেকে প্রমাণ হয়েছে: প্রতিটি simple planar graph-এ degree ≤ 5-এর একটি vertex আছে (সংক্ষেপে: v ≥ 3-এ e ≤ 3v − 6, তাই degree-র যোগফল 2e ≤ 6v − 12 < 6v, অর্থাৎ গড় degree ৬-এর কম)। এই একটি তথ্য থেকেই প্রথম ফল।

উপপাদ্য ৫.১ (ছয় রঙের উপপাদ্য)

প্রতিটি simple planar graph 6-colourable.

  1. vertex-সংখ্যা n-এর ওপর induction. n ≤ 6 হলে প্রত্যেককে আলাদা রং দিন। — ভিত্তি
  2. n > 6: degree ≤ 5-এর একটি vertex v নিন (পর্ব ৬২)। G − v (v আর তার edge সরানো) এখনো simple planar, n − 1টি vertex, তাই hypothesis অনুযায়ী 6-colourable. — planar graph-এর subgraph planar
  3. v-এর প্রতিবেশী বড়জোর ৫ জন, তারা বড়জোর ৫টি রং আটকায়; ষষ্ঠ রংটি v-কে দিন। ∎ — উপপাদ্য ২.৩-এর যুক্তি

পাঁচে নামতে একটি নতুন হাতিয়ার লাগে: রং অদলবদল।

সংজ্ঞা ও lemma ৫.২ (Kempe chain)

G-এর একটি proper colouring আর দুটি রং i, j দেওয়া আছে। i বা j রঙের সব vertex নিয়ে induced subgraph Hij-এর প্রতিটি connected component-কে বলে একটি Kempe chain. Lemma: একটি Kempe chain-এর ভেতরে i আর j অদলবদল করলে colouring proper থাকে।

  1. Chain-এর ভেতরের একটি edge-এর দুই প্রান্ত আগে ছিল i, j (বা j, i), পরে j, i: এখনো আলাদা। — Hij-এ শুধু i, j রং
  2. Chain-এর একটি vertex x আর বাইরের প্রতিবেশী y: y-এর রং i বা j হলে y-ও Hij-এ থাকত আর x-এর সঙ্গে যুক্ত বলে একই component-এ। তাই y-এর রং i, j ছাড়া অন্য কিছু, আর x-এর নতুন রং (i বা j) তার সঙ্গে মেলে না। ∎ — component-এর সংজ্ঞা
উপপাদ্য ৫.৩ (পাঁচ রঙের উপপাদ্য, Heawood ১৮৯০)

প্রতিটি simple planar graph 5-colourable.

  1. n-এর ওপর induction; n ≤ 5 সহজ। n > 5: G-কে সমতলে কোনো crossing ছাড়া আঁকা ধরি, আর degree ≤ 5-এর vertex v নিই। G − v-এর একটি 5-colouring hypothesis থেকে পাই। — পর্ব ৬২, induction
  2. v-এর প্রতিবেশীরা ৫টির কম রং ব্যবহার করলে খালি রংটি v-কে দিন, শেষ। তাই ধরি deg(v) = 5, আর প্রতিবেশী v1, …, v5 (ছবিতে v-এর চারপাশে ঘড়ির কাঁটার দিকে এই ক্রমে) পাঁচটি আলাদা রং 1, …, 5 পেয়েছে। — কঠিন ক্ষেত্রটিই বাকি
  3. v1-এর H13-chain দেখুন। তাতে v3 না থাকলে chain-টিতে 1 ↔ 3 অদলবদল করুন (lemma ৫.২): v1 হয় 3, v3 থাকে 3, তাই রং 1 খালি, v-কে দিন। — প্রথম ক্ষেত্র
  4. অন্যথায় v1 থেকে v3 পর্যন্ত একটি path P আছে, যার সব vertex-এর রং 1 বা 3. P আর edge v3v, vv1 মিলে একটি বন্ধ বক্ররেখা C, যা সমতলকে ভেতর আর বাইরে ভাগ করে; এটি Jordan curve theorem. v-এর চারপাশের ক্রমের কারণে vv2 একদিকে যায় আর vv4 অন্যদিকে: v2 আর v4 C-এর দুই পাশে। — আঁকার ক্রম
  5. G − v-এ v2 থেকে v4-এর যেকোনো path-কে C পার হতে হয়, আর crossing নেই বলে C-এর কোনো vertex দিয়েই পার হয়; সেই vertex-এর রং 1 বা 3 (v নিজে G − v-এ নেই)। তাই v2 থেকে v4-এর কোনো 2-4 রঙের path নেই: তারা ভিন্ন H24-chain-এ। — planarity এখানেই লাগে
  6. v2-এর H24-chain-এ 2 ↔ 4 অদলবদল করুন: v2 হয় 4, v4 থাকে 4. রং 2 খালি, v-কে দিন। ∎ — lemma ৫.২

নিচের ছবিটি দ্বিতীয় (কঠিন) ক্ষেত্রের একটি ছোট উদাহরণ: ৯টি vertex-এর একটি planar graph, যেখানে v-কে বাদ দিয়ে বাকিদের একটি 5-colouring দেওয়া আছে।

পাঁচ রঙের প্রমাণের কঠিন ক্ষেত্র: Kempe chain v1 – x – y – v3

বৃত্তের ভেতরের সংখ্যাটি রং, পাশে vertex-এর নাম। কেন্দ্রের v এখনো রংহীন (?)। কমলা মোটা পথ 1 আর 3 রঙের Kempe chain; এটি v-সহ একটি বন্ধ বক্ররেখা, যার ভেতরে v2 আর z, বাইরে v4 আর v5.

Hard case of the five colour proof: the 1-3 Kempe chain v1, x, y, v3 together with v separates v2 from v4 ?12 345 314 vv1v2 v3v4v5 xyz সংখ্যা = রং · কমলা = 1-3 Kempe chain
1G − v-এর 5-colouring2H13: v1-এর chain3বন্ধ রেখা C4H24: v2-এর chain52 ↔ 4 অদলবদল6v পায় রং 2
রং (v1 v2 v3 v4 v5 │ x y z)
v1..v5
x y z
v
chain
  1. অবস্থা। v বাদে বাকি ৮টি vertex-এর একটি proper 5-colouring: v1..v5 = 1, 2, 3, 4, 5; x = 3, y = 1, z = 4. v-এর পাঁচ প্রতিবেশী পাঁচটি রংই নিয়েছে, তাই সরাসরি কোনো রং খালি নেই।
  2. প্রথম চেষ্টা: H13. 1 বা 3 রঙের vertex: v1, v3, x, y. v1 থেকে x (3), x থেকে y (1), y থেকে v3 (3): v1-এর chain {v1, x, y, v3}, আর তাতে v3 আছে। অদলবদল করলে v1 হয় 3 কিন্তু v3 হয় 1, কোনো রং খালি হয় না।
  3. বন্ধ বক্ররেখা। chain আর v মিলে C = v – v1 – x – y – v3 – v. ছবিতে v2 আর z এর ভেতরে, v4 আর v5 বাইরে। C-এর সব vertex-এর রং 1 বা 3 (v ছাড়া)।
  4. দ্বিতীয় চেষ্টা: H24. 2 বা 4 রঙের vertex: v2, v4, z. v2-এর chain {v2, z} (z-এর অন্য প্রতিবেশী x-এর রং 3, তাই x এই chain-এ নেই)। v4 C-এর বাইরে, আর ভেতর থেকে বাইরে যেতে 1 বা 3 রঙের vertex পেরোতে হয়, তাই v4 এই chain-এ নেই। v4-এর নিজের chain শুধু {v4}.
  5. অদলবদল। {v2, z}-এ 2 ↔ 4: v2 = 4, z = 2. পরীক্ষা: v2-এর প্রতিবেশী v1 (1), v3 (3), z (2); z-এর প্রতিবেশী v2 (4), x (3). সব আলাদা, colouring proper.
  6. শেষ। এখন v-এর প্রতিবেশীরা 1, 4, 3, 4, 5: রং 2 খালি, v = 2. ৯টি vertex-এর proper 5-colouring পাওয়া গেল। (এই graph-এর χ আসলে 4; প্রমাণটি শুধু ৫-এর নিশ্চয়তা দেয়।)

৬ · চার রঙের উপপাদ্য — Kempe-র ভুল থেকে কম্পিউটারের প্রমাণ

উপপাদ্য ৬.১ (চার রঙের উপপাদ্য)

প্রতিটি loop-হীন planar graph 4-colourable. সমতুল্যভাবে: সমতলের যেকোনো মানচিত্রে (প্রতিটি দেশ একটি অবিচ্ছিন্ন অঞ্চল) চারটি রং যথেষ্ট, যাতে সীমানা-রেখা ভাগ করা দুটি দেশ আলাদা রং পায়।

সীমাটি নিখুঁত: K4 planar (একটি ত্রিভুজের ভেতরে একটি বিন্দু, তিন কোণের সঙ্গে যুক্ত), আর তার χ = 4. শুধু এক বিন্দুতে মেলা দুটি দেশকে পাশাপাশি ধরা হয় না; ধরলে কেকের টুকরোর মতো ভাগ করা মানচিত্রে যত খুশি রং লাগত।

ইতিহাস। ১৮৫২ সালে Francis Guthrie ইংল্যান্ডের কাউন্টিগুলোর মানচিত্র রং করতে গিয়ে লক্ষ করেন চারটি রং যথেষ্ট মনে হয়; তাঁর ভাই Frederick প্রশ্নটি Augustus De Morgan-কে জানান, আর De Morgan সে বছর William Rowan Hamilton-কে চিঠিতে লেখেন বলে জানা যায়। ১৮৭৯ সালে Alfred Kempe একটি “প্রমাণ” প্রকাশ করেন, যা প্রায় এগারো বছর গৃহীত ছিল। ১৮৯০ সালে Percy Heawood তাতে ভুল দেখান, আর একই যুক্তি মেরামত করে পাঁচ রঙের উপপাদ্য (উপপাদ্য ৫.৩) প্রমাণ করেন। শেষ পর্যন্ত ১৯৭৬ সালে Kenneth Appel আর Wolfgang Haken (University of Illinois) কম্পিউটারের বিপুল হিসাবের সাহায্যে প্রমাণ ঘোষণা করেন, ১৯৭৭ সালে প্রকাশিত; প্রায় দুই হাজার বিশেষ কাঠামো আর এক হাজার ঘণ্টার বেশি কম্পিউটার সময় লেগেছিল বলে উল্লেখ করা হয়। ১৯৯৭ সালে Neil Robertson, Daniel Sanders, Paul Seymour আর Robin Thomas একটি সরল ও আরও সহজে যাচাইযোগ্য প্রমাণ দেন (৬৩৩টি কাঠামো, বলে জানা যায়), আর ২০০৫ সালে Georges Gonthier (Benjamin Werner-এর সঙ্গে) পুরো প্রমাণটি Coq proof assistant-এ যন্ত্রে-যাচাইকৃত রূপে লেখেন।

প্রমাণের কৌশল (শুধু রূপরেখা)। ধরা যাক উপপাদ্যটি মিথ্যা, আর G সবচেয়ে কম vertex-এর একটি পাল্টা-উদাহরণ, যাকে বলে minimal counterexample. দুটি তালিকা লাগে। (১) একটি unavoidable set: কয়েকটি ছোট কাঠামোর (configuration) তালিকা, যাতে প্রতিটি planar triangulation-এ অন্তত একটি থাকবেই; Euler-এর সূত্র থেকে degree-র “চার্জ” সরিয়ে (discharging) এটি দেখানো হয়, ঠিক যেমন “degree ≤ 5-এর vertex আছেই” একটি অতি ছোট unavoidable set. (২) প্রতিটি কাঠামো reducible: minimal counterexample-এ এটি থাকলে তাকে ছোট করে 4-colour করা আর Kempe chain-এর অদলবদলে ফিরিয়ে আনা যায়, যা অসম্ভব। Kempe-র মূল যুক্তি ঠিক এই কাঠামো মানে: degree ≤ 4-এর vertex-এর জন্য তাঁর যুক্তি সঠিক (উপপাদ্য ৫.৩-এর মতোই একটি অদলবদল যথেষ্ট); ভুলটি ছিল degree 5-এর ক্ষেত্রে (অনুশীলন ৪)। কম্পিউটারের কাজ ছিল হাজার হাজার কাঠামোর reducibility যাচাই, যা হাতে অসম্ভব।

পাঁচ আর চার রঙের মধ্যে ফাঁকটিই শিক্ষণীয়। পাঁচ রঙে প্রতিবেশী ৫ জন হলে রং একটি “বাড়তি” থাকে, তাই একটি মাত্র অদলবদল যথেষ্ট; চার রঙে degree 5-এর vertex-এর প্রতিবেশীদের মধ্যে একটি রং দুবার থাকে, আর দুটি অদলবদল একসঙ্গে লাগে, যারা একে অন্যকে নষ্ট করতে পারে।

৭ · Chromatic polynomial — deletion–contraction

χ শুধু বলে “রং করা যায় কি না”। বাজারঘরের ব্যবস্থাপক জানতে চাইতে পারেন: ৩টি স্লটে কতভাবে পরিকল্পনা করা যায়? §৪-এর ব্লক উত্তর দিয়েছিল ১২। এই গণনাকে k-এর ফাংশন হিসেবে দেখার ধারণা George Birkhoff-এর (১৯১২, চার রঙের সমস্যায় আক্রমণের চেষ্টায়), আর Hassler Whitney ১৯৩২ সালে একে সাধারণ graph-এ বিস্তৃত করেন বলে জানা যায়।

সংজ্ঞা ৭.১ (chromatic polynomial)

k একটি অঋণাত্মক পূর্ণসংখ্যা হলে P(G, k) = রং-সেট {1, …, k} থেকে G-এর proper colouring-এর সংখ্যা (সব k রং ব্যবহার করতে হবে না; রঙের নাম বদলালে আলাদা colouring ধরা হয়)। একে বলে chromatic polynomial; নিচে দেখব এটি সত্যিই k-এর একটি polynomial. সংজ্ঞা থেকেই χ(G) = সবচেয়ে ছোট ধনাত্মক k, যাতে P(G, k) > 0.

দুটি সরাসরি গণনা (পর্ব ৩১-এর গুণের নিয়ম)। edge-হীন n-vertex graph-এ প্রত্যেকে স্বাধীনভাবে k রং পায়: P = kn. Kn-এ একে একে রং দিলে প্রথমজন k, দ্বিতীয়জন k − 1, …, n-তমজন k − n + 1 বিকল্প পায়:

P(Kn, k) = k(k − 1)(k − 2) ⋯ (k − n + 1)

k < n হলে একটি গুণনীয়ক 0, তাই P = 0, যা χ(Kn) = n-এর সঙ্গে মেলে। সাধারণ graph-এ এমন সরাসরি গুণ চলে না, কারণ একজনের বিকল্প নির্ভর করে আগের প্রতিবেশীরা একই রং পেয়েছে কি না তার ওপর। সমাধান একটি recurrence.

উপপাদ্য ৭.২ (deletion–contraction)

G একটি simple graph আর e = uv তার একটি edge. G − e মানে e সরানো graph, আর G / e মানে contraction: u আর v-কে একটি vertex-এ জুড়ে দেওয়া, যা দুজনের সব প্রতিবেশীর সঙ্গে যুক্ত (একাধিক edge হলে একটি রাখা হয়)। তাহলে প্রতিটি k-এর জন্য

P(G, k) = P(G − e, k) − P(G / e, k)

  1. G − e-এর proper colouring দুই ধরনের: (ক) c(u) ≠ c(v), (খ) c(u) = c(v). দুটি আলাদা, আর মিলে সবগুলো। — deletion–contraction-এর মূল ভাগ
  2. (ক)-এর colouring-গুলো ঠিক G-এর proper colouring: e-এর শর্ত c(u) ≠ c(v) পূরণ হয়েছে, বাকি edge একই। — সংজ্ঞা
  3. (খ)-এর colouring আর G / e-এর proper colouring-এর মধ্যে একটি bijection: u, v-এর সাধারণ রং জোড়া vertex-কে দিন; উল্টো দিকে জোড়া vertex-এর রং u আর v দুজনকে দিন। u-এর প্রতিবেশী আর v-এর প্রতিবেশী সবাই জোড়া vertex-এর প্রতিবেশী, তাই proper থাকা দুই দিকে একই শর্ত। — পর্ব ১৬-এর bijection
  4. তাই P(G − e, k) = P(G, k) + P(G / e, k). সাজালে ফল। ∎ — যোগের নিয়ম

অনুসিদ্ধান্ত। P(G, k) সবসময় k-এর একটি polynomial: edge-সংখ্যা m-এর ওপর induction; m = 0-তে kn, আর G − e ও G / e দুটিতেই edge কম (G / e-তে vertex-ও কম)। একই induction দেখায় n-vertex, m-edge graph-এ P-এর degree n, প্রথম সহগ 1, kn−1-এর সহগ −m, আর ধ্রুবক পদ 0 (অন্তত একটি vertex থাকলে)। অঙ্কের উত্তর যাচাইয়ে এই তিনটি দ্রুত পরীক্ষা খুব কাজের।

উপপাদ্য ৭.৩ (tree আর cycle)

(ক) n টি vertex-এর যেকোনো tree (connected, cycle-হীন) T-তে P(T, k) = k(k − 1)n−1. (খ) n ≥ 3 হলে P(Cn, k) = (k − 1)n + (−1)n(k − 1).

  1. (ক) n-এর ওপর induction; n = 1-এ k. n ≥ 2-এর tree-তে একটি leaf ℓ (degree 1) আছে: সবচেয়ে লম্বা path-এর শেষ vertex-এর আর কোনো প্রতিবেশী থাকলে path লম্বা হতো বা cycle তৈরি হতো (বিস্তারিত পর্ব ৬৫ “Tree — ধর্ম, rooted tree আর m-ary tree-এর হিসাব”-এ)। — leaf-এর অস্তিত্ব
  2. T − ℓ একটি n − 1 vertex-এর tree; তাকে k(k − 1)n−2 ভাবে রং করুন, induction hypothesis অনুযায়ী। ℓ-এর একমাত্র প্রতিবেশীর রং বাদে k − 1টি বিকল্প। গুণ: k(k − 1)n−1. — গুণের নিয়ম
  3. (খ) n-এর ওপর induction. n = 3: C3 = K3, P = k(k − 1)(k − 2), আর (k − 1)3 − (k − 1) = (k − 1)((k − 1)2 − 1) = (k − 1)(k − 2)k. মেলে। — ভিত্তি
  4. n ≥ 4: Cn-এর একটি edge e-তে উপপাদ্য ৭.২. Cn − e হলো n-vertex path (একটি tree), আর Cn / e হলো Cn−1. — deletion–contraction
  5. P(Cn) = k(k − 1)n−1 − (k − 1)n−1 − (−1)n−1(k − 1) = (k − 1)n−1(k − 1) + (−1)n(k − 1) = (k − 1)n + (−1)n(k − 1). ∎ — বীজগণিত

যাচাই: k = 2-এ জোড় n-এ P = 1 + 1 = 2 (দুটি পর্যায়ক্রমিক রং), বিজোড় n-এ 1 − 1 = 0. উপপাদ্য ১.২(খ)-এর সঙ্গে হুবহু মেলে। নিচের stepper C4-এ একটি deletion–contraction ধাপ হাতে করে।

1G = C4, e = ab2G − e: path3G / e: K34বিয়োগ5বিস্তার6যাচাই
C4: a – b – c – d – a
graph
P(·, k)
k = 3
  1. শুরু। C4: a – b – c – d – a, চারটি edge. e = ab বাছাই করা হলো।
  2. Deletion. ab সরালে থাকে path b – c – d – a: ৪ vertex-এর একটি tree, উপপাদ্য ৭.৩(ক) অনুযায়ী k(k − 1)³. k = 3-এ 3 · 8 = 24.
  3. Contraction. a আর b জুড়ে নতুন vertex w: b-এর প্রতিবেশী c আর a-এর প্রতিবেশী d এখন w-এর প্রতিবেশী, সঙ্গে c – d. অর্থাৎ ত্রিভুজ K3: k(k − 1)(k − 2). k = 3-এ 6, যেসব colouring-এ a আর b একই রং।
  4. বিয়োগ। উপপাদ্য ৭.২: P(C4, k) = k(k − 1)³ − k(k − 1)(k − 2). k = 3-এ 24 − 6 = 18.
  5. বিস্তার। k(k³ − 3k² + 3k − 1) − (k³ − 3k² + 2k) = k⁴ − 4k³ + 6k² − 3k. দ্রুত পরীক্ষা: প্রথম সহগ 1, k³-এর সহগ −4 = −(edge-সংখ্যা), ধ্রুবক 0.
  6. যাচাই। উপপাদ্য ৭.৩(খ): (k − 1)⁴ + (k − 1); k = 3-এ 16 + 2 = 18, মেলে। k = 2-এ 1 + 1 = 2, k = 1-এ 0: χ(C4) = 2.

নিচের ব্লক deletion–contraction-কে সরাসরি recursion হিসেবে চালায় (polynomial রাখা হয়েছে সহগের তালিকা হিসেবে), আর k = 1, 2, 3, 4-এ সব knটি রং-বিন্যাস গুনে মিলিয়ে দেখে।

from itertools import product
def sub(p, q):                          # coefficient lists, index = power of k
    n = max(len(p), len(q))
    p, q = p + [0] * (n - len(p)), q + [0] * (n - len(q))
    return [a - b for a, b in zip(p, q)]
def P(V, E):                            # deletion-contraction recursion
    if not E:
        return [0] * len(V) + [1]       # no edges: k^n
    e = min(E, key=sorted)
    u, v = sorted(e)
    E1 = E - {e}                        # G - e
    E2 = frozenset(frozenset(u if x == v else x for x in f) for f in E1)
    return sub(P(V, E1), P(V - {v}, E2))  # G / e: v merged into u
def brute(V, E, k):
    V = sorted(V)
    return sum(all(c[V.index(a)] != c[V.index(b)] for a, b in map(sorted, E))
               for c in product(range(k), repeat=len(V)))
def graph(edges):
    E = frozenset(frozenset(e) for e in edges)
    return frozenset(x for e in E for x in e), E
cyc = lambda n: [(i, (i + 1) % n) for i in range(n)]
tests = {'C4': cyc(4), 'C5': cyc(5), 'K4': [(a, b) for a in range(4) for b in range(a)],
         'W4': cyc(4) + [(i, 4) for i in range(4)], 'path5': [(i, i + 1) for i in range(4)]}
for name, edges in tests.items():
    V, E = graph(edges)
    p = P(V, E)
    val = lambda k: sum(c * k ** i for i, c in enumerate(p))
    same = all(val(k) == brute(V, E, k) for k in range(1, 5))
    chi = next(k for k in range(1, 9) if val(k) > 0)
    print(f"{name:5} coeffs={p[::-1]} P(3)={val(3)} chi={chi} brute ok={same}")

আসল আউটপুট (ব্রাউজারের Python):

C4    coeffs=[1, -4, 6, -3, 0] P(3)=18 chi=2 brute ok=True
C5    coeffs=[1, -5, 10, -10, 4, 0] P(3)=30 chi=3 brute ok=True
K4    coeffs=[1, -6, 11, -6, 0] P(3)=0 chi=4 brute ok=True
W4    coeffs=[1, -8, 24, -31, 14, 0] P(3)=6 chi=3 brute ok=True
path5 coeffs=[1, -4, 6, -4, 1, 0] P(3)=48 chi=2 brute ok=True

সহগ বড় ঘাত থেকে ধ্রুবক পর্যন্ত। C4-এর সারি stepper-এর k⁴ − 4k³ + 6k² − 3k. C5: (k − 1)⁵ − (k − 1) বিস্তার করলে ঠিক এই সহগ, আর P(3) = 2⁵ − 2 = 30. K4: k(k − 1)(k − 2)(k − 3) = k⁴ − 6k³ + 11k² − 6k, k = 3-এ 0. Path5 একটি tree: k(k − 1)⁴, k = 3-এ 3 · 16 = 48. W4 (C4 আর একটি hub): hub-কে k ভাবে রং দিলে rim-এর জন্য বাকি k − 1টি রং, তাই P(W4, k) = k · P(C4, k − 1); k = 3-এ 3 · P(C4, 2) = 3 · 2 = 6. প্রতিটি সারিতে দ্বিতীয় সহগ −m (৪, ৫, ৬, ৮, ৪টি edge), আর brute ok=True: চারটি k-তেই সরাসরি গণনার সঙ্গে মিলেছে। Recursion-এ প্রতি ধাপে দুটি শাখা, তাই m টি edge-এ প্রায় 2m ডাক: ছোট graph-এই চলে।

৮ · গণনার কঠিনতা, এক নজরে তুলনা আর পরীক্ষার প্রশ্ন

“G কি 2-colourable?” প্রশ্নটি সহজ: BFS দিয়ে স্তরে স্তরে পর্যায়ক্রমে রং দিন, কোথাও দুই প্রতিবেশী একই রং পেলে একটি odd cycle পাওয়া যায় (পর্ব ৫৭; DSA কোর্সের পর্ব ৩৯)। কিন্তু “G কি 3-colourable?” প্রশ্নটি NP-complete. Richard Karp-এর ১৯৭২ সালের তালিকায় chromatic number-এর সিদ্ধান্ত-প্রশ্ন ছিল, আর 3-colouring-এর NP-completeness Larry Stockmeyer (১৯৭৩) দেখান বলে জানা যায়; এমনকি planar, সর্বোচ্চ degree 4-এর graph-এও প্রশ্নটি NP-complete থাকে (Garey, Johnson ও Stockmeyer, ১৯৭৬, বলে উল্লেখ করা হয়)। মজার বৈপরীত্য: planar graph-এ “৪ রঙে হয় কি?” প্রশ্নের উত্তর সবসময় হ্যাঁ (চার রঙের উপপাদ্য), “২ রঙে?” সহজ, আর মাঝের “৩ রঙে?” কঠিন। তাই χ বের করাও NP-hard (DSA কোর্সের পর্ব ৬৪), আর χ-এর কাছাকাছি অনুমানও সাধারণভাবে কঠিন বলে প্রমাণিত। নির্ভুল χ-এর জন্য সবচেয়ে দ্রুত জানা পদ্ধতিগুলোর একটি পর্ব ৪৯-এর inclusion–exclusion দিয়ে প্রায় 2n সময়ে চলে; বাস্তবের বড় রুটিনে heuristic আর local search ব্যবহার হয় (DSA কোর্সের পর্ব ৬৫)।

ফলশর্তপ্রমাণের হাতিয়ার
ω ≤ χ, χ ≥ ⌈n/α⌉যেকোনো graphclique-এ সব রং আলাদা; colour class independent
χ ≤ Δ + 1যেকোনো graphযেকোনো ক্রমে greedy
χ ≤ Δ (Brooks)connected, complete বা odd cycle নয়বিশেষ ক্রমে greedy (প্রমাণ বাদ)
χ ≤ max min(di + 1, i)degree-র নিম্নক্রমে সাজানোWelsh–Powell ক্রমে greedy
χ ≤ 6, χ ≤ 5simple planardegree ≤ 5-এর vertex; Kempe chain
χ ≤ 4loop-হীন planarunavoidable set + reducibility, কম্পিউটারে
P(G) = P(G − e) − P(G / e)simple graph, e একটি edgec(u) = c(v) কি না, দুই ভাগে গণনা

আরও গভীরে: Vertex নয়, edge রং করলে (একই vertex-এ মেলা দুটি edge আলাদা রং) Vizing-এর উপপাদ্য (১৯৬৪) বলে simple graph-এ রং লাগে Δ বা Δ + 1, এর বেশি কখনো নয়। Torus-এর ওপরের মানচিত্রে ৭টি রং যথেষ্ট আর কখনো দরকারি, যা Heawood অনুমান করেন আর Ringel ও Youngs ১৯৬৮ সালে সাধারণ তলের জন্য প্রমাণ শেষ করেন বলে জানা যায়। Hadwiger-এর অনুমান (Kt-কে minor হিসেবে না ধারণ করলে χ ≤ t − 1), যার একটি বিশেষ ক্ষেত্র চার রঙের উপপাদ্যের সমতুল্য, এখনো সাধারণভাবে খোলা প্রশ্ন।

পরীক্ষা ও ইন্টারভিউতে: বিশ্ববিদ্যালয়, চাকরি বা ইন্টারভিউর পরীক্ষায় এই ধরনের প্রশ্ন প্রায়ই আসে:

  • W5 (C5 আর একটি hub)-এর chromatic number কত? 4: C5-এ ৩টি লাগে, hub সবার প্রতিবেশী বলে আরও একটি।
  • প্রমাণ করুন χ(G) ≤ Δ(G) + 1. Greedy: প্রতিটি vertex-এর বড়জোর Δ প্রতিবেশী, তাই Δ + 1টির একটি খালি।
  • P(C4, 3) কত? (3 − 1)4 + (3 − 1) = 18.
  • পরীক্ষার রুটিনকে graph colouring-এ রূপ দিন। বিষয় = vertex, সাধারণ শিক্ষার্থী = edge, দিন বা স্লট = রং; কম স্লট = χ.
  • পাঁচ রঙের প্রমাণে planarity কোথায় লাগে? degree ≤ 5-এর vertex পেতে, আর 1-3 chain যে v2-কে v4 থেকে আলাদা করে সেই যুক্তিতে।

৯ · AI-এর যুগে — colouring-এর প্রমাণ আর গণনা যাচাই

Graph colouring-এর প্রশ্নে AI সহকারী দ্রুত কোড লেখে, কিন্তু প্রমাণে, শর্তে আর ইতিহাসে আত্মবিশ্বাসী ভুল করে। কয়েকটি নিয়মিত ভুল আর ধরার উপায়:

AI-এর ভুলকীভাবে ধরবেন
“Greedy (বা Welsh–Powell) সবসময় χ রং দেয়”Crown graph-এ জোড়ায় জোড়ায় ক্রমে চালান
“χ = ω” ধরে নেওয়া, বা শুধু একটি colouring দেখিয়ে “χ = k” দাবিC5 বা W5-এ পরীক্ষা করুন; নিচের সীমার যুক্তি আছে কি না খুঁজুন
Brooks বা চার রঙের উপপাদ্য শর্ত ছাড়া (“সব graph-এ χ ≤ Δ”, “সব graph-এ ৪ রং”)Kn, odd cycle, K5-এ মিলিয়ে দেখুন
পাঁচ রঙের প্রমাণ, যেখানে planarity শুধু degree ≤ 5-এ লাগেদুই chain আলাদা থাকার যুক্তিতে Jordan curve বা crossing-হীনতা আছে কি না দেখুন
Chromatic polynomial-এ যোগ-বিয়োগ উল্টো, বা P(Cn)-এ চিহ্ন ভুলk = 2, 3-এ brute force গণনা; kn−1-এর সহগ −m কি না
চার রঙের উপপাদ্যের ভুল সাল, ভুল নাম বা বানানো উদ্ধৃতিবিশ্বস্ত পাঠ্যবই বা মূল প্রবন্ধে মেলান

AI-এর কাছে colouring-এর প্রমাণ বা গণনা চাইলে এমন কাঠামো দিন, যাতে প্রতিটি দাবি আলাদা করে যাচাই করা যায়:

একটি graph colouring-এর প্রশ্নের সমাধান দাও: Graph: [যেমন W5, অথবা edge-এর তালিকা] ১. যে উপপাদ্য ব্যবহার করবে, তা পুরো শর্তসহ লেখো (simple graph কি না, connected কি না, planar কি না)। ২. χ-এর জন্য দুটি অংশ আলাদা করে দাও: একটি নির্দিষ্ট colouring (ওপরের সীমা) আর কম রঙে অসম্ভব হওয়ার যুক্তি (নিচের সীমা)। ৩. প্রমাণ সংখ্যাযুক্ত ধাপে লেখো; প্রতিটি ধাপের পাশে কোন সংজ্ঞা বা lemma ব্যবহার হলো তা লেখো। ৪. Chromatic polynomial দিলে k = 1, 2, 3-এ তার মান আর k^(n−1)-এর সহগ দাও। ৫. সব রং-বিন্যাস গুনে উত্তর মেলানোর একটি ছোট Python কোড দাও, শুধু standard library দিয়ে। ৬. কোনো নাম, সাল বা উৎস নিয়ে নিশ্চিত না হলে তা স্পষ্ট বলো।

AI-এর উত্তর হাতে পেলে — যাচাইয়ের চেকলিস্ট

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিয়ে নিজে কিছুক্ষণ ভাবুন, তারপর “→ উত্তর” চাপুন।

প্র ০১চার রঙের প্রশ্নটি ১৮৫২ সালে উঠে ১৯৭৬ সালে মিটল। এত সহজ বক্তব্যের প্রমাণে এত সময় লাগল কেন?

প্রশ্নটি বোঝাতে কোনো গণিত লাগে না, যেকোনো শিশু মানচিত্রে রং করে চেষ্টা করতে পারে; সেজন্যই এটি দ্রুত ছড়ায়। ১৮৫২ সালে Francis Guthrie-র প্রশ্ন De Morgan-এর মাধ্যমে গণিতবিদদের কাছে পৌঁছায়, আর ১৮৭৮ সালে Arthur Cayley লন্ডন ম্যাথমেটিক্যাল সোসাইটিতে জানতে চান কেউ এর সমাধান করেছেন কি না, বলে উল্লেখ করা হয়। পরের বছর Alfred Kempe-র প্রমাণ প্রকাশিত হয়, আর তাঁর Kempe chain-এর ধারণা এতটাই স্বাভাবিক যে প্রায় এগারো বছর কেউ ফাঁক দেখেননি।

১৮৯০ সালে Percy Heawood একটি নির্দিষ্ট মানচিত্র দেখান, যেখানে Kempe-র degree 5-এর যুক্তি কাজ করে না: দুটি অদলবদল একসঙ্গে করতে গিয়ে প্রথমটি দ্বিতীয়টির ভিত্তি নষ্ট করে (অনুশীলন ৪)। Heawood একই কৌশলে পাঁচ রঙের উপপাদ্য প্রমাণ করেন, যা এই পর্বের উপপাদ্য ৫.৩. এরপর প্রায় এক শতাব্দী ফাঁকটি পূরণ হয়নি। কারণ degree 5-এর vertex-এর আশপাশের কাঠামো বহু রকম হতে পারে, আর প্রতিটির জন্য আলাদা যুক্তি লাগে।

বিংশ শতাব্দীতে Birkhoff-এর reducibility-র ধারণা আর Heinrich Heesch-এর discharging পদ্ধতি (১৯৬০-এর দশক, বলে জানা যায়) সমস্যাটিকে একটি সসীম কিন্তু বিশাল তালিকা পরীক্ষার প্রশ্নে রূপ দেয়: এমন কয়েকটি কাঠামো খুঁজুন, যাদের একটি প্রতিটি planar triangulation-এ থাকবেই, আর প্রত্যেকটি reducible প্রমাণ করুন। তালিকাটি হাজারের ঘরে, আর প্রতিটির reducibility যাচাইয়ে লক্ষ লক্ষ colouring দেখতে হয়। হাতে এই কাজ মানুষের জীবনে শেষ হতো না; ১৯৭০-এর দশকের কম্পিউটারই প্রথম তা সম্ভব করে।

মূল উপলব্ধি: সহজ বক্তব্য মানেই সহজ প্রমাণ নয়; চার রঙের উপপাদ্যের কঠিনতা এসেছে বহু রকম স্থানীয় কাঠামো থেকে, আর সমাধান এসেছে সমস্যাকে একটি সসীম যাচাইয়ে নামিয়ে কম্পিউটারকে দিয়ে।

প্র ০২কম্পিউটারের সাহায্যে করা প্রমাণ কি সত্যিকারের প্রমাণ? চার রঙের উপপাদ্যের পরের বিতর্ক থেকে কী শেখা যায়?

ঐতিহ্যগতভাবে একটি প্রমাণ এমন যুক্তি, যা একজন দক্ষ পাঠক নিজে পড়ে প্রতিটি ধাপ মিলিয়ে নিতে পারেন। Appel–Haken-এর প্রমাণ এই সংজ্ঞায় পড়ে না: এর বড় অংশ একটি প্রোগ্রামের আউটপুট, যা কোনো মানুষ পুরোটা পড়েননি। ১৯৭০-এর দশকের শেষে দার্শনিক Thomas Tymoczko যুক্তি দেন যে এমন প্রমাণ গণিতে পরীক্ষানির্ভর বিজ্ঞানের মতো একটি উপাদান আনে, কারণ আমরা হার্ডওয়্যার আর সফটওয়্যারের নির্ভুলতায় বিশ্বাস করছি, বলে উল্লেখ করা হয়। অনেক গণিতবিদ তখন অস্বস্তি প্রকাশ করেন।

উত্তর এসেছে দুই দিক থেকে। প্রথমত, পুনরুৎপাদন: ১৯৯৭ সালে Robertson, Sanders, Seymour ও Thomas স্বাধীনভাবে নতুন, ছোট তালিকা (৬৩৩টি কাঠামো, বলে জানা যায়) আর নতুন প্রোগ্রাম দিয়ে প্রমাণ করেন, আর তাঁদের কোড অন্যরা চালিয়ে মেলাতে পারেন। পরীক্ষাগারের ফলাফল যেমন অন্য গবেষক পুনরায় পেলে বিশ্বাসযোগ্য হয়, এটিও তেমন। দ্বিতীয়ত, formal verification: ২০০৫ সালে Georges Gonthier পুরো প্রমাণ Coq নামের proof assistant-এ লেখেন, যেখানে প্রতিটি যুক্তির ধাপ একটি ছোট, ভালোভাবে পরীক্ষিত kernel যাচাই করে। এতে আস্থা কেন্দ্রীভূত হয় একটি ছোট প্রোগ্রামে, হাজার পৃষ্ঠার হিসাবে নয়।

লক্ষ করুন, মানুষের লেখা প্রমাণও ভুলমুক্ত নয়: Kempe-র প্রমাণ এগারো বছর বহু পাঠকের চোখ এড়িয়েছিল। তাই প্রশ্নটি “মানুষ বনাম যন্ত্র” নয়, বরং “কোন অংশে কতটা আস্থা, আর তা কীভাবে স্বাধীনভাবে যাচাই করা যায়”। এই পর্বের পদ্ধতিও একই: প্রমাণ লিখুন, আর ছোট ক্ষেত্রে brute force দিয়ে আলাদা পথে মিলিয়ে নিন।

মূল উপলব্ধি: প্রমাণের মূল্য তার যাচাইযোগ্যতায়; কম্পিউটার-নির্ভর প্রমাণ পুনরুৎপাদন আর formal verification-এর মাধ্যমে মানুষের প্রমাণের চেয়েও বেশি আস্থা অর্জন করতে পারে।

প্র ০৩Graph-এ কোনো ত্রিভুজ না থাকলেও কি অনেক রং লাগতে পারে? χ আর ω-এর ফাঁক কত বড় হতে পারে?

উপপাদ্য ২.২ বলে χ ≥ ω. স্বাভাবিক প্রশ্ন: χ বড় হলে কি কারণটি সবসময় একটি বড় clique? উত্তর নাটকীয়ভাবে না। ত্রিভুজহীন graph-এ ω = 2, অথচ χ যত খুশি বড় হতে পারে। Jan Mycielski ১৯৫৫ সালে একটি সরল নির্মাণ দেন বলে জানা যায়: একটি ত্রিভুজহীন graph G থেকে প্রতিটি vertex-এর একটি “ছায়া” vertex যোগ করুন (মূল vertex-এর প্রতিবেশীদের সঙ্গে যুক্ত), আর একটি নতুন vertex, যা সব ছায়ার সঙ্গে যুক্ত। নতুন graph-ও ত্রিভুজহীন, কিন্তু χ ঠিক এক বাড়ে। C5 (χ = 3) থেকে শুরু করলে প্রথম ধাপে ১১টি vertex-এর Grötzsch graph পাওয়া যায়, যার χ = 4.

Paul Erdős ১৯৫৯ সালে আরও জোরালো ফল দেন: যেকোনো g আর k-এর জন্য এমন graph আছে, যার সবচেয়ে ছোট cycle-এর দৈর্ঘ্য (girth) g-এর বেশি আর χ k-এর বেশি। অর্থাৎ প্রতিটি vertex-এর আশপাশ একটি tree-এর মতো দেখায়, তবু পুরো graph রং করতে অনেক রং লাগে। প্রমাণটি probabilistic method-এর একটি বিখ্যাত উদাহরণ: এলোমেলো graph-এ ছোট cycle কম আর বড় independent set নেই, তারপর কয়েকটি vertex সরিয়ে দেওয়া (পর্ব ৪৩)। শিক্ষা: χ একটি বৈশ্বিক ধর্ম, স্থানীয় পর্যবেক্ষণ দিয়ে তা ধরা যায় না।

উল্টো দিকে, যেসব graph-এ ফাঁক কখনো নেই, তাদের নাম perfect graph: প্রতিটি induced subgraph-এ χ = ω. Bipartite graph, interval graph (§৪-এর নোট) আর comparability graph এর উদাহরণ। Claude Berge ১৯৬০-এর দশকের শুরুতে অনুমান করেন যে কোনো graph perfect ঠিক তখন, যখন তাতে ৫ বা বেশি দৈর্ঘ্যের odd cycle বা তার complement induced subgraph হিসেবে নেই। Maria Chudnovsky, Neil Robertson, Paul Seymour আর Robin Thomas ২০০২ সালে এই strong perfect graph theorem প্রমাণ ঘোষণা করেন, প্রকাশ ২০০৬ সালে, বলে জানা যায়। Perfect graph-এ χ polynomial সময়ে বের করা যায়, যা সাধারণ graph-এ NP-hard; তাই এই শ্রেণি scheduling-এ খুব গুরুত্বপূর্ণ।

মূল উপলব্ধি: বড় clique বেশি রঙের একটি কারণ মাত্র, একমাত্র নয়; ত্রিভুজহীন graph-এও χ অসীম পর্যন্ত বাড়তে পারে, আর যেখানে χ = ω সবসময় সত্য, সেই perfect graph-গুলো তত্ত্ব ও প্রয়োগ দুই দিকেই বিশেষ।

প্র ০৪χ বের করা NP-hard হলে compiler আর পরীক্ষা-নিয়ন্ত্রণ অফিস প্রতিদিন colouring কীভাবে করে?

NP-hard মানে সব instance-এ দ্রুত নির্ভুল উত্তরের কোনো জানা পদ্ধতি নেই; বাস্তবের instance-এর বিশেষ গঠন থাকে, আর প্রায়ই “যথেষ্ট ভালো” উত্তরই যথেষ্ট। Register allocation-এ IBM-এর Gregory Chaitin ও সহকর্মীদের ১৯৮০-এর দশকের শুরুর কাজে একটি সরল নিয়ম ব্যবহার হয় বলে জানা যায়: R টি register থাকলে, R-এর কম degree-র কোনো চলককে graph থেকে সরিয়ে একটি stack-এ রাখুন, কারণ পরে তার প্রতিবেশীরা যেভাবেই রং পাক, তার জন্য একটি রং থাকবেই (উপপাদ্য ২.৩-এর যুক্তি)। এমন কেউ না থাকলে একটি চলককে spill-এর জন্য বাছুন। এটি ঠিক ছয় রঙের প্রমাণের কৌশল: ছোট degree-র vertex সরানো, বাকিটা রং করা, তারপর ফিরিয়ে আনা। আধুনিক SSA রূপের প্রোগ্রামে interference graph একটি বিশেষ শ্রেণির (chordal), যেখানে colouring polynomial সময়ে হয়, এ কথাও গবেষণায় দেখানো হয়েছে।

পরীক্ষার রুটিনে conflict graph-এ হাজারো vertex থাকে, সঙ্গে কক্ষের ধারণক্ষমতা, একজন শিক্ষার্থীর একদিনে দুটির বেশি পরীক্ষা নয় এমন শর্ত। বাস্তবে DSatur-এর মতো greedy দিয়ে শুরু করে local search (tabu search, simulated annealing) দিয়ে উন্নত করা হয়। একটি বড় clique একটি নিচের সীমা দেয় (§৪-এর ব্লকের মতো), তাই জানা যায় পাওয়া উত্তর সেরা থেকে কত দূরে।

মূল উপলব্ধি: কঠিনতার উপপাদ্য worst case-এর কথা বলে; বাস্তবের colouring চলে বিশেষ গঠন (interval, chordal), greedy, local search আর নিচের সীমার যুগলে, যেখানে এই পর্বের সরল প্রমাণগুলোই কৌশলের ভিত্তি।

প্র ০৫Chromatic polynomial-এ k-এর জায়গায় ঋণাত্মক সংখ্যা বসালে কি কোনো অর্থ থাকে? এই polynomial আর কী বলে?

সংজ্ঞায় k একটি রং-সংখ্যা, তাই ঋণাত্মক k অর্থহীন মনে হয়। কিন্তু P(G, k) একটি polynomial, তাই যেকোনো সংখ্যায় তার মান বের করা যায়, আর বিস্ময়করভাবে সেই মানের সমাবেশগত অর্থ থাকে। Richard Stanley ১৯৭৩ সালে প্রমাণ করেন বলে জানা যায়: (−1)n P(G, −1) = G-এর acyclic orientation-এর সংখ্যা, অর্থাৎ প্রতিটি edge-কে একটি দিক দেওয়ার যত উপায়ে কোনো directed cycle তৈরি হয় না।

C4-এ মিলিয়ে দেখুন: P(C4, k) = k4 − 4k3 + 6k2 − 3k, তাই P(C4, −1) = 1 + 4 + 6 + 3 = 14. অন্যদিকে ৪টি edge-এর মোট 24 = 16টি দিক-বিন্যাসের মধ্যে শুধু দুটি একটি directed cycle বানায় (সবাই ঘড়ির কাঁটার দিকে, বা সবাই উল্টো), তাই acyclic 16 − 2 = 14. মেলে (scratch-এ সব ১৬টি গুনে যাচাই করা)। প্রমাণের একটি পথ deletion–contraction: acyclic orientation-এর সংখ্যাও একই ধরনের recurrence মানে, শুধু চিহ্ন ভিন্ন।

Polynomial-এর মূল (root) নিয়েও গভীর ফল আছে। k = 0, 1, …, χ − 1 সবসময় মূল, কারণ সেখানে কোনো colouring নেই। ঋণাত্মক বাস্তব সংখ্যায় কোনো মূল নেই, আর (0, 1) ব্যবধানেও নেই; Bill Jackson ১৯৯৩ সালে দেখান (1, 32/27] ব্যবধানেও কোনো মূল থাকে না, বলে জানা যায়।

আরও সাধারণ রূপ Tutte polynomial, যা chromatic polynomial, spanning tree-র সংখ্যা (পর্ব ৬৭ “Spanning tree — DFS/BFS, minimum spanning tree আর Kirchhoff-এর গণনা”) আর পরিসংখ্যান পদার্থবিজ্ঞানের Potts model-কে একই কাঠামোয় আনে; সবগুলোরই মূল হাতিয়ার deletion–contraction.

মূল উপলব্ধি: একটি গণনাকে polynomial হিসেবে দেখলে তার মান আর মূল নতুন সমাবেশগত তথ্য দেয়; P(G, −1) acyclic orientation গোনে, আর deletion–contraction এই সব ফলের সাধারণ যন্ত্র।

অনুশীলন

আগে খাতায় করুন, তারপর উত্তর খুলে মেলান।

  1. প্রমাণ: m টি edge-এর যেকোনো graph G-এর জন্য প্রমাণ করুন χ(G)(χ(G) − 1)/2 ≤ m. কোন graph-এ সমতা হয়?
    1. χ = k ধরে একটি k-colouring নিন, colour class V1, …, Vk. — সংজ্ঞা
    2. দাবি: প্রতিটি জোড়া i ≠ j-এর জন্য Vi আর Vj-এর মধ্যে অন্তত একটি edge. না থাকলে Vi ∪ Vj independent, তাদের এক রং দিলে k − 1 রঙের proper colouring পাওয়া যেত, যা χ = k-এর বিরোধী। — contradiction
    3. জোড়া আছে C(k, 2) = k(k − 1)/2টি, প্রতিটি জোড়ার edge আলাদা (দুই প্রান্তের class জোড়াটি ঠিক করে)। তাই m ≥ k(k − 1)/2. ∎ — গণনা

    সমতা Kk-এ (আর তার সঙ্গে edge-হীন বিচ্ছিন্ন vertex যোগ করলে): K4-এ m = 6 = 4 · 3/2. C5-এ m = 5 ≥ 3 · 2/2 = 3, সমতা নয়। এ থেকে একটি দ্রুত সীমা: χ ≤ 1/2 + √(2m + 1/4).

  2. হিসাব: (ক) P(C5, k) বের করে k-এর ঘাতে বিস্তার করুন। (খ) পাঁচটি পরপর দিনে একটি চক্রাকার বৈঠক-সূচিতে (প্রতিটি বৈঠক তার আগের আর পরেরটির সঙ্গে সংঘাতে, প্রথম আর শেষটিও) ৩টি কক্ষ দিয়ে কতভাবে কক্ষ বণ্টন করা যায়? (গ) diamond graph (K4 থেকে একটি edge সরানো) এর P(G, k), P(G, 3) আর χ কত?

    (ক) উপপাদ্য ৭.৩(খ): P(C5, k) = (k − 1)5 − (k − 1) = k5 − 5k4 + 10k3 − 10k2 + 4k. দ্বিতীয় সহগ −5 = −m. (§৭-এর ব্লকের C5 সারির সঙ্গে মেলে।)

    (খ) সংঘাতের graph C5, কক্ষ = রং: P(C5, 3) = 25 − 2 = 30.

    (গ) Diamond দুটি ত্রিভুজ, যারা একটি edge uv ভাগ করে। u আর v-কে k(k − 1) ভাবে রং দিন; বাকি দুটি vertex প্রত্যেকে u আর v দুজনেরই প্রতিবেশী, আর পরস্পর যুক্ত নয়, তাই প্রত্যেকের k − 2টি বিকল্প: P = k(k − 1)(k − 2)2. P(3) = 3 · 2 · 1 = 6, P(2) = 0, তাই χ = 3. P(4) = 4 · 3 · 4 = 48 (scratch-এ সব রং-বিন্যাস গুনে মেলানো)।

  3. আউটপুট অনুমান: কোড না চালিয়ে বলুন কী ছাপা হবে, আর ফলটি graph-টির χ-এর তুলনায় কী বলে। তারপর যেকোনো Python-এ চালিয়ে মেলান।
    G = {'a1': {'b2', 'b3'}, 'a2': {'b1', 'b3'}, 'a3': {'b1', 'b2'},
         'b1': {'a2', 'a3'}, 'b2': {'a1', 'a3'}, 'b3': {'a1', 'a2'}}
    c = {}
    for v in ['a1', 'b1', 'a2', 'b2', 'a3', 'b3']:
        used = {c[u] for u in G[v] if u in c}
        c[v] = min(k for k in range(1, 7) if k not in used)
    print(c, max(c.values()))
    {'a1': 1, 'b1': 1, 'a2': 2, 'b2': 2, 'a3': 3, 'b3': 3} 3

    Graph-টি crown graph S3, আর জোড়ায় জোড়ায় ক্রমে greedy প্রতিটি ai, bi-কে রং i দেয়: মোট ৩টি রং। কিন্তু S3 আসলে ৬-cycle a1 – b2 – a3 – b1 – a2 – b3 – a1, যা জোড় cycle, তাই χ = 2. Greedy এখানে সেরার চেয়ে একটি বেশি রং নিয়েছে; Sn-এ এই পার্থক্য n − 2. আউটপুট CPython 3.14-এ চালিয়ে মেলানো।

  4. প্রমাণের ভুল ধরুন (Kempe, ১৮৭৯): চার রঙের “প্রমাণে” v-এর degree 5, প্রতিবেশী ঘড়ির কাঁটার দিকে v1, …, v5, রং 1, 2, 3, 4, 2 (রং 2 দুবার)। যুক্তি: (১) v1-এর 1-3 chain v3-তে না পৌঁছালে অদলবদল করে রং 1 খালি করুন। (২) v1-এর 1-4 chain v4-তে না পৌঁছালে একইভাবে 1 খালি। (৩) দুটিই পৌঁছালে 1-3 chain v2-কে v4 থেকে, আর 1-4 chain v5-কে v3 থেকে আলাদা করে; তাই v2-এর 2-4 chain-এ আর v5-এর 2-3 chain-এ অদলবদল করুন: v2 হয় 4, v5 হয় 3, রং 2 খালি। ধাপ (৩)-এর ভুল কোথায়?
    • কোন ক্ষেত্রে দুটি অদলবদল: Kempe দেখান, v1-এর 1-3 chain v3-তে আর 1-4 chain v4-তে পৌঁছালে, প্রথমটি v2-কে v4 থেকে আর দ্বিতীয়টি v5-কে v3 থেকে আলাদা করে (উপপাদ্য ৫.৩-এর ধাপ ৪–৫-এর যুক্তি)। তাই আলাদাভাবে দেখলে v2-এর 2-4 chain-এ অদলবদল বৈধ, আর v5-এর 2-3 chain-এ অদলবদলও বৈধ।
    • ভুল ধাপ: “দুটি একসঙ্গে” করা। প্রথম অদলবদল (2 ↔ 4) 1-4 chain-এর কিছু 4-রঙের vertex-কে 2 বানাতে পারে; তখন যে 1-4 chain v5-কে v3 থেকে আলাদা রাখত, তা ভেঙে যেতে পারে। ফলে দ্বিতীয় অদলবদলের সময় v5-এর 2-3 chain v3-তে পৌঁছাতে পারে, আর অদলবদলে v3 হয় 2: রং 2 আবার আটকে যায়। দুটি chain-এ সাধারণ vertex থাকলে একই vertex দুবার বদলাতেও পারে।
    • ইতিহাস: Heawood ১৮৯০ সালে এমন একটি নির্দিষ্ট planar graph দেখান, যেখানে ঠিক এটাই ঘটে, বলে জানা যায়। শিক্ষা: প্রতিটি ধাপ আলাদাভাবে বৈধ হলেও পরপর করলে আগের ধাপ পরেরটির অনুমান বদলে দিতে পারে; প্রতিটি অনুমান যে মুহূর্তে ব্যবহার হচ্ছে, তখন সত্য কি না দেখুন।

নিজেকে যাচাই করুন

ভুল হলে কারণসহ ব্যাখ্যা পাবেন, আবার চেষ্টাও করতে পারবেন।

ক্রমপাঁচ রঙের উপপাদ্যের প্রমাণের ধাপগুলো সঠিক ক্রমে সাজান (▲▼ চেপে সরান)

  1. Euler-এর সূত্র থেকে degree ≤ 5-এর একটি vertex v বেছে নেওয়া
  2. Induction hypothesis দিয়ে G − v-কে ৫ রঙে রং করা
  3. v-এর পাঁচ প্রতিবেশী পাঁচটি আলাদা রং পেয়েছে, এই কঠিন ক্ষেত্রটি ধরা
  4. v1-এর 1-3 Kempe chain v3-তে না পৌঁছালে অদলবদল; পৌঁছালে তা v-সহ একটি বন্ধ রেখা
  5. বন্ধ রেখা v2-কে v4 থেকে আলাদা করে, তাই v2-এর 2-4 chain-এ অদলবদল করে v-কে রং 2 দেওয়া

C5-এর পাঁচটি vertex-এর সঙ্গে যুক্ত একটি অতিরিক্ত hub vertex যোগ করে পাওয়া wheel graph W5-এর chromatic number কত?

  • 2
  • 3
  • 4
  • 6

সর্বোচ্চ degree Δ-এর একটি graph-এ vertex-গুলোকে যেকোনো ক্রমে সাজিয়ে greedy colouring চালানো হলো (প্রত্যেকে আগের প্রতিবেশীদের নেই এমন সবচেয়ে ছোট রং পায়)। কোন কথাটি সবসময় সত্য?

  • Greedy ঠিক χ(G)টি রং ব্যবহার করে
  • Greedy বড়জোর Δ + 1টি রং ব্যবহার করে
  • Greedy বড়জোর Δটি রং ব্যবহার করে
  • ক্রম খারাপ হলে colouring proper না-ও হতে পারে

৪টি vertex-এর cycle C4-কে ৩টি রং থেকে কতভাবে proper colouring করা যায় (রঙের নাম বদলালে আলাদা ধরা হয়)?

  • 18
  • 24
  • 6
  • 81

Crown graph Sn-এ (ai আর bj যুক্ত ঠিক যখন i ≠ j) ক্রম a1, b1, a2, b2, …, an, bn-এ greedy colouring চালালে কী হয়?

  • ২টি রং লাগে, কারণ graph-টি bipartite
  • colouring proper হয় না
  • n + 1টি রং লাগে
  • n টি রং লাগে, যদিও χ = 2

Planar graph-এর colouring সম্পর্কে নিচের কোন কথাটি সঠিক?

  • চার রঙের উপপাদ্যের একটি ছোট হাতের প্রমাণ Kempe ১৮৭৯ সালে দেন
  • ৫ রঙের উপপাদ্যের ছোট হাতের প্রমাণ আছে, আর ৪ রঙের প্রমাণ কম্পিউটার-নির্ভর
  • প্রতিটি planar graph ৩ রঙে রং করা যায়
  • Planar graph ৩ রঙে হয় কি না, তা সবসময় দ্রুত বলা যায়

৯×৯ Sudoku-কে graph হিসেবে দেখা হলো: প্রতিটি ঘর একটি vertex, আর একই সারি, কলাম বা ৩×৩ বাক্সের দুটি ঘরের মধ্যে edge. প্রতিটি vertex-এর degree কত?

  • 16
  • 24
  • 20
  • 9

শব্দকোষ

লেখার মধ্যে ডটেড দাগ দেওয়া শব্দে মাউস রাখুন বা চাপুন, অর্থ দেখাবে। এই পর্বের সব নতুন শব্দ এখানে একসাথে:

মনে রাখুন

  1. সংজ্ঞা আর দুই কাজ: proper colouring-এ কোনো edge-এর দুই প্রান্ত একই রং নয়; χ(G) = k দেখাতে একটি k-colouring আর k − 1 রঙে অসম্ভবতার যুক্তি দুটিই লাগে।
  2. সীমা: ω ≤ χ, n/α ≤ χ, আর greedy থেকে χ ≤ Δ + 1; Brooks বলে complete graph আর odd cycle ছাড়া connected graph-এ χ ≤ Δ.
  3. Greedy-র ক্রম: একটি ক্রমে greedy ঠিক χ দেয়, কিন্তু crown graph-এ খারাপ ক্রমে n টি রং নেয়; Welsh–Powell শুধু χ ≤ max min(di + 1, i)-এর নিশ্চয়তা দেয়।
  4. Planar: degree ≤ 5-এর vertex থেকে ৬ রং, Kempe chain অদলবদলে ৫ রং; ৪ রঙের উপপাদ্য সত্য, প্রমাণ কম্পিউটার-নির্ভর, আর Kempe-র ভুল ছিল দুটি অদলবদল একসঙ্গে করায়।
  5. Chromatic polynomial: P(G) = P(G − e) − P(G / e); P(Kn) = k(k − 1)⋯(k − n + 1), tree-তে k(k − 1)n−1, Cn-এ (k − 1)n + (−1)n(k − 1); χ = সবচেয়ে ছোট k, যাতে P(G, k) > 0.

পরের পর্বে: পর্ব ৬৪ “Matching — bipartite graph, Hall-এর উপপাদ্য আর stable matching”: কর্মীদের শিফটে বা রাইডারদের অর্ডারে জোড়া মেলানো, augmenting path দিয়ে সর্বোচ্চ matching, Hall-এর শর্তের প্রমাণ আর Gale–Shapley-র স্থিতিশীল জোড়ার গল্প।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

এই পর্বটি শেয়ার করুন:
এই পর্বে ভুল পেয়েছেন? জানান