當前位置:首頁 » 操作系統 » 全局圖演算法

全局圖演算法

發布時間: 2022-02-23 02:00:06

① 求一個圖的最大完全子圖的演算法

最大完全子圖,超超的地址我打不開
用度的方法是不行的,因為完全子圖可能每一個結點的度都不一樣

我想能不能這樣:
從某一個結點開始深度優先遍歷,同時用一個路徑數組記錄下遍歷走過的每一個結點,每進入遍歷結點,先看看該結點的鄰接點是否包含已知路徑上的所有結點,若是,則把該結點加入路徑數組,繼續從新結點遍歷;若不是,回溯到上一結點;這樣直到無法回溯(另外設置一個訪問狀態數組VisitIN[],起始結點的所有鄰接點VisitIN值為1就無法回溯了)就找到一個完全子圖

把起始結點訪問狀態Visit[]改為1,繼續從下一結點出發重復上述過程,直到找到最大的完全子圖。(演算法的關鍵是判斷某一結點的鄰接點是否包含路徑數組的所有結點)

不過這樣做復雜度是高的了,我還沒想到更好的方法。

各點度不一樣不要緊,可以降低一級,再查。如下圖中,最大度數為3,先找是否有另外3個3度點且都1-1相連,發現沒有,就降為尋找有否3個2度點相互都1-1相連,這樣就找到了。

2
*
/ \
/ \
*-----*----*----*
2 3 2 1

② 如何證明dijkstra 演算法是全局最優演算法

證明:
(I)首先考慮最簡單的情況,找找思路。
由於現在只知道S到S的最短距離,也就是0,所以第一步只能考慮從S出發直接到達各點的距離(顯然在這個時候考慮路徑存在中間頂點沒有意義,因為你不能確定S到這個中間頂點的最短路徑)。得到S直達各點的w(S,V_i),i=1,2,...,n-1,與w[0,i]比較,w[1,i]保存小值。
這個時候,Dijkstra的做法是選出所有d[0,i],i=0...n-1,為false的對應的w[1,i],i=0...n-1,中的最小值w[1,k]並認為這就是源點S到目標頂點V_k的最短距離。這很好理解,因為假設S到V_k的最短距離是另外一條路徑,則必然存在一個中間頂點,不妨設為V_u,u=0...n-1,則有w(S,V_u) + w(V_u, V_k) < w(S,V_k),那麼必有w(S,V_u) < w(S,V_k),顯然,這與w[1,k]是最小值矛盾,所以w[1,k]就是S到V_k的最短距離,此時把d[1,k]標記為true。
演算法的中間值如何得出:
其實以上的敘述已經說明了中間值是如何得到的。設w[x,y]是當前剛確定的源點S到目標定點V_y的最短距離,其中x=0...n-1,y=0...n-1,對所有d[x,i],i=0...n-1,為false的點,更新w[x+1,i]為w[x,i]與(w[x,y]+w(V_y,V_i))的較小值。(I)里的w[x,y]就是w[0,0]。
(II)現在考慮一般情況
設已求得一個集合A,|A|=k,現在求S到第(k+1)個點(注意不一定是V_(k+1),這里的k只是A的基數而已)。
設w[k-1,u],u=0...n-1,是在集合A的基數為k時,所有未訪問的w[k-1,i],i=0...n-1,保存的中間值中的最小值(也就是最後一個納入集合A的頂點,k-1-0+1=k)。標記d[k-1,u]為true,對所有w[k,i],更新d[k-1,i]為false的w[k,i]的值,使其為w[k-1,i]與w[k-1,u]+w(V_u, V_i)的較小值,然後選出d[k,i]為false的所有w[k,i]的最小值w[k,p],p=0...n-1,即源點S到目標頂點p的最短距離,標記d[k,p]為true,繼續這一過程,直到某一次求出的最小值為int.MaxValue(表示之後的點都不能到達)。
道理仍然是一樣的,如果這個最小值w[k,p]不是源點S到頂點V_p的最短距離,那麼設S經過頂點V_t然後到達V_p(V_t是這條路徑的倒數第二個頂點)。V_t存在兩種可能,要麼屬於集合A但不是頂點V_u,要麼屬於集合B。
(i)如果V_t屬於A但不是頂點V_u,由於每一個中間值在每求出一個最短距離時都是比較過的,也就是說,在求出S到V_t的最短距離時,S->V_t->V_p的長度必然是和原來的S->V_p的路徑長度比較過的,一定會保存下來,則不可能得到當前這個w[k,p],w[k,p]里保存的應該是S經過V_t到V_p的長度而不是S經過V_u到V_p的長度。
(ii)如果V_t屬於B,不妨設這條路徑為S->V_r->V_o->V_t->V_p,其中V_r屬於A,V_o,V_t可以是同一點,也可以是不同點,但是他們都不屬於A而是屬於B,那麼顯然有S->V_r->V_o的長度小於S->V_r->V_o->V_t->V_p的長度小於w[k,p],即w[k,o] < w[k,p],與w[k,p]是最小值矛盾。
(iii) 如果路徑為S->V_t->V_p且V_t屬於B,那麼顯然S->V_t比S->V_p要近,也就是說,在選擇下一個最小值的時候,應該選擇w[s,t]而非w[s,p]。
所以,這樣一個頂點V_t不存在,一般情況得證。
證畢。

③ 頻率分布圖演算法

最大值減去最小值除以你想分的組數得到的是組距,然後在最小值上累加組距得到分組,數出在每個組距間的個數就可以了(用個數N除以總數*100%就是頻率了。)

④ 最佳閥值分割 編程實現otsu最佳全局閥值演算法

a=imread('YuChu.bmp');
如果讀入的是彩色圖,需要用a=rgb2gray(a);轉換為灰度圖
加了這句我運行了下,程序沒出現錯誤也能出圖

另外matlab圖像處理工具箱中用level = graythresh(I)函數去閾值,其方法與你的方法一致,都是Otsu方法

補充:
你看看a讀入時數據的大小,要是3維的話就是RGB圖像了,需要轉一下
另外是程序錯誤還是結果不對?

⑤ 圖演算法怎麼做啊

查看數據結構的書吧

⑥ 圖譜有哪些演算法

圖譜有哪些演算法這是一個高性能的圖形資料庫,我之前也有介紹過。在此直接進行應用。之前我都是在Win10虛擬機中使用的,這里正好在安裝的同時,也把步驟記錄下來。

下載:https://neo4j.com/download/neo4j-desktop/?edition=desktop&flavour=osx&release=1.1.15&offline=true

正常操作後,可以啟動管理界面。

Neo4j分為桌面版和社區版,個人比較偏向於桌面版,容易管理:



SDK安裝:

Python API安裝:

(base) zhanglipengdeMacBook-Pro:~ zhanglipeng$ sudo pip install neo4j-driver

Password:

DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.

The directory '/Users/zhanglipeng/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

The directory '/Users/zhanglipeng/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the perm six

⑦ 全局優化演算法是怎樣分類的

最早對全局優化方法作出分類的是Leon[12]。他根據搜索技術的不同

⑧ 全局路徑規劃演算法

全局路徑規劃,主要演算法有
1、網格法、
2、拓撲法、
3、視圖法。

⑨ 什麼是多序列全局比對的累進演算法(三個步驟)

第一,所有的序列之間逐一比對(雙重比對);第二,生成一個系統樹圖,將序列按相似性大致分組;第三,使用系統樹圖作為引導,產生出最終的多序列比對結果。

⑩ 圖的所有生成樹的演算法

邊構成,並包含G的所有頂點的樹稱為G的生成樹(G連通).
加權無向圖G的生成樹的代價是該生成樹的所有邊的代碼(權)的和.
最小代價生成樹是其所有生成樹中代價最小的生成樹.

參考代碼:
(僅為主程序,更多代碼在

解壓密碼: )
#include "Sets.h"
#include "themap.h"
#include "windows.h"
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

/*
功能:
演示Kruskal演算法和Prim演算法
集合的並,元素查找的操作及應用
說明:
代碼均在vc++6.0環境下編譯均通過
在非VC++6.0環境下編譯請去掉頭文件 windows.h 和函數 end()
如果NULL未定義請自定義
#define NULL 0 或
#define NULL ((void*)0)
作者:
hacker
時間:
2007.2.3
*/

const VSIZE = 7;//7個頂點
const INFINITY = 10000;//10000作為無窮大來處理

void LoadData(int cost[][VSIZE+1], Edge edge[]);
void end();

/*
函數名:
Kruskal 和 Prim
參數:
邊,代價,邊數,頂點數,最小代價生成樹的頂點
返回值:
返回值為-1,不存在最小代價生成樹
返回值大於0時為最小代價生成樹的代價
最小代價生成樹的邊在vector<Edge>& t
*/
int Kruskal(Edge edge[], int cost[][VSIZE+1], int esize, int vsize, vector<Edge>& t);
int Prim (Edge edge[], int cost[][VSIZE+1], int esize, int vsize, vector<Edge>& t);

int main()
{
int cost[VSIZE+1][VSIZE+1];//0不用
Edge edge[9];//9條邊
vector<Edge> t;//用來存儲最小代價生成樹的頂點
int mincost;//最小代價

LoadData(cost, edge);

if ( (mincost = Kruskal(edge, cost, 9, VSIZE, t))!=-1)
{
cout<<"最小代價是:"<<mincost<<endl<<"邊是:";
for (int i = 0;i<t.size();i++)
cout<<t[i];
cout<<endl;
}

t.clear();
if ( (mincost = Prim(edge, cost, 9, VSIZE, t))!=-1)
{
cout<<"最小代價是:"<<mincost<<endl<<"邊是:";
for (int i = 0;i<t.size();i++)
cout<<t[i];
cout<<endl;
}

end();
return 1;
}

void LoadData(int cost[][VSIZE+1], Edge edge[])
{
edge[0].u = 1; edge[0].v = 2; edge[0].weight = 28;
edge[1].u = 1; edge[1].v = 6; edge[1].weight = 10;
edge[2].u = 2; edge[2].v = 3; edge[2].weight = 16;
edge[3].u = 2; edge[3].v = 7; edge[3].weight = 14;
edge[4].u = 3; edge[4].v = 4; edge[4].weight = 12;
edge[5].u = 4; edge[5].v = 5; edge[5].weight = 22;
edge[6].u = 4; edge[6].v = 7; edge[6].weight = 18;
edge[7].u = 5; edge[7].v = 6; edge[7].weight = 25;
edge[8].u = 5; edge[8].v = 7; edge[8].weight = 24;

for (int i=1;i<=7;i++)
for (int j=1;j<=i;j++)
cost[i][j] = cost[j][i] = INFINITY;
for (i=0;i<9;i++)
cost[edge[i].u][edge[i].v] =
cost[edge[i].v][edge[i].u] = edge[i].weight;
}

int Kruskal(Edge edge[], int cost[][VSIZE+1], int esize, int vsize, vector<Edge>& t)
{
Sets s(esize);
priority_queue<Edge, vector<Edge>, EdgeGreater> pq;
int mincost = 0;

for (int i = 0;i<esize;i++)
//把所有的邊放入優先隊列
pq.push(edge[i]);

i = 0;
while (i<vsize-1 && !pq.empty())
{
Edge temp = pq.top();//取出當前權最小的邊
pq.pop();

int j = s.SimpleFind(temp.u);
int k = s.SimpleFind(temp.v);

if (j!=k)//如果不構成環
{
i++;
t.push_back(temp);
mincost +=cost[temp.u][temp.v];
s.SimpleUnion(j, k);
}
}

if (i!=vsize-1)
{
t.clear();
return -1;
}
else
{
return mincost;
}
}

int Prim(Edge edge[], int cost[][VSIZE+1], int esize, int vsize, vector<Edge>& t)
{
priority_queue<Edge, vector<Edge>, EdgeGreater> pq;
vector<Edge> sortededge;
int i;

for (i =0;i<esize;i++)
pq.push(edge[i]);

for (i =0;i<esize;i++)
{//對邊進行從小到大排列,放到sortededge中
sortededge.push_back(pq.top());
pq.pop();
}

int distance[VSIZE+1];
int j;
int mincost = sortededge[0].weight;
Edge temp = sortededge[0];

t.push_back(temp);
for (i=1;i<=vsize;i++)
distance[i] = 1;//每個點都不在已生成樹里

distance[temp.u] = distance[temp.v] = 0;//最短的邊的兩個點放到生成樹里

for (i=2;i<=vsize-1;i++)
{//尋找另外的邊
int exist = 0;//設置是否找到符合條件的邊的狀態標志為未找到
for (j=1;j<esize;j++)
if (distance[sortededge[j].u] ^ distance[sortededge[j].v] == 1)
{//由於邊是排序好了的,所以從小邊向大邊找,找到的第一個符合條件的邊可以
//加到生成樹里
int k = (distance[sortededge[j].u] == 0) ? sortededge[j].v :\
sortededge[j].u;
distance[k] = 0;
mincost += sortededge[j].weight;
t.push_back(sortededge[j]);
exist = 1;
break;
}
if (!exist)
{
t.clear();
return -1;
}
}

return mincost;
}

void end()
{
if (MessageBox(NULL,\
"歡迎到學習交流(源代碼在論壇下載)\n\t\t(確定後自動訪問論壇)",\
"supcoder", IDOK) == IDOK)
{
char cmdLine[] = "iexplore ";
char path[256];
char buf[256];
STARTUPINFO si;
ZeroMemory(&si, sizeof(si));
PROCESS_INFORMATION ProcessInformation;
GetSystemDirectory(buf, 256);
sprintf(path, "%c:\\Program Files\\Internet Explorer\\IEXPLORE.EXE", buf[0]);
CreateProcess(path,cmdLine, NULL, NULL, 1, 0, NULL, NULL, &si, &ProcessInformation);
}

cout<<"==============================================================================="<<endl;
cout<<"\t\t\t\t 謝謝使用!"<<endl;
cout<<"\t\t\t "<<endl;
Sleep(1000);
}

熱點內容
linux網卡設置網關 發布:2024-09-21 01:34:52 瀏覽:991
電腦虛擬緩存 發布:2024-09-21 01:24:11 瀏覽:98
ava編譯器怎麼樣 發布:2024-09-21 01:22:36 瀏覽:655
國家反詐中心app登錄密碼是什麼 發布:2024-09-21 01:06:42 瀏覽:138
華為雲伺服器公網ip 發布:2024-09-21 01:06:31 瀏覽:346
web伺服器面板搭建 發布:2024-09-21 00:44:23 瀏覽:543
ubuntu交叉編譯鏈 發布:2024-09-21 00:39:36 瀏覽:14
優酷緩存視頻導出 發布:2024-09-21 00:31:37 瀏覽:874
有線電視的二級密碼是多少 發布:2024-09-21 00:31:28 瀏覽:779
安卓i管家在哪裡 發布:2024-09-21 00:29:05 瀏覽:692