diff --git a/Final M2 Lower b/Final M2 Lower new file mode 100644 index 00000000..c49c30d7 --- /dev/null +++ b/Final M2 Lower @@ -0,0 +1,144 @@ +package graphtea.extensions.reports.zagreb; + +import graphtea.graph.graph.RendTable; +import graphtea.graph.graph.Vertex; +import graphtea.platform.lang.CommandAttitude; +import graphtea.plugins.main.GraphData; +import graphtea.plugins.main.core.AlgorithmUtils; +import graphtea.plugins.reports.extension.GraphReportExtension; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Vector; + +/** + * @author Ali Rostami + */ + +@CommandAttitude(name = "finalm2conj", abbreviation = "_finalm2conj") +public class FinalNewM2Lower implements GraphReportExtension{ + public String getName() { + return "Final New M2 Lower"; + } + + public String getDescription() { + return " Final New M2 Lower "; + } + + public Object calculate(GraphData gd) { + ZagrebIndexFunctions zif = new ZagrebIndexFunctions(gd.getGraph()); + RendTable ret = new RendTable(); + ret.add(new Vector()); + ret.get(0).add(" M^2_1(G) "); + ret.get(0).add("SR4 max "); + ret.get(0).add("SR4 min "); + ret.get(0).add("S3 max "); + ret.get(0).add("My FMC "); + ret.get(0).add("Das FMC "); + ret.get(0).add("S2 max "); + ret.get(0).add("S2 min "); + ret.get(0).add("My max "); + ret.get(0).add("Das max "); + ret.get(0).add("illc"); + + double maxDeg = 0; + double maxDeg2 = 0; + double minDeg = Integer.MAX_VALUE; + + ArrayList al = AlgorithmUtils.getDegreesList(gd.getGraph()); + Collections.sort(al); + maxDeg = al.get(al.size()-1); + if(al.size()-2>=0) maxDeg2 = al.get(al.size()-2); + else maxDeg2 = maxDeg; + minDeg = al.get(0); + + if(maxDeg2 == 0) maxDeg2=maxDeg; + + double a=0; + double b=0; + + for(Vertex v : gd.getGraph()) { + if(gd.getGraph().getDegree(v)==maxDeg) a++; + if(gd.getGraph().getDegree(v)==minDeg) b++; + } + if(maxDeg==minDeg) b=0; + + double m = gd.getGraph().getEdgesCount(); + double n = gd.getGraph().getVerticesCount(); + + double M12=zif.getSecondZagreb(1); + double M21=zif.getFirstZagreb(1); + double M22=zif.getSecondZagreb(2); + double Mm11=zif.getFirstZagreb(-2); + + ret.add(new Vector()); + + ret.get(1).add(M21); + +//SR4 max + ret.get(1).add(maxDeg*maxDeg + + maxDeg2*maxDeg2 + + Math.pow((2*(m+1) - (n+maxDeg+maxDeg2) + + Math.sqrt((2*m-maxDeg-maxDeg2) + *(Mm11-((1/maxDeg)-(1/maxDeg2))))),2)/(n-2)); + +//SR4 min + ret.get(1).add(maxDeg*maxDeg + + minDeg*minDeg + + Math.pow((2*(m+1) - (n+maxDeg+minDeg) + + Math.sqrt((2*m-maxDeg-minDeg) + *(Mm11-((1/maxDeg)-(1/minDeg))))),2)/(n-2)); +//S3 max + ret.get(1).add(maxDeg*maxDeg + + maxDeg2*maxDeg2 + + ((2*m-maxDeg-maxDeg2)/(n-2)) + *(Mm11+2*m-(maxDeg+maxDeg2+(1/maxDeg) +(1/maxDeg2)))-(n-2)); + +//S3 min + ret.get(1).add(maxDeg*maxDeg + + minDeg*minDeg + + ((2*m-maxDeg-minDeg)/(n-2)) + *(Mm11+2*m-(maxDeg+minDeg+(1/maxDeg) +(1/minDeg)))-(n-2)); + +//My FMC + ret.get(1).add(Math.pow(maxDeg,2)+(Math.pow(2*m-maxDeg,2)/(n-1)) + + ((Math.pow(n-2,2)*(maxDeg2-minDeg))/Math.pow(n-1,2))); + +//Das FMC + ret.get(1).add(Math.pow(maxDeg,2)+(Math.pow(2*m-maxDeg,2)/(n-1)) + + ((2*(n-2)*(maxDeg2-minDeg))/Math.pow(n-1,2))); + +//S2 max + ret.get(1).add(maxDeg*maxDeg + + maxDeg2*maxDeg2 + + (((2*m-maxDeg-maxDeg2)*(n-2))/(Mm11-((1/maxDeg)+(1/maxDeg2))))); +//S2 min + ret.get(1).add(maxDeg*maxDeg + + minDeg*minDeg + + (((2*m-maxDeg-minDeg)*(n-2))/(Mm11-((1/maxDeg)+(1/minDeg))))); + +//My max + ret.get(1).add(maxDeg*maxDeg + + maxDeg2*maxDeg2 + + (Math.pow(2*m-maxDeg-maxDeg2,2)/(n-2))); + +//Das max + ret.get(1).add(maxDeg*maxDeg + + minDeg*minDeg + + (Math.pow(2*m-maxDeg-minDeg,2)/(n-2))); + + + //illc + ret.get(1).Math.pow(2*m,2)/(n))); + + + return ret; + } + + @Override + public String getCategory() { + // TODO Auto-generated method stub + return "Topological Indices"; + } +} +