Time of Update: 2018-12-05
在我寫多線程程式的時候總是遵循這樣的順序:初始化資源->開啟線程;停止線程->將資源去初始化。 包含標頭檔:#include <pthread.h>#include <semaphore.h> 全域定義:sem_t g_sem;pthread_t g_tid;pthread_attr_t g_attr;BOOL g_thread_runflag;void* thread_func(void*
Time of Update: 2018-12-05
先從最簡單的入手!圖用鄰接矩陣儲存,演算法為Dijkstra單源最短路徑演算法。#define N 1000#define Inf 9999999int edge[N][N],dist[N],n,vis[N];void dij(int s){ int i,j,k; for(i = 1; i <= n; i++) dist[i] = edge[s][i]; memset(vis,0,sizeof(vis)); vis[s] = true;
Time of Update: 2018-12-05
求最大子矩陣面積其實就是求每個數左邊>=a[i]的下標,右邊>=a[i]的下標,然後就會求出面積了!#include <list>#include <map>#include <set>#include <queue>#include <string>#include <deque>#include <stack>#include <algorithm>#include
Time of Update: 2018-12-05
該題首先轉化為只含有a,b,c的矩陣,然後對每一行dp求該列連續相同字母的最大高度,然後就可以每行每行地gao,又轉化為求最大矩陣面積,就像hdu 1506一樣,迭代地求左右>=當前高度的下標,hdu 1506代碼看這裡#include <list>#include <map>#include <set>#include <queue>#include <string>#include
Time of Update: 2018-12-05
最小產生樹演算法我只知道兩種:Prim和Kruscal。 Prim演算法跟Dijkstra演算法一樣,屬於典型的貪心演算法(即從局部最優解得到全域最優解)。 下面是Prim演算法用於以鄰接矩陣儲存的圖的情況。#define N 1000int edge[N][N],closedge[N],n;bool vis[N];void prim(int s){ int i,j,k; for(i=1;i<=n;i++)
Time of Update: 2018-12-05
二分圖匹配是可以轉換為網路流求解的,但直接用匈牙利演算法求解比轉換為網路流求解更高效。 關於二分圖有很多公式,比如它與最小頂點覆蓋的關係、與最小路徑覆蓋的關係等等。這裡就不進一步討論了。#define N 1000int n;//二分圖左邊節點數int m;//二分圖右邊節點數bool edge[N][N],vis[N];int link[N];bool Find(int a)//判斷從二分圖左邊節點a是否可以在右邊找到匹配節點 { int i;
Time of Update: 2018-12-05
二分圖的最大權匹配就是求所有匹配中權值最大的匹配。char str[105][105];int node[105][105],w[105][105],n,lx[105],ly[105],link[105];bool visx[105],visy[105];bool Find(int a){ visx[a]=true; int j; for(j=1;j<=n;j++) {
Time of Update: 2018-12-05
轉自百度百科。個人覺得關鍵是這句話:相等子圖的完備匹配一定是二分圖的最大權匹配。KM演算法是根據它來搞的!KM演算法是基於匈牙利演算法的。具體參考cuitianyi的講解。對於KM演算法,除了求權和最大,還可以求權和最小以及求權積最大。對於求權和最小,只需要將每個權值取相反數,再求最大權和,結果再取相反數即可。對於求權積最大,則需要把每個權值轉化為對數,從而進行求最大權和的運算,最後再求回指數即可。複雜度:最佳化到O(n^3)
Time of Update: 2018-12-05
二分法作為分治中最常見的方法,適用於單調函數,逼近求解某點的值。但當函數是凸性函數時,二分法就無法適用,這時三分法就可以“大顯身手”~~,類似二分的定義Left和Right,mid = (Left + Right) / 2,midmid = (mid + Right) / 2; (開口向下和向上時一樣)如果mid靠近極值點,則Right = midmid;否則(即midmid靠近極值點),則Left = mid。程式模版如下:double Calc(Type a){/* 根據題目的意思計算 */
Time of Update: 2018-12-05
最小樹形圖找到一個關於樹的學習網址,贊~ http://acm.nudt.edu.cn/~twcourse/Tree.html無向圖的最小產生樹可以用prim演算法或者Krusual演算法求,而有向圖的最小產生樹也叫最小樹形圖,它是先固定一個根,再求出權值最小的樹形圖模板#define N 1005#define type int#define MAX INT_MAXstruct Edge{ int u , v; type cost;}E[40005];int
Time of Update: 2018-12-05
最小邊覆蓋 = 最大獨立集 = |V| - 最大匹配數這個是在原圖是二分圖上進行的最小路徑覆蓋和最小邊覆蓋不同,不要求給的圖是二分圖,而是要求是N x N的有向圖,不能有環,然後根據原圖構造二分圖,構造方法是將點一分為二,如,i分為i1和i2然後如果i和j有邊,那麼就在i1和j2之間連一條邊。由此構成二分圖然後最小路徑覆蓋 =
Time of Update: 2018-12-05
《UNIX網路編程》確實是一本不可多得的好書,它之優勢不僅在於其理論透徹,其編程執行個體也講的很清晰。說來慚愧,在剛開始看UNIX編程三件套的時候,只覺得這三本書完全是POSIX API的參考手冊。然而看下來才發現,裡面不僅有深刻的電腦理論知識,而且通篇也滲透了各種編程技巧。說實話,如果吃透這三本書,編程水平一定能上一個台階。 《UNIX網路編程》不僅是我進行網路編程工作時的參考書,同時偶爾也是我寫網路程式的靈感來源。
Time of Update: 2018-12-05
《UNIX網路編程》很多章節都用回射程式來作例子,因為該程式邏輯簡單——用戶端只管讀終端,然後發送讀取的字串;伺服器只管讀取用戶端發送來的字串,然後回射回去。 回射伺服器代碼:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <sys/socket.h>#include
Time of Update: 2018-12-05
矩陣運算是屬於線性代數裡的一個重要內容,上學期學完後只覺得矩陣能解線性方程,不過高中的時候聽說過矩陣能最佳化常係數遞推以及將座標上的點作線性變換,於是找了些資料研究了一下,並把許多經典題以及HDU shǎ崽大牛總結的矩陣乘法的題目[1]、[2]和開設的矩陣乘法DIY Contest給做完了,感覺收穫頗豐。 一個矩陣就是一個二維數組,為了方便聲明多個矩陣,我們一般會將矩陣封裝一個類或定義一個矩陣的結構體,我採用的是後者:
Time of Update: 2018-12-05
zoj 3557Lucas定理:只適用於p為素數#define N 10005// Lucas定理求解C(n,k)%p, p是素數// C(n,k)%p = C(n%p,k%p)*C(n/p,k/p)%p// C(n,k)%p = n!/(k!*(n-k)!)%p = n!*((k!*(n-k)!)^(p-2))%p// 對於一個質數p,i對p的逆元可以不用擴充歐幾裡得進行求解// 可以有公式:re=i^(p-2)得到// pow_mod(a,b,p)求a^b%p的值, 快速冪模數演算法//
Time of Update: 2018-12-05
轉自matrix67.com如果機房馬上要關門了,或者你急著要和MM約會,請直接跳到第六個自然段。 我們這裡說的KMP不是拿來放電影的(雖然我很喜歡這個軟體),而是一種演算法。KMP演算法是拿來處理字串匹配的。換句話說,給你兩個字串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字串A="I'm
Time of Update: 2018-12-05
用散列表格儲存體資料在理論上能做到常量級的查詢或插入時間複雜度。散列表中最核心的是求取雜湊值。有集合R、有限整數集Z,將R映射到Z的函數稱為散列函數。 整數的散列函數可以為模數函數,因為整數域中的任何元素總可以通過模數操作被限制到一定範圍內; 字串的散列函數有很多,不一一列舉; 結構體的散列函數則可以視結構體的具體結構而定。 ......
Time of Update: 2018-12-05
在emcas啟動後會首先載入.emacs檔案,該檔案在HOME目錄下。對於linux而言,HOME目錄就是你的使用者目錄,可以用"cd ~"命令進入該目錄;而對於windows而言,HOME目錄則需要你自己在環境變數選項中配置(我的電腦->屬性->進階->環境變數)。 有些人熱愛emacs並為此去學lisp,只為將自己的emacs變得更好用。可能是功力不夠的原因,我無法理解其動力。 我將.emacs檔案上傳到了”我的資源“中,下載所需資源分為0,歡迎下載!
Time of Update: 2018-12-05
題目:請寫代碼列印10000之內的素數,講求效率! 說實話,這年代如此這般簡單的筆試題還真是不多見了,不過今天被我有幸遇到了!雖然我絲毫也高興不起來,因為我知道筆試再好,面試那關也難過!不知道是不是點背的關係,每次面試總是感覺良好,事後卻總無迴音。我從自己身上找呀找呀找原因,找到很多。比如,有項目經驗,卻無大型項目開發經驗,而且項目經驗並非多得不得了。
Time of Update: 2018-12-05
第一次寫AC自動機,發現也不是太難理解,可能自己以前看過KMP&Trie而且理解的比較透徹吧,看自動機沒有太大的困難,因為它也是利用了KMP的思想,理解了KMP,再看自動機就不難了:)轉一下這個blog的描述先,感覺看起來比較好理解,可是他的代碼就不敢恭維。。。http://www.cppblog.com/mythit/archive/2011/10/21/80633.html(有改動)補充一句:自動機的複雜度是O(m+n+z),其中z為主串中模式串的總個數,適合多模式串匹配。AC自動機