ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4016420 スケールフリーネットワークをC言語で作成しているのですが。
質問者:COMSYS 現在、C言語でスケールフリーネットワーク(BAモデル)を作成しているのですが、理論はわかるのですが、プログラムが不得意でどのように作っていったらいいのかわかりません。

現在作成途中のソース。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define MAXDEG 500
#define N 30000 //ノードの数

typedef struct node{
int deg;
int adj[MAXDEG];//adjacent隣接
double prob;//確率
} Node;

/*プロトタイプ宣言*/
add_edge(int id1,int id2);
Node NODES[N];

int main(){

ここがどうしていいかわかりません。

}

add_edge(int id1,int id2){

Node *node1,*node2;

node1 = &NODES[id1];
node2 = &NODES[id2];

node1->adj[node1->deg]=id2;
(node1->deg)++;
node2->adj[node1->deg]=id1;
(node2->deg)++;

if(node1->deg >= MAXDEG-1 || node2->deg > MAXDEG-2){
printf("DEG overflow\n");
exit(0);
}
関数はこれを使おうと思っていますが、プロセスがわかりません。
よろしくお願いします。
困り度:
  • すぐに回答を!
質問投稿日時:
08/05/12 13:08
最新から表示回答順に表示

回答

ANo.2 int main(){
 for(int i = 0; i < N; i++){
  int j = select_node(i);
  add_edge(i, j);
 }
}

//iが接続するべきノードを返す関数
int select_node(int i){
 //i番目のノードが接続する既存ノードを選択(=j)
 return j;
}


ようするに,i番目のノードをj=「0〜(i-1)番目のノードのうち一つ」と接続させればいいんじゃないでしょうか.
このとき,jはdegが大きいものほど選ばれやすいように工夫してください.
回答者:chikuwabu
種類:アドバイス
どんな人:専門家
自信:自信あり
回答日時:
08/05/12 17:21
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼回答ありがとうございました。
回答を参考にして、ノード選択の部分をがんばって考えて、やってみようと思います。
ノードの選択が、スケールフリーの特徴なので、なんとかやってみます。

回答

ANo.1 せめて、その「理論」や「プロセス」の理解している範囲が、普通の言葉であっても書かれていたら、もしかしたら、回答があるかもしれません。
ここでわかるのは、i と j のノードが、 add_edge(i, j); で接続できるところくらいです。
回答者:AsanoNagi
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/05/12 17:06
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示