package graphtea.extensions.reports.zagreb;
import graphtea.graph.graph.GraphModel;
import graphtea.graph.graph.RenderTable;
import graphtea.graph.graph.Vertex;
import graphtea.platform.lang.CommandAttitude;
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(GraphModel g) {
ZagrebIndexFunctions zif = new ZagrebIndexFunctions(g);
RenderTable ret = new RenderTable();
Vector<String> titles = new Vector<>();
titles.add(" M^2_1(G) ");
titles.add(" SR4 max ");
titles.add(" SR4 min ");
titles.add(" S3 max ");
titles.add(" S3 min ");
titles.add(" My FMC ");
titles.add(" Das FMC ");
titles.add(" S2 max ");
titles.add(" S2 min ");
titles.add(" My max ");
titles.add(" Das max ");
titles.add(" illc ");
ret.setTitles(titles);
double maxDeg = 0;
double maxDeg2 = 0;
double minDeg = Integer.MAX_VALUE;
ArrayList<Integer> al = AlgorithmUtils.getDegreesList(g);
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 : g) {
if(g.getDegree(v)==maxDeg) a++;
if(g.getDegree(v)==minDeg) b++;
}
if(maxDeg==minDeg) b=0;
double m = g.getEdgesCount();
double n = g.getVerticesCount();
double M12=zif.getSecondZagreb(1);
double M21=zif.getFirstZagreb(1);
double M22=zif.getSecondZagreb(2);
double Mm11=zif.getFirstZagreb(-2);
Vector<Object> v = new Vector<>();
v.add(M21);
//SR4 max
v.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
v.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
v.add(maxDeg*maxDeg +
maxDeg2*maxDeg2 +
((2*m-maxDeg-maxDeg2)/(n-2))
*(Mm11+2*m-(maxDeg+maxDeg2+(1/maxDeg) +(1/maxDeg2)))-(n-2));
//S3 min
v.add(maxDeg*maxDeg +
minDeg*minDeg +
((2*m-maxDeg-minDeg)/(n-2))
*(Mm11+2*m-(maxDeg+minDeg+(1/maxDeg) +(1/minDeg)))-(n-2));
//My FMC
v.add(Math.pow(maxDeg,2)+(Math.pow(2*m-maxDeg,2)/(n-1))
+ ((Math.pow(n-2,2)*Math.pow(maxDeg2-minDeg,2))/Math.pow(n-1,2)));
//Das FMC
v.add(Math.pow(maxDeg,2)+(Math.pow(2*m-maxDeg,2)/(n-1))
+ ((2*(n-2)*Math.pow(maxDeg2-minDeg,2))/Math.pow(n-1,2)));
//S2 max
v.add(maxDeg*maxDeg +
maxDeg2*maxDeg2 +
(((2*m-maxDeg-maxDeg2)*(n-2))/(Mm11-((1/maxDeg)+(1/maxDeg2)))));
//S2 min
v.add(maxDeg*maxDeg +
minDeg*minDeg +
(((2*m-maxDeg-minDeg)*(n-2))/(Mm11-((1/maxDeg)+(1/minDeg)))));
//My max
v.add(maxDeg*maxDeg +
maxDeg2*maxDeg2 +
(Math.pow(2*m-maxDeg-maxDeg2,2)/(n-2)));
//Das max
v.add(maxDeg*maxDeg +
minDeg*minDeg +
(Math.pow(2*m-maxDeg-minDeg,2)/(n-2)));
//illc
v.add(Math.pow(2*m,2)/(n));
ret.add(v);
return ret;
}
@Override
public String getCategory() {
// TODO Auto-generated method stub
return "Topological Indices-Conjectures";
}
}