- Minterm ํด๋์ค๋ ๊ฐ๊ฐ์ minterm๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํด๋์ค์ ๋๋ค. ๋ํ, Don't Care๋ ํฌํจํ๋ค.
- PITable ํด๋์ค๋ ๊ฐ๊ฐ์ minterm๋ฅผ ํฉ์น๊ณ ๋์ด์ ํฉ์น ์ ์๋ minterm๋ค์ ๊ฐ์ง๊ณ Pi Table๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
- LogicExpression ํด๋์ค๋ PiTable์์ EPI๋ฅผ ์ ๊ฑฐํ๊ณ , Row/Column Dominance๊น์ง ์งํํ ํ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ์ ์์ ๋, Petrick's Method๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ํด๋์ค์ ๋๋ค.
- Main ํด๋์ค๋ Minterm, PITable, LogicExpression ํด๋์ค๋ค์ ๊ฐ์ง๊ณ QuineโMcCluskey Algorithm๋ฅผ ๊ตฌํํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค.
minterm๊ณผ don't care๋ฅผ ์
๋ ฅ๋ฐ์ Minterm ๊ฐ์ฒด์ ๋ฐฐ์ด์ ๋ฃ๋๋ค.
// sorting
Collections.sort(dontCareNumbers);
minterm = Minterm.sort(minterm);์ ์ฝ๋๋ Minterm๋ค์ # of 1s๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ณ , ๋๊ฐ์ ๊ฒฝ์ฐ ๊ฐ Minterm์ ์ซ์ ๊ฐ์์ ๋ฐ๋ผ ์ ๋ ฌํ๋ค. ์ฆ, Grouping ๊ณผ์ ์ด๋ค.
boolean flag = true;
while(flag)
flag = combineImplicants(flag);์ ์ฝ๋๋ Minterm๋ค์ ๋์ด์ ํฉ์น ์ ์์ ๋๊น์ง ๊ณ์ ํฉ์น๋ค.
PITable pit = new PITable(notCombinedMinterm, origin_minterm, binarySize);์ ์ฝ๋๋ ๋์ด์ ๋ชปํฉ์น๋ Minterm, ์ฒ์ ์ ๋ ฅํ Minterms, binary Size๋ฅผ ์ ๋ ฅ๋ฐ์ PITable๋ฅผ ๊ตฌ์ฑํ๋ค.
pit.findEPI();์ ์ฝ๋๋ EPI๋ฅผ ์ฐพ๊ณ ์ ๊ฑฐํ๋ ๊ณผ์ ๊น์ง ํฌํจํ๋ค. ์ค์ ๋ก ๋ณด์ฌ์ค ๋ ์ ๊ฑฐํ ์ฑ๋ก ๋ณด์ธ๋ค.
if(pit.mintermValidation())
{
pit.printResult();
return;
}์ ์ฝ๋๋ EPI๋ง์ผ๋ก ๋ชจ๋ minterm๋ฅผ ์ปค๋ฒํ ์ ์๋์ง ํ ์คํธํ๊ณ , ๊ฐ๋ฅํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ค. ์คํจํ๋ค๋ฉด Step 3์ผ๋ก ๋์ด๊ฐ๋ค.
pit.columnDominace();
pit.rowDominace();
boolean validation = pit.mintermValidation();
if(validation == true)
{
pit.printResult();
return;
}์ ์ฝ๋๋ Row/Column Dominance๋ฅผ ์งํํ๊ณ , ๋ ๋ค์ minterm๋ฅผ ์ปค๋ฒํ ์ ์๋ ํ
์คํธํ๋ค.
์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ํ๊ธฐ ์ํด์ NEPI๋ฅผ ๋ฐ๋ก ํ๊ธฐํ์ง ์๊ณ , EPI ์ ๊ฑฐํ๋ฏ์ด ๋๊ฐ์ด ์์
ํ๋ค.
์ฌ๊ธฐ๊น์ง ๊ณผ์ ๋ง์ผ๋ก minterm๋ฅผ ์ปค๋ฒํ ์ ์์ผ๋ฉด ์ถ๋ ฅํ๊ณ ์ข
๋ฃํ๋ค. ์คํจํ๋ค๋ฉด Step 4์ผ๋ก ๋์ด๊ฐ๋ค.
Petrick's Method๋ฅผ ์ด์ฉํด ์์ ์ ๊ฐํ๊ณ , minimizeํ๊ณ , ๊ฐ์ฅ ์งง์ SOP์ EPI์ ํฉ์ณ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
minimize๊ณผ์ ์ X + XY = X๋ง ์ด์ฉํ๋ค. X + X๋ ํฌํจ๋์ด ์๊ณ , HashSet๋ฅผ ์ด์ฉํ๊ธฐ์ X * X์ ๊ฒฝ์ฐ๋ ๋ฐฐ์ ํ ์ ์๋ค.