很多问题,归根到底是个图论的问题。比如最近在做的Customer Segmentation.
从会员的behavior 可以做出会员的 interests vector,通过计算i,j的similarity( i, j )得到similarity matrix 下面在处理下,细分成Group就解决这个问题了。
我在怎么画一个示意图来阐述我的方法的问题上遇到了麻烦,最后想大家隆重介绍:graphviz
主页设在http://www.graphviz.org,你可以在这里下载到最新的Windows版本。安装后你可以在dos下(任何目录中)调用它的命令行模式。
这里,我们使用dot语言。官方网站上有关于dot语言的详细的用户手册。

这么一个图就是用一段代码画出来的
最上面那个狂大的图就是我用graphviz画的,当然:手写代码效率是很低的
这么写也许会快很多:P
[code]
fout<<"dot -O -Tgif\ngraph G{\nsize=\"59,1711\""<<endl;
//atoi [color=green];
for( i=0;i<59;i++)
switch(user[i]){
case 1: fout<<i+1<<" [color=green];"<<endl;break;
case 2: fout<<i+1<<" [color=blue];"<<endl;break;
case 3: fout<<i+1<<" [color=gray];"<<endl;break;
case 4: fout<<i+1<<" [color=red];"<<endl;break;
case 5: fout<<i+1<<" [color=orange];"<<endl;break;
case 6: fout<<i+1<<" [color=brown];"<<endl;break;
case 7: fout<<i+1<<" [color=hotpink];"<<endl;break;
case 8: fout<<i+1<<" [color=yellow];"<<endl;break;};
for( i=0;i<59;i++)
for(j=i+1;j<59;j++)
if(matrix[i][j]==1)fout<<i+1<<" -- "<<j+1<<";"<<endl;
fout<<"}"<<endl;
[/code]
对于想要把图论的题目画出来的同志们可以试试这个。
另外一个更强大的工具叫UBIGRAPH,这个可以在C++ Python Java等主流语言里面无缝的对接,不过既然上面的已经够用了,以后再研究吧~
