No description
  • C 99.1%
  • Makefile 0.9%
Find a file
2020-07-06 11:42:18 +08:00
.gitignore small changed 2020-07-05 08:08:53 +08:00
cli.c all done, really 2020-07-06 11:42:18 +08:00
cli.h optimized freeman 2020-07-05 20:29:05 +08:00
dummy_test.txt initGraph finish, tested 2020-07-02 10:58:14 +08:00
dummy_test_key.txt Add files via upload 2020-07-01 09:19:58 +08:00
graph.h all done 2020-07-05 23:45:58 +08:00
main.c optimized freeman 2020-07-05 20:29:05 +08:00
Makefile optimized freeman 2020-07-05 20:29:05 +08:00
priority.c all done 2020-07-05 23:45:58 +08:00
priority.h dijkstra paritially finished 2020-07-04 09:40:07 +08:00
README.md basic functions added 2020-07-01 19:00:10 +08:00
search.c all done, really 2020-07-06 11:42:18 +08:00
search.h all done 2020-07-05 23:45:58 +08:00
stats.c all done 2020-07-05 23:45:58 +08:00
stats.h added some comments for freeman 2020-07-02 14:40:48 +08:00
test.txt finished initGraph, fully tested 2020-07-02 17:43:01 +08:00
tools.c optimized freeman 2020-07-05 20:29:05 +08:00
tools.h optimized freeman 2020-07-05 20:29:05 +08:00

第二周大作业

介绍

我们本次作业的目的是用 C语言 完成一个包含图分析与算法的代码库,包括

  • 图元素的基础分析
  • 顶点与边基础统计
  • 图度量
  • 边度量等
  • 最短路径蒜法等功能。

再将此代码库制作成一个 CLI 工具,可以直接在 Linux 的 Terminal 里面运行。

具体要求

  • C 语言实现,只允许调用 stdlib.hstdio.h0.5%

    • 其余函数如有需要,请自行实现,不做限制
    • 可使用网上的资源,但请在文件注释中注明来源
  • 编辑 stats.hstats.c 文件,完成如下函数(2%

    • int numberOfEdges(char name[]) 接受以文件名为图标识符的 char 数组,返回图中边的数量
    • int numberOfVertices(char name[]) 接受以文件名为图标识符的 char 数组,返回图中顶点的数量
    • int freemanNetworkCentrality(char name[]) 接受以文件名为图标识符的 char 数组,返回图中 Freeman's Network Centrality 值
    • int closenessCentrality(char name[]) 接受以文件名为图标识符的 char 数组,返回图中 Closeness Centrality 值
    • 参考 https://www.cl.cam.ac.uk/teaching/1213/L109/stna-lecture3.pdf
    • 评分标准为
      • 两个函数 + 后面两个函数中选一个
      • 3/3 = 100% * 2% = 2%4/3 = 125% * 2% = 2.5%
  • DFS、BFS、Dijkstra 三个算法封装在 search.hsearch.c 文件中(3%0.75% + 0.75% + 1.5%

    • 每个函数封装结构没有要求,输入输出也没有要求
    • 需要额外加入一个函数 int* shortestPath(int u, int v, char algorithm[])用来评分
      • 输入两个 int 值,uv,分别为起点与终点的顶点编号
      • 输入一个 char 数组,装有所选算法的名字(分别为:{DFS, BFS, Dijkstra} 请严格遵守)
      • 输出一个 int 数组指针,装有从 uv 的最短路径
    • 我们将对这三个算法进行检查评分,并提供简单的数据及其 autograder 让你们本地自检
  • 编辑 main.c 文件,实现以下功能(1%)

    • 输出二进制文件名为 search-cli
    • 利用 main 函数中的 argv 和 argc 参数接受命令行中的参数,完成以下命令行功能:
      • ./search-cli -h/--help(-h或--help以下同) 显示帮助菜单,格式没有要求,不作为评分要求,只求自己能够看懂
      • ./search-cli -g/--graph FILE_PATH -s/--stats STATS_PARAMS 显示以 FILE_PATH 为输入文件的图的统计信息,输出没有格式要求,具体支持的STATS_PARAMS参数如下:
        • edges
        • vertices
        • freeman
        • betweenness
        • closeness
        • eigenvector
      • ./search-cli -g/--graph FILE_PATH -sp/--shortestpath SEARCH_PARAMS -u STARTING_POINT -v TARGET_POINT 显示以 FILE_PATH 为输入文件的图中 从开始点 u 到 终点 v 的用 SEARCH_PARAMS蒜出来的最短路径
        • 样例输入: ./search-cli -g ./sx-stackoverflow.txt -sp Dijkstra -u 1 -v 5
        • 样例输出: 1 -> 2 -> 3 -> 4 ->5
  • 自测文件为 test.txt,检测所写算法能否在小的数据集上运行正确,具体文件格式如下:

    • 第一行:n m 代表n个顶点m条边
    • 接下来每行: u v w 代表从uv的权重为w的边
    • 正确答案保存在test_key.txt 注:只有唯一最优解
  • Makefile

    • 目标二进制文件为: search-cli
    • 不规定具体编译路径
    • 样例Makefile只是一个骨架,不能直接运行不能直接运行不能直接运行!!!
  • 真正的测试集来源于斯坦福开放的图数据集(1%)https://snap.stanford.edu/data/amazon0601.txt.gz

  • 加分项

    • 0.1% ./search-cli -j 可以在 Terminal 中画出一副你想象中蒜头君的图(如图所示)

已完成:

 ______________________________________
< 想不到吧,蒜头君是一头牛 >
 --------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||
  • 2% 更大的数据集,来自于 https://snap.stanford.edu/data/sx-stackoverflow.html

    • ~260万个顶点 ~6400万条边
    • 需要更好的优化(内存,时间复杂度)
  • 0.1% Makefile 中加入 make clean

  • 待更新

  • 目录结构 - 可增加新文件,此目录下所有文件是批改所需,请不要改动文件名 GraphProject/main.c search.c search.h stats.c stats.h dummy_test.txt dummy_test_key.txt Makefile submission.url

  • 交作业方式 - 与 Debug 作业相同 - 原则上不更换小组 - 每小组开一个新的 repo,名字叫做 GraphProject - 将小组的 repo url 填入助教提供的表格中,并将助教的GitHub account 添加为 collaborator