Advertisement
Guest User

Untitled

a guest
May 2nd, 2016
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.08 KB | None | 0 0
  1. package tubular;
  2.  
  3. import java.util.Arrays;
  4.  
  5. public class tabular {
  6. int indexOfArr = 0;
  7. String alternatriveArr[];
  8. String essentialPrime = "";
  9. int indexOfEssentialPrime [];
  10. static String[] binn ;
  11. int onlyOneArray[];
  12. String [] strOfMaxCoverages = new String[10000];
  13. int[] arrOfMaxCoverages = new int[10000];
  14. int indexx = 0;
  15. int ref = 0;
  16. static String[] finum ;
  17. static String[] finum2 ;
  18. static String[] pprime=new String[20];
  19. static String[] fprimenum=new String[20];
  20. String[] prime = new String[20];
  21.  
  22. private void initalize (String []arr){
  23. alternatriveArr = new String[arr.length];
  24. System.arraycopy(arr, 0, alternatriveArr ,0, arr.length);
  25. onlyOneArray = new int[binn.length];
  26. Arrays.fill(onlyOneArray , -1);
  27. indexOfEssentialPrime = new int[arr.length];
  28. Arrays.fill(indexOfEssentialPrime , -1);
  29. Arrays.fill(arrOfMaxCoverages, -1);
  30. }
  31.  
  32. // parameter is string representing minterms of each term
  33. private int[] checkOnlyOne (String[] arr){
  34. // alternatriveArr = new String[arr.length];
  35.  
  36. // System.arraycopy(arr, 0, alternatriveArr ,0, arr.length);
  37. int i ;
  38. for(i =0 ;i<binn.length ;i++){
  39. int onlyOne = 0;
  40. int indexOfminTermMustToken = 0;
  41. boolean exist = false;
  42. for(int j =0 ;j<arr.length; j++){
  43. arr[j]=" "+arr[j]+" ";
  44. String a = " "+binn[i]+" ";
  45. if(arr[j].contains(a)){
  46. onlyOne++;
  47. indexOfminTermMustToken = j;
  48. }
  49. arr[j]=arr[j].trim();
  50. }
  51. // onlyOneArray contains numbers of minterms must be token
  52. if(onlyOne == 1){
  53. // remove repeted onlyOneArray
  54. for(int k =0 ;k< onlyOneArray.length;k++){
  55. if(onlyOneArray[k]==indexOfminTermMustToken){
  56. exist= true;
  57. break;
  58. }
  59. }
  60. if(!exist){
  61.  
  62. indexOfEssentialPrime[indexOfArr] = indexOfminTermMustToken;
  63. indexOfArr++;
  64. onlyOneArray[i]= indexOfminTermMustToken;
  65. removeTokenMinTermsFormStringArr(arr[indexOfminTermMustToken]);
  66. break;
  67. }
  68. }
  69. }
  70. if(i<binn.length)
  71. checkOnlyOne(alternatriveArr);
  72. return onlyOneArray;
  73. }
  74.  
  75. private void removeTokenMinTermsFormStringArr(String token){
  76. token = token.trim();
  77. token = token.replaceAll("\\s+", " ");
  78. String [] tokenn = token.split(" ");
  79. for(int k =0 ;k<alternatriveArr.length ;k++){
  80. alternatriveArr[k] = " " + alternatriveArr[k] +" ";
  81. for(int i=0;i<tokenn.length;i++){
  82. if(tokenn[i]!=" "){
  83. alternatriveArr[k] = alternatriveArr[k].replace(" "+tokenn[i]+ " "," ");
  84. }
  85. }
  86. //alternatriveArr[k] = alternatriveArr[k].trim();
  87. // alternatriveArr[k] = alternatriveArr[k].replaceAll("^ +", "$1");
  88. // alternatriveArr[k] = alternatriveArr[k].replaceAll(" +$", "$1");
  89. // alternatriveArr[k] = alternatriveArr[k].replaceAll("( )+", "$1");
  90. alternatriveArr[k] = alternatriveArr[k].replaceAll("\\s+", " ").trim();
  91.  
  92. /* alternatriveArr[k] = alternatriveArr[k].replace(" ", " ");
  93. alternatriveArr[k] = alternatriveArr[k].replace(" ", " ");
  94. alternatriveArr[k] = alternatriveArr[k].replace(" ", " ");
  95. alternatriveArr[k] = alternatriveArr[k].replace(" ", " "); */
  96. }
  97. }
  98.  
  99. private boolean IsAlternativeEmpty(String []arr){
  100. String term = "";
  101. boolean empty=true;
  102. for(int i =0 ;i<arr.length; i++){
  103. term = arr[i].trim();
  104. term = arr[i].replaceAll("( )+", "$1");
  105. if(!term.equals("")){
  106. empty=false;
  107. break;
  108. }
  109. }
  110. if(empty){
  111. return true;
  112. }
  113. else{
  114. return false;
  115. }
  116. }
  117.  
  118. private int findEssentialPrimeImplicants(String[] arr){
  119. if(IsAlternativeEmpty(arr)){
  120. return 0;
  121. }
  122. checkOnlyOne(arr);
  123. int maxnoOfCoverages = 0;
  124. int indexOfmaxnoOfCoverages = -1;
  125. int indexOfmaxnoOfCoverages2 = -1;
  126. boolean a =false;
  127. for(int i =0 ;i<arr.length;i++){
  128. int noOfcoverages = alternatriveArr[i].split(" ").length;
  129. if(alternatriveArr[i].equals("")){
  130. noOfcoverages = 0;
  131. }
  132. if(maxnoOfCoverages < noOfcoverages){
  133. maxnoOfCoverages = noOfcoverages;
  134. indexOfmaxnoOfCoverages = i;
  135. a= true;
  136. }
  137. }
  138.  
  139. /*
  140. int[] repetedOfsameCoverages = new int[alternatriveArr.length];
  141. Arrays.fill(repetedOfsameCoverages,-1);
  142. int inddex = 0;
  143. int totalCoverage = 0 ;
  144. boolean repeted = false;
  145. for(int k=0;k<alternatriveArr.length;k++){
  146. int noOfcoverages = alternatriveArr[k].split(" ").length;
  147. if(maxnoOfCoverages == noOfcoverages && indexOfmaxnoOfCoverages!= k){
  148. repeted=true;
  149. repetedOfsameCoverages[inddex]=k;
  150. inddex++;
  151. }
  152. }
  153.  
  154. if(repeted){
  155. for(int x=0;x<inddex;x++){
  156. String [] copyOfAlternative = new String[alternatriveArr.length];
  157. System.arraycopy(alternatriveArr, 0, copyOfAlternative, 0, alternatriveArr.length);
  158. int [] copyOfindexOfEssentialPrime = new int[indexOfEssentialPrime.length];
  159. System.arraycopy(indexOfEssentialPrime, 0, copyOfindexOfEssentialPrime, 0, indexOfEssentialPrime.length);
  160. int copyOfindexOfArr = indexOfArr;
  161. indexOfEssentialPrime[indexOfArr]=indexOfmaxnoOfCoverages;
  162. indexOfArr++;
  163. removeTokenMinTermsFormStringArr(alternatriveArr[repetedOfsameCoverages[x]]);
  164. // essentialPrime += indexOfmaxnoOfCoverages;
  165. totalCoverage = maxnoOfCoverages+ findEssentialPrimeImplicants(alternatriveArr);
  166. arrOfMaxCoverages[indexx]=totalCoverage;
  167. indexx++;
  168. System.arraycopy(copyOfAlternative, 0, alternatriveArr, 0, alternatriveArr.length);
  169. System.arraycopy(copyOfindexOfEssentialPrime, 0, indexOfEssentialPrime, 0, indexOfEssentialPrime.length);
  170. indexOfArr = copyOfindexOfArr;
  171. }
  172. }*/
  173. // else if(!repeted){
  174. if(a){
  175. indexOfEssentialPrime[indexOfArr]=indexOfmaxnoOfCoverages;
  176. indexOfArr++;
  177. removeTokenMinTermsFormStringArr(alternatriveArr[indexOfmaxnoOfCoverages]);
  178. essentialPrime += indexOfmaxnoOfCoverages;
  179.  
  180. }
  181. // totalCoverage = maxnoOfCoverages+ findEssentialPrimeImplicants(alternatriveArr);
  182. // }
  183. return 0;
  184.  
  185.  
  186.  
  187. // indexOfEssentialPrime[indexOfArr]=indexOfmaxnoOfCoverages;
  188. // indexOfArr++;
  189. // removeTokenMinTermsFormStringArr(alternatriveArr[indexOfmaxnoOfCoverages]);
  190. // essentialPrime += indexOfmaxnoOfCoverages;
  191. // int noOfterms = 1 + findEssentialPrimeImplicants(alternatriveArr);
  192.  
  193. }
  194.  
  195. private String[] removeDonotCare (String[] uncorrecttStr , String donotcare){
  196. String[] correctStr = new String[uncorrecttStr.length];
  197. String[] donotcareParts = donotcare.replaceAll("\\s+", " ").trim().split(" ");
  198. Arrays.fill(correctStr, "");
  199. for(int i=0;i<uncorrecttStr.length ;i++ ){
  200. String [] part = uncorrecttStr[i].replaceAll("\\s+", " ").trim().split(" ");
  201. for(int j=0 ;j<donotcareParts.length ;j++){
  202. for(int k=0 ;k<part.length ;k++){
  203. if(part[k].equals(donotcareParts[j])){
  204. part[k] = "";
  205. }
  206. }
  207. }
  208. for(int j = 0 ; j<part.length ; j++){
  209. correctStr[i]+= part[j] + " ";
  210. }
  211. correctStr[i] = correctStr[i].replaceAll("\\s+", " ").trim();
  212. }
  213. return correctStr;
  214. }
  215.  
  216. private String[] printEssentialImplicants(String[] binx){
  217. // generates inputs
  218. String[] printedForms = new String [binx.length];
  219. Arrays.fill(printedForms, "");
  220. for(int j = 0 ;j<indexOfArr ; j++){
  221. String current = binx[indexOfEssentialPrime[j]];
  222. for(int k=0 ;k< current.length();k++){
  223. if(current.charAt(k) == '0'){
  224. printedForms[j]+= Character.toChars(65+k)[0] + "'";
  225. }
  226. else if(current.charAt(k) == '1'){
  227. printedForms[j]+= Character.toChars(65+k)[0];
  228. }
  229. else if (current.charAt(k) == '-'){
  230. }
  231. }
  232. }
  233. return printedForms;
  234. }
  235.  
  236. public String[] min(String minterm, int input) {
  237. String bin[] = minterm.split(" ");
  238. pprime=bin;
  239. int num[]= new int[bin.length];
  240. String str[] = new String[bin.length];
  241. for (int i = 0; i < bin.length; i++) {
  242. num[i] = Integer.parseInt(bin[i]);
  243. str[i] = new String();
  244. str[i] = convertBinary(num[i]);
  245. // System.out.println(num[i]);
  246. int numberOfDigit = input - str[i].length();
  247. for (int j = 0; j < numberOfDigit; j++)
  248. str[i] = "0" + str[i];
  249. }
  250. // int d[i]=str[0].length()-str[0].replace("1", "").length();
  251. return str;
  252.  
  253. }
  254.  
  255. public String convertBinary(int num) {
  256. StringBuilder binary = new StringBuilder();
  257. while (num > 0) {
  258. binary.append(num % 2);
  259. num = num / 2;
  260. }
  261. binary.reverse();
  262. return binary.toString();
  263. }
  264. boolean flag=true;
  265. public String[] rec(String org[], int input, String [] bprime) {
  266. int k = 0;
  267. boolean[] check = new boolean[org.length];
  268. String[] res = new String[100];
  269. String[] primenum=new String[20];
  270. for (int h=0;h<org.length&&flag;h++){
  271.  
  272. System.out.println(org[h]+"<--->"+bprime[h]);
  273. }
  274. flag=false;
  275. System.out.println("---------------Next Step---------------");
  276.  
  277. String temp = new String();
  278. for (int i = org.length - 1; i >= 0; i--) {
  279. for (int j = i - 1; j >= 0; j--) {
  280. temp += Math.abs(Integer.parseInt(org[i]) - Integer.parseInt(org[j]));
  281. int numberOfDigit = Math.abs(input - temp.length());
  282. for (int h = 0; h < numberOfDigit; h++)
  283. temp = "0" + temp;
  284. if (temp.length() - temp.replace("1", "").length() == 1
  285. && temp.length() - temp.replace("0", "").length() == input - 1) {
  286. check[i] = true;
  287. check[j] = true;
  288. res[k] = new String();
  289. int indexx = temp.indexOf("1");
  290. primenum[k]=new String();
  291. primenum[k] = bprime[i]+" "+bprime[j];
  292. res[k] = org[i];
  293. res[k] = res[k].substring(0, indexx) + '5' + res[k].substring((indexx + 1));
  294. if (k!=0&&!res[k].equals(org[k-1]))
  295. System.out.println(res[k].replace('5', '-')+"<--->"+primenum[k]);
  296. k++;
  297. }
  298. temp = new String();
  299. }
  300. }
  301. for (int y = 0; y < org.length; y++) {
  302. if (!check[y]) {
  303. fprimenum[ref]=bprime[y];
  304. prime[ref] = new String();
  305. prime[ref] = org[y];
  306. ref++;
  307. }
  308. }
  309. String[] resanum = new String[k];
  310. String[] resa = new String[k];
  311. for (int l = 0; l < k; l++)
  312. {
  313. resanum[l]=primenum[l];
  314. resa[l] = res[l];
  315.  
  316. }
  317.  
  318. if (allfalse(check)) {
  319. String[] fiprime = new String[ref];
  320. finum = new String[ref];
  321. for (int i = 0; i < ref; i++) {
  322. fiprime[i] = new String();
  323. finum[i]=new String();
  324. finum[i]=fprimenum[i];
  325. fiprime[i] = prime[i];
  326. fiprime[i] = fiprime[i].replace('5', '-');
  327. }
  328.  
  329. fiprime = removeDuplicates(fiprime);
  330. return fiprime;
  331. }
  332.  
  333. else
  334.  
  335. return rec(resa, input,primenum);
  336.  
  337. }
  338.  
  339. private static boolean allfalse(boolean[] values) {
  340. for (boolean value : values) {
  341. if (value)
  342. return false;
  343. }
  344. return true;
  345. }
  346.  
  347. public static String[] removeDuplicates(String[] arr) {
  348.  
  349. int end = arr.length;
  350.  
  351. for (int i = 0; i < end; i++) {
  352. for (int j = i + 1; j < end; j++) {
  353. if (arr[i].equals(arr[j])) {
  354. int shiftLeft = j;
  355. for (int k = j + 1; k < end; k++, shiftLeft++) {
  356. arr[shiftLeft] = arr[k];
  357. finum[shiftLeft]=finum[k];
  358. }
  359. end--;
  360. j--;
  361. }
  362. }
  363. }
  364. finum2 = new String[end];
  365. String[] whitelist = new String[end];
  366. for (int i = 0; i < end; i++) {
  367. finum2[i] = finum[i];
  368. whitelist[i] = arr[i];
  369. }
  370. return whitelist;
  371. }
  372.  
  373. public static void main(String[] args) {
  374. tabular test = new tabular();
  375. // boolean [] arr={false ,false ,false ,false ,false ,false ,false
  376. // ,false ,false };
  377. // String bin[] = test.min("", 6);
  378. // String binx[] = test.rec(bin, 6, pprime);
  379. //
  380. // // System.out.println(allfalse(arr));
  381. // for (int i = 0; i < finum2.length; i++) {
  382. // System.out.println(finum2[i]+ " " +binx[i]);
  383.  
  384.  
  385. // run
  386. /* binn = "0 1 4 5 6 7 9 10 11 14 15".split(" ");
  387. String [] a = test.min("0 1 4 5 6 7 9 10 11 14 15", 4);
  388. String [] b = test.rec(a, 4, pprime);
  389. for (int i = 0; i < finum2.length; i++) {
  390. System.out.println(finum2[i]);
  391. }
  392. String d [] = test.removeDonotCare(finum2, "10 14");
  393. for (int i = 0; i < d.length; i++) {
  394. System.out.println(d[i]);
  395. }
  396. test.initalize(d);
  397. int n = test.findEssentialPrimeImplicants(d);
  398. String c [] = test.printEssentialImplicants(b);
  399. for (int i = 0; i < c.length; i++) {
  400. System.out.println(c[i]);
  401. } */
  402.  
  403. // binn = "1 2 3 4 5 6 7".split(" ");
  404. // String arr[] = {"1 5 7 6", "1 2 4 6" , "5 4 3" , "7 2 3"};
  405. // test.initalize(arr);
  406. // test.findEssentialPrimeImplicants(arr);
  407. // String c [] = test.printEssentialImplicants(arr);
  408. // for (int i = 0; i < c.length; i++) {
  409. // System.out.println(c[i]);
  410. // }
  411. //
  412.  
  413. binn = "0 1 3 7 11 12 13 15".split(" ");
  414. String [] a = test.min("0 1 3 7 11 12 13 15", 4);
  415. String [] b = test.rec(a, 4, pprime);
  416. // for (int i = 0; i < finum2.length; i++) {
  417. // System.out.println(finum2[i]);
  418. // }
  419. // System.out.println("");
  420. //String d [] = test.removeDonotCare(finum2, "3 13 15");
  421. /*for (int i = 0; i < d.length; i++) {
  422. System.out.println(d[i]);
  423. }*/
  424. // test.initalize(d);
  425. // int n = test.findEssentialPrimeImplicants(d);
  426. // String c [] = test.printEssentialImplicants(b);
  427. /* for (int i = 0; i < c.length; i++) {
  428. System.out.println(c[i]);
  429. }*/
  430.  
  431.  
  432.  
  433. }
  434. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement