Плотные подграфы в рыночном графе для России, в частности квази-клик
Использование теории графов для описания фондового рынка России. Экономические и финансовые сети. Понятие и применение графа рынка. Способы анализа графа рынка. Нахождение максимальной клики и максимального независимого множества. Задача о квази-клике.
Рубрика | Финансы, деньги и налоги |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 30.01.2016 |
Размер файла | 318,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
2. Allen F., Babus A. Networks in finance. - 2008.
3. Balaji S., Swaminathan V., Kannan K. A simple algorithm to optimize maximum independent set //Advanced Modeling and Optimization. - 2010. - Т. 12. - №. 1. - С. 107-118.
4. Bautin G. A., Kalyagin V.A., Koldanov A.P., Koldanov P., Pardalos P.M.. Simple measure of similarity for the market graph construction //Computational Management Science. - 2013. - Т. 10. - №. 2-3. - С. 105-124.
5. Boginski V., Butenko S., Pardalos P. M. On structural properties of the market graph //Innovations in financial and economic networks. - 2003. - С. 29-45.
6. Boginski V., Butenko S., Pardalos P. M. Statistical analysis of financial networks //Computational statistics & data analysis. - 2005. - Т. 48. - №. 2. - С. 431-443.
7. Boginski V., Butenko S., Pardalos P. M. Mining market data: a network approach //Computers & Operations Research. - 2006. - Т. 33. - №. 11. - С. 3171-3184.
8. Bomze I. M. et al. The maximum clique problem //Handbook of combinatorial optimization. - Springer US, 1999. - С. 1-74.
9. Brunato M., Hoos H. H., Battiti R. On effectively finding maximal quasi-cliques in graphs //Learning and Intelligent Optimization. - Springer Berlin Heidelberg, 2008. - С. 41-55.
10. Elliott M., Golub B., Jackson M. O. Financial networks and contagion //Available at SSRN 2175056. - 2014.
11. Gai P., Kapadia S. Contagion in financial networks //Proceedings of the Royal Society of London A: Mathematical, Physical and Engineering Sciences. - The Royal Society, 2010. - С. rspa20090410.
12. Koldanov A. P. et al. Statistical procedures for the market graph construction //Computational Statistics & Data Analysis. - 2013. - Т. 68. - С. 17-29.
13. Liu G., Wong L. Effective pruning techniques for mining quasi-cliques //Machine Learning and Knowledge Discovery in Databases. - Springer Berlin Heidelberg, 2008. - С. 33-49.
14. Mantegna R., Stanley H. E. An Introduction to Econophysics: Correlations and Complexity in Finance, 2000 //Cambridge University Press, Cambridge. Citado. - 2005. - Т. 7. - С. 26-34.
15. Michael R. G., David S. J. Computers and intractability: a guide to the theory of NP-completeness //WH Freeman & Co., San Francisco. - 1979.
16. Pajouh F. M., Miao Z., Balasundaram B. A branch-and-bound approach for maximum quasi-cliques //Annals of Operations Research. - 2014. - Т. 216. - №. 1. - С. 145-161.
17. Pattillo J. et al. On the maximum quasi-clique problem //Discrete Applied Mathematics. - 2013. - Т. 161. - №. 1. - С. 244-257.
18. Soffer S. N., Vazquez A. Network clustering coefficient without degree-correlation biases //PHYSICAL REVIEW-SERIES E-. - 2005. - Т. 71. - №. 5. - С. 057101.
19. Vizgunov A. et al. Network approach for the Russian stock market //Computational Management Science. - 2014. - Т. 11. - №. 1-2. - С. 45-55.
20. Zeng Z. et al. Coherent closed quasi-clique discovery from large dense graph databases //Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining. - ACM, 2006. - С. 797-802.
21. Буренин А.Н. Рынок ценных бумаг и производных финансовых инструментов: учеб. пособие / А. Н. Буренин; Ин-т "Открытое общество". - М.: 1 Федеративная Книготорговая Компания, 1998. - 348 с. - ISBN 5-7814-0070-2.
22. Визгунов А.Н., Трифонов Ю. В. Применение модели графа доходностей для анализа фондового рынка //ВЕСТНИК НИЖЕГОРОДСКОГО УНИВЕРСИТЕТА ИМ. НИ ЛОБАЧЕВСКОГО. - 2013. - №. 6-1.
23. Задача о клике // Википедия. [2013--2013]. Дата обновления: 14.03.2013. URL: http://ru.wikipedia.org/?oldid=53537169 (дата обращения: 14.03.2013).
24. Кудрин А., Правительства PФ З. П. Россия и мировой финансовый кризис //Вопросы экономики. - 2009. - №. 1. - С. 7-10.
25. Медвежье царство Ведомости (FT) № 193 (2215) 13 октября 2008
26. НИЯЗБЕКОВА Ш. У. Становление и развитие фондового рынка в Российской Федерации и Республике Казахстан //ИЗВЕСТИЯ ОРЕНБУРГСКОГО ГОСУДАРСТВЕННОГО АГРАРНОГО УНИВЕРСИТЕТА. - 2014. - №. 1.
Приложение
Приложение 1
Программный код.
Парсер входных данных Parser.java:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.collections.map.MultiValueMap;
import au.com.bytecode.opencsv.CSV;
import au.com.bytecode.opencsv.CSVReadProc;
public class Parser extends Base {
public static HashMap<String, double[]> rentMap = new HashMap<String, double[]>();
public static MultiValueMap mvMap = new MultiValueMap();
public static MultiValueMap[] mvMapArr = new MultiValueMap[11];
public static String[] indexes; // ordered indexes
public static double rentPerDay(double current, double previous) {
return Math.log(current / previous);
}
public static double rentMean(double... rents) {
double rentMean = 0;
if (rents.length > 0) {
for (double curr: rents) {
rentMean += curr;
}
return rentMean / rents.length;
}
return 0;
}
public static double var(double... rents) {
double var = 0;
double mean = rentMean(rents);
for (double curr: rents) {
var += Math.pow(curr - mean, 2);
}
return var / rents.length;
}
public static double[] arrayMult(double[] first, double[] second) {
double[] result = new double[first.length];
if (first.length == second.length) {
for (int i = 0; i < first.length; i++) {
result[i] = first[i] * second[i];
}
}
return result;
}
public static String[] getIndexes() {
return indexes;
}
public static double[] countRents(double[] prices) {
int l = prices.length - 1;
double[] result = new double[l];
result[0] = 1;
for (int i = 0; i < l; i++) {
result[i] = rentPerDay(prices[i + 1], prices[i]);
// System.out.print("R" + i + "=" + result[i] + " ");
}
// System.out.println();
return result;
}
public static double[][] cor(HashMap<String, double[]> rentM, String[] inds) {
debugn("Correlations:");
// logn("- corrs start time");
int l = inds.length;
double[][] result = new double[l][l];
for (int i = 0; i < l; i++) {
for (int j = 0; j < l; j++) {
if (inds[i] == inds[j]) {
result[i][j] = 0;
} else {
double[] rents1 = rentM.get(inds[i]);
double[] rents2 = rentM.get(inds[j]);
result[i][j] = (rentMean(arrayMult(rents1, rents2)) - rentMean(rents1)
* rentMean(rents2))
/ Math.sqrt(var(rents1) * var(rents2));
}
}
}
// logn("- corrs finish time");
return result;
}
public static double[] convertDoubles(Object doubles) {
List<Double> dbs = (List<Double>) doubles;
int i = 0;
double[] ret = new double[dbs.size()];
Iterator<Double> iterator = dbs.iterator();
while (iterator.hasNext()) {
ret[i] = iterator.next().doubleValue();
i++;
}
return ret;
}
public static MultiValueMap[] parseCSV(String filename, String startDate1,
String endDate1, String startDate2, String endDate2,
String startDate3, String endDate3, String startDate4,
String endDate4, String startDate5, String endDate5,
String startDate6, String endDate6, String startDate7,
String endDate7, String startDate8, String endDate8,
String startDate9, String endDate9, String startDate10,
String endDate10, String startDate11, String endDate11)
throws ParseException {
log("Parsing CSV file");
final SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
final Date dateStart1 = sdf.parse(startDate1);
final Date dateEnd1 = sdf.parse(endDate1);
final Date dateStart2 = sdf.parse(startDate2);
final Date dateEnd2 = sdf.parse(endDate2);
final Date dateStart3 = sdf.parse(startDate3);
final Date dateEnd3 = sdf.parse(endDate3);
final Date dateStart4 = sdf.parse(startDate4);
final Date dateEnd4 = sdf.parse(endDate4);
final Date dateStart5 = sdf.parse(startDate5);
final Date dateEnd5 = sdf.parse(endDate5);
final Date dateStart6 = sdf.parse(startDate6);
final Date dateEnd6 = sdf.parse(endDate6);
final Date dateStart7 = sdf.parse(startDate7);
final Date dateEnd7 = sdf.parse(endDate7);
final Date dateStart8 = sdf.parse(startDate8);
final Date dateEnd8 = sdf.parse(endDate8);
final Date dateStart9 = sdf.parse(startDate9);
final Date dateEnd9 = sdf.parse(endDate9);
final Date dateStart10 = sdf.parse(startDate10);
final Date dateEnd10 = sdf.parse(endDate10);
final Date dateStart11 = sdf.parse(startDate11);
final Date dateEnd11 = sdf.parse(endDate11);
for (int k = 0; k < 11; k++) {
mvMapArr[k] = new MultiValueMap();
}
CSV csv = CSV.separator(';') // delimiter of fields
.quote('"') // quote character
.create(); // new instance is immutable
out(".");
csv.read(filename, new CSVReadProc() {
public void procRow(int rowIndex, String... values) {
try {
if (sdf.parse(values[1]).compareTo(dateStart1) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd1) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[0].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart2) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd2) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[1].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart3) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd3) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[2].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart4) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd4) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[3].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart5) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd5) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[4].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart6) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd6) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[5].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart7) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd7) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[6].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart8) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd8) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[7].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart9) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd9) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[8].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart10) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd10) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[9].put(values[0], Double.valueOf(s));
}
}
if (sdf.parse(values[1]).compareTo(dateStart11) >= 0
&& sdf.parse(values[1]).compareTo(dateEnd11) <= 0) {
// debugn("i="+i);
if (null != values[2] && !values[2].isEmpty()) {
String s = values[2].replaceAll(",", ".");
mvMapArr[10].put(values[0], Double.valueOf(s));
}
}
} catch (NumberFormatException | ParseException e) {
e.printStackTrace();
}
}
});
out(".\n");
return mvMapArr;
}
public static double[][] parseData(MultiValueMap mvMap) {
indexes = new String[mvMap.keySet().size()];
// Iterate using keys
Iterator iter = mvMap.keySet().iterator();
int i = 0;
while (iter.hasNext()) {
indexes[i] = iter.next().toString();
// debugn("indexes[" + i + "]: " + indexes[i]);
i++;
}
for (int k = 0; k < indexes.length; k++) {
// debugn("mvMap: " + mvMap.get(indexes[k]));
rentMap.put(indexes[k],
countRents(convertDoubles(mvMap.get(indexes[k]))));
}
double[][] corrs = cor(rentMap, indexes);
// print graph
int indi;
int indj = 0;
for (double[] d: corrs) {
indi = 0;
for (double s: d) {
if (s > 0.5) {
debug(indexes[indi] + " and " + indexes[indj] + "; ");
} else {
// logDebug(0 + " ");
}
indi++;
}
indj++;
debugn("");
}
out(".");
return corrs;
}
}
Вспомогателный файл Base.java для логирования в различных форматах:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
public abstract class Base {
private static boolean DEBUG = false;
private static DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS");
public static void log(String text) {
System.out.print(formatter.format(System.currentTimeMillis()) + ": " + text);
}
public static void logn(String text){
System.out.println(formatter.format(System.currentTimeMillis()) + ": " + text);
}
public static void debug(String text){
if(DEBUG){
System.out.print(text);
}
}
public static void debugn(String text){
if(DEBUG){
System.out.println(text);
}
}
public static void out(String text){
System.out.print(text);
}
}
Вспомогательный файл Parameters.java для работы алгоритма:
import java.util.ArrayList;
import java.util.List;
public class Parameters {
private int degree;
private List<String> adjVertices;
public Parameters(){
degree=0;
adjVertices=new ArrayList<String>();
}
public Parameters(int degree, List<String> adjVertices){
this.degree=degree;
this.adjVertices=adjVertices;
}
public void setDegree(int degree){
this.degree=degree;
}
public int getDegree(){
return degree;
}
public void addAdjVertex(String vert){
this.adjVertices.add(vert);
}
public void addAdjVerteces(List<String> adjVertices){
this.adjVertices.addAll(adjVertices);
}
public List<String> getAdjVertices(){
return adjVertices;
}
public String toString(){
return "degree=" + degree + " adjVertices="+ adjVertices.toString();
}
}
Основной файл QuasiCliqueFinder.java содержит эвристику поиска квази-клик, набор входных данных и обработку результатов:
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.TreeMap;
import org.apache.commons.collections.map.MultiValueMap;
public class QuasiCliqueFinder extends Base {
public static double CORRELATION_THRESHOLD = 0.5;
public static double DENSITY_THRESHOLD = 1;
public static double calculateDensity(int edgescount, int vertexcount) {
return (double) edgescount / ((vertexcount * (vertexcount - 1)) / 2);
}
public static void printGraph(int[][] graph, String[] indexes) {
System.out.print("\t");
for (int i = 0; i < indexes.length; i++) {
System.out.print(indexes[i] + "\t");
}
System.out.println();
int indj = 0;
for (int[] d: graph) {
System.out.print(indexes[indj] + "\t");
for (int s: d) {
System.out.print(s + "\t");
}
indj++;
System.out.println();
}
}
private static int[][] cutCorrs(double[][] corrs, double threshold) {
int l = corrs.length;
int[][] result = new int[l][l];
int indi;
int indj = 0;
for (double[] d: corrs) {
indi = 0;
for (double s: d) {
if (s > threshold) {
result[indi][indj] = 1;
} else {
result[indi][indj] = 0;
}
indi++;
}
indj++;
}
return result;
}
public static void main(String[] args) throws ParseException {
/*
* logn("Simple test data:"); String[] indexes = new String[] { "1",
* "2", "3", "4", "5", "6", "7", "8" }; int[][] multi = new int[][] { {
* 0, 1, 1, 0, 0, 0, 1, 0 },// 1 { 1, 0, 1, 0, 0, 0, 0, 1 },// 2 { 1, 1,
* 0, 0, 0, 0, 0, 1 },// 3 { 0, 0, 0, 0, 0, 0, 0, 1 },// 4 { 0, 0, 0, 0,
* 0, 0, 0, 1 },// 5 { 0, 0, 0, 0, 0, 0, 0, 0 },// 6 { 1, 0, 0, 0, 0, 0,
* 0, 1 },// 7 { 0, 1, 1, 1, 1, 0, 1, 0 } // 8 }; List<String> clique =
* findQuasiClique(multi, indexes, ""); logn("quasi clique = " +
* clique.toString());
*/
// logn("Market data:");
// Table of correlations
MultiValueMap[] mvMapArr = Parser.parseCSV("data1.csv", "01.09.2007",
"11.09.2009", "13.11.2007", "23.11.2009", "31.01.2008",
"09.02.2010", "14.04.2008", "22.04.2010", "27.06.2008",
"06.07.2010", "05.09.2008", "14.09.2010", "21.11.2008",
"24.11.2010", "09.02.2009", "11.02.2011", "22.04.2009",
"26.04.2011", "06.07.2009", "08.07.2011", "14.09.2009",
"16.09.2011");
log("Preparing 11 market graphs for analysis");
double[][][] corrs = new double[11][][];
int[][][] marketGraph = new int[11][][];
for (int c = 0; c < 11; c++) {
corrs[c] = Parser.parseData(mvMapArr[c]);
marketGraph[c] = cutCorrs(corrs[c], CORRELATION_THRESHOLD);
}
out("\n");
for (int q = 0; q < 11; q++) {
int maxsize = 0;
// int counter = 0;
List<List<String>> maxclique = new ArrayList<List<String>>();
for (String s: Parser.indexes) {
for (int i = 0; i < 100; i++) {
List<String> qclique = findQuasiClique(marketGraph[q],
Parser.indexes, s);
if (qclique.size() > maxsize) {
maxsize = qclique.size();
maxclique = new ArrayList<List<String>>();
maxclique.add(qclique);
// counter = 1;
} else if (qclique.size() == maxsize) {
// counter++;
maxclique.add(qclique);
}
}
}
// Sort items
for (int i = 0; i < maxclique.size(); i++) {
Collections.sort(maxclique.get(i));
}
Set<String> union = new HashSet<String>();
Set<List<String>> unique = new HashSet<List<String>>(maxclique);
Iterator iter = unique.iterator();
logn("Period=" + (q + 1) + ",Size=" + maxsize + ",Found="
+ unique.size());
int i = 0;
while (iter.hasNext()) {
List<String> curr = (List<String>) iter.next();
union.addAll(curr);
out("Quasi Clique[" + i + "]=" + curr + "\n");
i++;
}
List<String> sortedUnion = new ArrayList<String>(union);
Collections.sort(sortedUnion);
out("Union=" + sortedUnion + "\n");
out("Union Size=" + union.size() + "\n");
}
// out(maxsize+"\t");
logn("End of execution");
}
private static List<String> findQuasiClique(int[][] marketGraph,
String[] indexes, String startNode) {
// future result
List<String> clique = new ArrayList<String>();
int n_clique_e = 0;
// Getting degree of every vertex
Map<String, Parameters> vertexDegreesMap = getVerticesDegrees(
marketGraph, indexes);
Iterator<String> iter = vertexDegreesMap.keySet().iterator();
// int i = 0;
while (iter.hasNext()) {
String cur = iter.next().toString();
debug("[" + cur + ": " + vertexDegreesMap.get(cur).toString()
+ "]; ");
}
String startPoint = "";
List<String> currentArray = new ArrayList<String>();
// if start node is empty getting random, otherwise using suggested one
if (startNode.isEmpty()) {
out("Random start node will be used\n");
// Searching for max degree
Iterator<String> iter2 = vertexDegreesMap.keySet().iterator();
String maxDegName = "";
int maxDeg = 0;
while (iter2.hasNext()) {
String cur = iter2.next().toString();
if (vertexDegreesMap.get(cur).getDegree() > maxDeg) {
maxDeg = vertexDegreesMap.get(cur).getDegree();
maxDegName = cur;
}
}
debugn("\nName of max degree is " + maxDegName + "; Max degree is "
+ maxDeg);
// Getting 1 random vertex with degree higher then threshold
// threshold
double degreeThreshold = maxDeg / 2 + maxDeg / 4;
debugn("degreeThreshold: " + degreeThreshold);
Iterator<String> iter3 = vertexDegreesMap.keySet().iterator();
while (iter3.hasNext()) {
String cur = iter3.next().toString();
if (vertexDegreesMap.get(cur).getDegree() >= degreeThreshold) {
currentArray.add(cur);
// debug(cur + ", ");
}
}
debugn("currentArray1=" + currentArray.toString());
final Random random = new Random();
int index = random.nextInt(currentArray.size());
debugn("index=" + index);
startPoint = currentArray.get(index);
debugn("startPoint=" + startPoint);
} else {
startPoint = startNode;
}
// Add start node into the result
clique.add(startPoint);
// Update currentArray with only vertices adjusted to start node
currentArray = vertexDegreesMap.get(startPoint).getAdjVertices();
debugn("currentArray2=" + currentArray.toString());
// now we will be checking all nodes adjusted to our clique iteratively
// we will add only vertices that satisfy our density condition
while (true) {
Iterator<String> iter4 = currentArray.iterator();
List<String> accepted = new ArrayList<String>();
while (iter4.hasNext()) {
String curr = iter4.next();
// skip all node that are already in clique
if (!clique.contains(curr)) {
int numofadjverts = 0;
// check how much vertices from current clique are adjusted
// to current node
List<String> adjNodes = vertexDegreesMap.get(curr)
.getAdjVertices();
for (String s: adjNodes) {
if (clique.contains(s)) {
numofadjverts++;
}
}
// Checking if density condition is true and adding vertex
// to
// the list of accepted
if (n_clique_e != 0) {
debugn("Clique.size()=" + clique.size()
+ " n_clique_e=" + n_clique_e
+ " numofadjverts=" + numofadjverts);
debugn("Node=" + curr + ", Expected density="
+ (double) (2 * (n_clique_e + numofadjverts))
/ ((clique.size() + 1) * (clique.size())));
if ((double) (2 * (n_clique_e + numofadjverts))
/ ((clique.size() + 1) * (clique.size())) >= DENSITY_THRESHOLD) {
accepted.add(curr);
}
} else {
accepted.add(curr);
}
}
}
if (accepted.size() == 0) {
break;
}
// Getting one random vertex from accepted list and adding into the
// clique
// and also updating number of edges in our current clique
final Random random2 = new Random();
int index2 = random2.nextInt(accepted.size());
List<String> adjVerts2 = vertexDegreesMap.get(accepted.get(index2))
.getAdjVertices();
int numofadjverts = 0;
for (String s: adjVerts2) {
if (clique.contains(s)) {
numofadjverts++;
}
}
// we prevent adding in the list nodes that are already their so
// it should be safe just to add new node
clique.add(accepted.get(index2));
// number of edges in graph is increased on number of new
// connections
n_clique_e += numofadjverts;
debugn("n_clique_e = " + n_clique_e);
debugn("clique = " + clique.toString());
Iterator<String> adjIter = vertexDegreesMap
.get(accepted.get(index2)).getAdjVertices().iterator();
while (adjIter.hasNext()) {
String curr = adjIter.next();
if (!currentArray.contains(curr)) {
currentArray.add(curr);
}
}
}
return clique;
}
private static Map<String, Parameters> getVerticesDegrees(
int[][] marketGraph, String[] indexes) {
Map<String, Parameters> resultMap = new TreeMap<String, Parameters>();
Parameters params;
int indi;
int indj = 0;
for (int[] d: marketGraph) {
params = new Parameters();
indi = 0;
for (int s: d) {
if (s == 1) {
params.addAdjVertex(indexes[indi]);
params.setDegree(params.getDegree() + 1);
}
indi++;
}
resultMap.put(indexes[indj], params);
indj++;
}
return resultMap;
}
}
Размещено на Allbest.ru
...Подобные документы
Формирование финансового рынка Германии и характеристика денежного рынка. Характеристика рынка ценных бумаг государства. Аналитический обзор фондового рынка Германии по процентному изменению индекса DAX. Финансовые институты и их основное применение.
реферат [83,8 K], добавлен 24.11.2008Анализ рынка ценных бумаг, фондового рынка России и влияния финансового кризиса на экономику страны. Ключевые российские фондовые индексы, акции нефтегазовых, металлургических и электроэнергетических компаний, банков. Прогноз рынка ценных бумаг России.
контрольная работа [479,4 K], добавлен 15.06.2010Фондовый рынок как составная часть инфраструктуры рыночной экономики. Существующие методы анализа фондового рынка и нормативно-правовое регулирование. Фондовая биржа. Внебиржевой рынок. Анализ фондового рынка Украины и перспективы его развития.
курсовая работа [424,0 K], добавлен 29.09.2007Исследование фондового рынка Украины, анализ динамики его развития, выявление перспектив. Характеристика фондового рынка как элемента финансового рынка, первичный и вторичный рынок ценных бумаг. Развитие законодательной базы, регулирующей фондовый рынок.
курсовая работа [383,3 K], добавлен 02.03.2010Денежная масса как один из важнейших показателей, характеризующих денежно-кредитную сферу. Агрегированные (суммарные) показатели объема и структуры денежной массы. Структура агрегата "Квази-деньги". Денежная база как важнейший компонент денежной массы.
контрольная работа [35,6 K], добавлен 04.02.2010Классификация, инструменты, сущность и признаки финансового рынка. Структура и организация рынка ценных бумаг, их виды. Становление финансовых институтов и инвестиционных фондов в Российской Федерации. Структура фондового рынка и его назначение.
курсовая работа [89,8 K], добавлен 19.12.2011Общерыночные и специфические функции финансового рынка. Фондовый, кредитный и валютный рынок. Отличительные особенности биржевого рынка. Характеристика основных сегментов финансового рынка. Состояние финансового рынка России в условиях мирового кризиса.
курсовая работа [144,1 K], добавлен 08.11.2010Раскрытие экономической сущности и изучение организационной структуры рынка ценных бумаг России, его место в системе рынков. Направления государственного регулирования рынка ценных бумаг в РФ. Реформирование и перспективы развития фондового рынка РФ.
курсовая работа [44,8 K], добавлен 13.06.2014Краткая история возникновения фондового рынка. Использование технического анализа для прогнозирования биржевых цен. Типы графиков движения рынка. Понятие ценового тренда. Стратегии торговли фьючерсными контрактами, использования опционов и хеджирования.
дипломная работа [816,2 K], добавлен 23.10.2011Понятие и содержание, преимущества и недостатки электронной торговли. Сущность рынка ценных бумаг, его функции, модели и классификационные признаки, проблемы и перспективы. Информационное обеспечение фондового рынка. Тенденции его развития в России.
курсовая работа [30,7 K], добавлен 10.12.2014Понятие, типы и элементы денежной системы в экономической теории. Общая характеристика и классификация товарных и металлических денежных систем. Анализ развития денежного рынка как составляющей финансового рынка в России, а также его состояния в 2007 г.
курсовая работа [486,7 K], добавлен 25.02.2010Источники, масштабы и направления движения потоков валютно-финансовых средств между российской экономикой и остальным миром. Понятие и структура инвестиционного рынка, его конъюнктура. Оценка инвестиционного рынка в России. Договор финансового лизинга.
курсовая работа [55,5 K], добавлен 09.11.2012Понятие денежного рынка, его агрегаты и процессы регулирования. Принцип действия эффекта денежного мультипликатора. Спрос на деньги, его виды и факторы. Сравнительный анализ особенностей российского денежного рынка и валютного рынка зарубежных стран.
курсовая работа [91,8 K], добавлен 28.01.2010Характеристика фондового рынка как элемента финансового рынка, его структуры; первичный и вторичный рынок. Развитие законодательной базы, регулирующей фондовый рынок в Украине, анализ текущей ситуации, перспектив развития и динамики основных индексов.
курсовая работа [449,0 K], добавлен 06.03.2010Понятие фондового рынка, его назначение, структура, виды и показатели, роль и значение в системе рыночных отношений. Инструменты тeхничeского, фундамeнтального методов анализа рынка ценных бумаг. Его государственное регулирование. Виды рисков на РЦБ.
реферат [37,8 K], добавлен 18.03.2015Характеристика финансового рынка России. Динамика трансграничных потоков капитала и активность участников межбанковского внутреннего валютного рынка. Расчет волатильности ставок денежного рынка. Условия эмиссии бескупонных облигаций федерального займа.
статья [5,3 M], добавлен 12.12.2011Рынок ценных бумаг как механизм привлечения инвестиций. Структура фондового рынка, влияние макроэкономики. Эмиссионные и неэмиссионные ценные бумаги. Инвестиционная привлекательность облигаций для потенциальных вкладчиков. Преимущества эмиссии акций.
курсовая работа [119,9 K], добавлен 08.12.2013Место рынка государственных ценных бумаг в структуре финансового рынка. Основные инструменты и участники рынка государственных ценных бумаг. Анализ рынка государственных ценных бумаг в РФ. Основные проблемы долговой политики в современной России.
дипломная работа [644,0 K], добавлен 29.03.2015Теоретические аспекты финансового рынка – совокупности всех финансовых и денежных ресурсов в их движении. Характеристика его функций и структуры. Экономические особенности формирования финансового рынка России и современные тенденции его функционирования.
курсовая работа [170,5 K], добавлен 28.02.2010Характеристика понятия, целей и задач системы управления рынком ценных бумаг. Анализ государственного регулирования и саморегулируемых организаций рынка ценных бумаг. Работа рынка ценных бумаг в США. Развитие регулирования рынка ценных бумаг в России.
курсовая работа [40,6 K], добавлен 05.06.2010