1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo gr1 đề tài tìm hiểu cấu trúc dữ liệu đồ thị

13 2 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Nội dung

1 Lựa chọn cấu trúc dữ ệu li sách kề cung cấp khả năng truy cập nhanh chóng và hiệu quả vào các đỉnh kề của mt đỉnh cho trước.. chứa mt danh sách liên kết các đỉnh kề của đỉnh đó.. Mỗi

Trang 1

ĐẠI HỌC BÁCH KHOA HÀ NỘI

TRƯỜNG CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ******************************************

THỊ

Giảng viên hướng dẫn: TS Trịnh Anh Phúc Sinh viên thực hiện: Bùi Hoàng Hiệp

MSSV: 20194556

Lớp : Information Technology Specialist 05-K64

Trang 2

Ni dung

Vấn đ ề 3

1 Lựa chọ ấu trúc dữ n c liệu 4

2 Cài đặt giải thuật (mã giả) 5

3 Kết quả ực nghiệmth 10

4 Kết luận 13

Trang 3

Vấn đề Nhiệm vụ :

G=(V,E) Chi tiết :

- Sinh viên lập trình đọ ệp tin văn bả ừ thư việc t n t n đ thồ ị SNAP http://snap.stanford.edu/data/index.html với các đồ ị lớth p lớn

2 Duyệt đồ thị theo chiều sâu (DFS)

3 Đếm số thành phần liên thông (# of connected components) cùng các thông số đi kèm:

Trang 4

1 Lựa chọn cấu trúc dữ ệu li

sách kề cung cấp khả năng truy cập nhanh chóng và hiệu quả vào các đỉnh kề của mt đỉnh cho trước

chứa mt danh sách liên kết các đỉnh kề của đỉnh đó Mỗi danh sách liên kết được biểu diễn bằng mt chuỗi các nút (node) liên kết với nhau Mỗi nút trong danh

sách

cho các đỉnh và cạnh trong đồ ị th thực sự tồ ại Với đồ ị có số đỉn t th nh l n ớ

trận kề

• Linh hoạt và tiện ích: Danh sách kề cho phép thêm hoặc xóa các đỉnh và

dữ ệu Nó cũng dễ dàng để ực hiện các thao tác như kiểm tra sự tồli th n tại của mt cạnh hay tìm kiếm các đỉnh kề của mt đỉnh cho trước

• Truy cập nhanh chóng: Với danh sách kề, ta có thể truy cập nhanh chóng

qua danh sách liên kết của đỉnh đó

Trang 5

Tuy nhiên, cũng cần lưu ý rằng danh sách kề có thời gian truy xuất tỷ lệ tuyến tính với số đỉnh kề của mt đỉnh Do đó, nếu ta cần thực hiện các thao tác trên tất cả các cạ trong đồ ị, cấu trúc ma trận kề có thể nhanh hơn nh th

2 Cài đặt giải thuật (mã giả) Cấu trúc Node:

struct Node{

struct Node* next;

intvertex; };

Cấu trúc đồ thị: struct Graph{

struct Node**adj_list;

intnum_vertices; };

Khởi tạo Node:

struct Node*createNode(int v){

struct Node *newNode =(struct Node*)malloc(sizeof(structNode));

Trang 6

while(fscanf(file,"%d\t%d",&src,&dest) !=EOF){

newNode=createNode(dest);

if(newNode!=NULL){

if (graph->adj_list[src] !=NULL) {

check= graph->adj_list[src]; graph->adj_list[src]=newNode;

graph->adj_list[src]->next=check; }

Tạo đồ thị:

struct Graph*createGraph(int num_vertices){

struct Graph*graph = (struct Graph*)malloc(sizeof(structGraph));

graph->adj_list =(struct Node**)malloc(num_vertices *sizeof(struct Node*));

graph->num_vertices = num_vertices;

Trang 7

Duyệt đồ ị theo chiều sâu: th

void DFSUtil(structGraph* graph, intv,int*visited){

visited[v]= 1 printf("%d ",v);

struct Node*temp= graph->adj_list[v];

voidDFS(struct Graph* graph, start_vertexint ){

int*visited = (int*)calloc(graph->num_vertices,sizeof(int));

DFSUtil(graph, start_vertex,visited);

free(visited); }

Trang 8

Duyệt đồ ị theo chiềth u rng:

voidBFS(struct Graph* graph, start_vertexint , bool *visited,

int* num_vertices,int* num_edges,int* max_degree,int*min_degree){

int*queue= (int*)malloc(graph->num_vertices*sizeof(int));

struct Node*temp=NULL;

intfront = 0,rear = 0 intcurrent_vertex;

visited[start_vertex] = true;

queue rear[ ++] =start_vertex;

visited[adj_vertex] = true;

queue rear[ ++] =adj_vertex;

Trang 9

Đếm số thành phần liên thông:

void findConnectedComponents(structGraph* graph){

bool*visited =(bool calloc*) (graph->num_vertices,sizeof(bool));

intnum_components = 0 intv

for(v = 0;v <graph->num_vertices;v++){

if (graph->adj_list[v]!=NULL&&!visited v[ ]) {

num_components++;

int num_vertices= 0 int num_edges =0

int component_max_degree =0

int component_min_degree =graph->num_vertices;

BFS(graph,v,visited,&num_vertices,&num_edges,&component_max_degree,&component_min_degree);

printf("Connected Component %d:\n",num_components);

printf("Number of vertices: %d\n",num_vertices);

printf("Number of edges: %d\n",num_edges);

printf("Max degree: %d\n",component_max_degree);

printf("Min degree: %d\n",component_min_degree);

Trang 10

3 Kết quả ực nghiệm thKhi chạy chương trình:

_Chọn 1 để nạ đồ thị vào hệ ống khi đó sẽ ện ra 1 menu mớ để ọn 1 trong p th hi i ch3 file text để hệ ống đọc.th

Khi chọn 1:

Trang 11

Kết quả ức năng duyệt theo chiềch u rng BFS:

Trang 12

Kết quả ức năng đếch m số thành phần liên thông:

Trang 13

4 Kết luận

cho phép ta thực hiện các thao tác cơ bản trên đồ ị như duyệt đồ ị theo chiềth th u

thành phần liên thông

có cơ hi hiểu sâu hơn về đồ ị và cấu trúc dữ ệu phù hợth li p để lưu trữ và xử lý

chúng ta đã có khả năng tương tác với dữ liệu từ thư viện đ thồ ị SNAP và thực hiện các thao tác trên đồ ị mt cách hiệth u qu ả

Qua quá trình thực hiện bài toán, chúng ta cũng đã nắm vững các khái niệm cơ bản trong lĩnh vực đ thồ ị và cải thiện kỹ năng lập trình C của mình Báo cáo này cung cấp mt cái nhìn tổng quan về ệc cài đặt cấu trúc dữ ệu đơn đồ ị vô vi li thhướng và thực hiện các thao tác cơ bản trên đồ ị th

ứng dụng thự ế có hiệu suất cao và đáng tin cậy trên các đồ ị ực tế c t th th

Ngày đăng: 18/06/2024, 17:23

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w