導航:首頁 > 源碼編譯 > 拓撲排序演算法java

拓撲排序演算法java

發布時間:2022-12-28 08:08:45

Ⅰ Pascal語言在什麼軟體上編寫我是一點都不知道,比較菜鳥。。一直有個問題想問,java和Pascal在什麼上編

我是一個搞NOIP競賽的人 也搞過一點開發,你可以聽聽我的意見(全手打的,很累啊)
我學的就是Pascal語言,面向過程,用的是Free Pascal
如果是面向對象,就用Delphi
至於Java的編譯器,可以試試NetBeans或者sun公司的jdk
像C也有面向過程和面向對象
面向過程是GCC
面向對象就是VC之類的了

Pascal的確是一個起步很好的語言,一開始就學C或C++會很累的
語言一般分3種:機器語言 匯編語言 高級語言
機器語言:能直接被CPU執行,效率極高,但是可移植性極差(換台電腦可能就不行了),寫起來也很麻煩
匯編語言:不能直接被CPU執行,加入了一些人性化的東西,如加法用ADD、減法用SUB,但還是很麻煩
高級語言:效率最低,但是很人性化,可移植性很強 像Pascal C C++ JAVA都是高級語言

高級語言不能直接被計算機執行,所以就需要編譯器來幫忙,把這些語句翻譯一下,讓CPU能執行

高級語言執行方式分兩種:解釋執行和編譯執行
解釋執行:編譯器運行一句翻譯一句,調試的時候就是這樣的
編譯執行:編譯器將源文件編譯成.exe的可執行文件,然後執行

像Free Pascal、Delphi、VB、VC這種,都是IDE
不僅可以編輯源代碼,編譯源代碼,還可以調試程序等等

要學好編程,個人覺得分三塊(把我下面講的東西全學透,要1-2年)
①語法:學好語法是基礎!學好了語法,才知道語言如何使用,這個不用我說吧
②數據結構(數據結構是脫離語言的,也就是說這些數據結構每個語言都好實現):這是一個很抽象的東西,有 線性表、棧、隊列、堆、數、圖、串、集合 等等。
分為4種:線性結構(一對一,如 棧、隊列)、樹形結構(一對多,如 樹)、離型結構(沒有連接)、網狀結構(多對多,如 圖)
像棧就是一種FILO表,只運行在一頭進行輸入輸出操作,應用在 表達式求值、撤銷恢復操作上面
隊列是FIFO表,允許在一頭進行插入操作,另一頭錯刪除操作
樹 就復雜了 樹和二叉樹是兩種概念,具體的自己去看書吧
二叉樹有許多特殊形態,如滿二叉樹 完全二叉樹 哈夫曼樹 最優二叉樹(哈夫曼樹不等於最有二叉樹!這點有許多人弄錯。因為哈夫曼樹不一定是二叉的)
二叉樹的三種遍歷方式一定要會:前序遍歷(也稱先根遍歷)根左右, 中序遍歷(也稱中根遍歷)左根右, 後序遍歷(也稱後根遍歷)左右根
圖就更復雜了,分 連通與不連通 帶權與不帶權 有向與無向,所以就有了 (不)連通有(無)向(不)帶權圖這種說法 還有什麼強連通圖,弱連通圖的,自己看書吧!
演算法(演算法是脫離語言的,也就是說這些演算法每個語言都好寫):
1.低級演算法(立意上的,就像初等數學和高等數學):窮搜、深度優先搜索(DFS)、廣度優先搜索(BFS,也稱寬度優先搜索),是三種不同的遍歷方式
2.高級演算法:貪心,分支,動態規劃(DP)。其他兩個不介紹了,就介紹一下動態規劃吧!
動態規劃:記憶化搜索,利用以前搜索留下的數據,加快解決多階段決策最優化問題的速度。要能動態規劃,問題必須滿足兩個條件(我背了好長時間才背出來)
①:最優化原理(也稱最優性原理):無論過去的狀態或決策如何,對於當前的決策所形成的狀態而言,餘下的諸決策必須構成最優策略。
②:無後效性:一旦一個狀態的決策確定,則此後過程的演變不再受此前各狀態及決策的影響,當前狀態時此前歷史的完整總結,此前歷史只能通過當前狀態去影響過程未來的演變。
學DP一般從背包開始,背包一共有8個:01背包、完全背包、多重背包、混合三種背包、二維費用背包、分組背包、有依賴的背包、泛化物品背包。
然後再學樹形動態規劃
還有排序演算法:冒泡排序,選擇排序,插入排序,快速排序,堆排序,希爾排序,基數排序,序數排序,桶排序,鴿巢排序,二叉樹排序(應用二叉排序樹),雞尾酒排序(就是雙向冒泡,在一次初賽的完善程序里出現過)
還有數論演算法(不展開介紹了)
圖論演算法:
最短路(顧名思義,就是一個點到另一個點的最短路程):迪傑斯特拉(Dijkstra)、弗洛伊德(Floyd)、SPFA(國人設計的,很不錯)等等 還會要解決SPFA的負權迴路問題 這幾個演算法都是解決單源最短路徑問題的,就是一個點到所有點的最短路)
最小生成樹(應用在無向連通圖中,就是拿掉一些邊,在保證圖連通的情況下,使得剩下的邊權值之和最小):普利姆(Prim)、克魯斯卡爾(Kruskal)
關鍵路徑(在生產生活中應用很廣,注意關鍵路徑之前一定要拓撲一次!)、拓撲排序(可用於是否有環路的檢測)、網路流等等

如果以上你都會了,那麼恭喜你,你已經可以算是一名初級程序員了!
可以繼續學 雙向深搜、雙向廣搜、周界搜索、迭代加深搜索、迭代加寬搜索、A*廣度優先啟發搜索、A*迭代加深搜索 等高級的演算法。

Ⅱ 請教下計算機科學與技術本科 畢業論文題目什麼相對來說簡單些。 那些什麼管理系統是不是簡單點啊

管理系統就那麼些很容易重的,只要風格不一樣就OK,
我當時做的是一個網站,弄個主頁再弄幾個副頁,主要是弄的漂亮一點,在找個懂asp的同學給弄個留言板。網站上的內容豐富點,素材漂亮點就差不多。
當時我們輔導員給我們要求的不是很高,很容易就過去了。
不知道你們的怎麼樣,當時我好多同學也是很多做 圖書館管理系統,學籍管理系統,餐飲管理系統 ,他們的輔導員要求他們的管理系統能做到 添加--刪除--查找--提示 就差不多了。也是把布局弄的合理,漂亮(找會插圖或能把界面用圖片代替的朋友幫忙弄一下,請人家吃頓飯!)

祝你畢業論文順利完成!

你們計科系網站上應該有題目找個自己拿手的做,下面是我們當時的題目:

1--住宅小區智能化物業管理系統總體設計-
2--網上測評系統的設計-
3--基於web網站的綜合考評系統的設計-
4--基於web網站的考試系統設計-
5--網上教育資源庫系統的設計-
6--淺談網路協議的選用對網路性能的影響-
7--高校校園網信息管理平台研製-
8--實驗室管理信息系統設計與實現-
9--基於互聯網的學習課件的研製-
10--基於環聯網的輔導答疑係統研製-
11--智能網路入侵檢測技術初步研究-
12--電子政府信息處理總體實現架構研究-
13--企業管理信息系統設計與實現-
14--人事管理信息系統設計與實現-
15--學生信息管理系統設計與實現-
16--職工信息系統設計與實現-
17--職工工資管理系統設計與實現-
18--客房管理系統設計與實現-
19--中學考試管理信息系統設計與實現-
20--自學考試管理系統設計與實現-
21--超市管理系統設計與實現-
22--考試管理系統-
23--考務管理信息系統-
24--高校數學試題庫-
25--拓撲排序演算法的改進(給出AOV網的所有拓撲有序序列)-
26--哈希函數構造方法研究-
27--試卷自動生成系統設計-
28--自動檢測系統設計-
29--教學中常見表現手法在AW平台上的實現-
30--教學中常見表現手法在PPT平台上的實現-
31--多媒體課件製作中的跨平台操作-
32--個人網路設計-
33--單片機時間控制器開發-
34--單片機通用數據採集和處理系統-
35--資料庫系統開發-
36--網頁製作-
37--網路資料庫開發-
38--試題庫軟體設計-
39--圖書館管理系統-
40--學籍管理系統--
41--基於教學型軟體的設計與實現-
42--基於練習型交互軟體的設計與實現-
43--基於游戲型學習軟體的設計與實
44--VC實現windows文件管理-
45--單片機與微機通信-
46--單片機與紅外技術-
47--電子閱覽室收費系統-
48--用戶登陸與許可權管理子系統-
49--網路環境中的數據共享問題的分析與對策-
50--Unix與Windows NT網路互聯技術-
51--單片機控制的CO2焊機的設計(mcs-51系列)-
52--單片機控制的點焊控制器設計(mcs-51系列)-
53--利用網路實現互動功能
54--利用網路實現管理功能
56--如何防止IP地址盜用-
57--區域網主幹網路的選型-
58--動態網站設計-
59--企業物流管理-
60--葯品管理-
61--單片機遙控技術-
62--單片機與通訊-
63--家用電器與單片控制-
64--計算機教育教學探討-
65--計算機硬體技術理解與應用-
66--計算機輔助教學理論與實踐-
1 SMART晶元模擬器系統設計
2 程序執行結果模擬器
3 計算機硬體檢測系統
4 圖象處理軟體
5 ITS信息平台的設計與分析
6 基於B/S的職工信息管理系統
7 iButton及其應用
8 工作備忘錄的設計與實現
9 基於MATLAB數據模擬
10 基於Delphi的數據通信系統
11 **中學籍管理軟體
12 動態網站製作
13 資料庫信息管理系統
14 網站視頻點播
15 24點游戲
16 趣味繪圖
17 聊天程序
18 小學算術加減法教學軟體設計
19 個人網頁設計與友情連接
20 圖像處理軟體包
21 學生英語試題題庫及判分系統軟體設計
22 家庭理財管理信息系統設計
23 人事信息管理系統設計
24 計量管理信息系統
25 字元智能識別方法研究
25 基於圖像分析的公路路面破損統計系統企業信息管理系統
27 VB數據採集系統設計
28 VC數據採集系統設計
29 虛擬儀器數據採集系統設計
30 光柵位移感測器原理圖製作及模擬
31 網路搜索引擎性能分析系統模型及設計
32 基於簡訊的智能導行系統模型及設計
34 遠程非同步視頻授課系統研究
35 規劃設計中圖形處理技術
36 計算機圖形學在裝飾設計中的應用
37 公路工程試驗數據處理與分析(VB與Matlab)
38 城市信號交叉口禁左模擬
39 隨機模擬模型
40 高等級公路新線中線坐標放樣CAE
41 **大學上下水地下管網地理信息系統設計
42 油田測井數據繪圖軟體開發
42 企業管理系統
43 "**"課程的網路教學系統設計與開發
44 "**"課程試題庫的設計
45 地球物理數據反演系統中的圖形處理
46 電子教案中電路圖的繪制方法研究
47 .NET實現Internet消息平台
48 遠程列印及計費管理系統
49 機房無人值守系統
50 高速公路路網描述模擬模型構建
51 基於XML的數據交換在分布式WEB系統中的應用
52 基於關系資料庫的OLAP研究
53 等值線自動生成方法及程序實現
54 基於LDAP的語音服務(IP電話)中心研究
55 人工智慧多媒體教學軟體
56 BUG系統的設計
57 教學管理系統
58 虛擬現實技術應用研究
60 客戶管理系統
61 基於Web的教學系統設計與實現
62 信息工程學院資料室信息管理系統
63 基於網路的教材管理系統
64 石油工業儀器儀表質量監督檢驗中心網站設計
65 非線性流水線調度演算法動態演示程序設計
66 存儲體系地址映象及替換演算法動態演示程序設計
67 醫院葯房管理系統
68 門診劃價收費系統
69 公交公司人事管理系統
70 固定資產管理系統
71 網上圖書館(在線瀏覽及在線查詢)
72 工資計算系統
73 網上超市(電子商務網站的建設)
74 客戶關系管理系統
75 旅遊資源研發網的開發與設計
76 《****》試題庫的設計
77 餐飲娛樂管理系統的開發與設計
78 文語轉換系統
79 遠程數據服務平台(網站設計,數據管理系統)
80 室外環境檢測模擬平台(下分:控制台軟體設計,網路傳輸程序,監測軟體設計,硬體電路設計4個子題目)
81 圖像識別技術(計算特定物體的個數,圖像檢索技術)
82 圖像檢索系統設計與開發
83 視頻會議系統設計與開發
84 多媒體畢業紀念冊及播放系統設計開發
85 網路媒體播放器設計與實現
86 《數據結溝》演算法的動態演示
87 基於B/S結構的畢業設計題目管理系統
88 **大學計算機應用研究所網站
89 客戶管理系統
90 設備管理系統
91 實驗室管理系統
92 《多媒體軟體設計技術》課程CAI的開發
93 新聞網頁自動生成系統的開發
94 網站開發
95 電子白板的設計與實現
96 蟻群演算法在動態TSP問題種的應用研究
97 基於Web的非同步按需點播學習系統
98 多媒體同步實時授課系統中應用程序共享研究
99 協作編輯系統
100 基於web的遠程測控制系統研究
101 基於B/S模式文獻檢索系統的設計與開發
102 在線課題項目選題系統的設計及實現
103 學生檔案信息管理系統的開發
104 在線圖書館信息管理系統的設計及實現
105 瀏覽器過濾軟體實現
106 基於區域網的IP數據包監控軟體實現
107 WDM設備驅動程序開發-鍵盤過濾器
108 WDM設備驅動程序開發-滑鼠過濾器
109 基於OpengGL的虛擬場景漫遊軟體設計
110 城市公交查詢系統
111 J2EE框架的構建(Weblogic+JBuilder)
112 BrokerTool Project (C/S 結構)
113 多媒體開發與應用(Java2D,Java3D,JMF,Java圖形製作與動畫設計)
114 計算機輔修遠程教學系統設計與實現
115 《操作系統》典型演算法實現
116 "***"網站設計與實現
117 門禁管理系統實現
118 計算機系網站設計及建設
119 基於Internet的網路教學系統
120 視頻點播系統
121 基於Internet的車輛管理、調度系統
122 武裝工作管理系統
123 門禁式網路機房計費系統
124 成人教育學生檔案及成績管理系統
125 汽車綜合性能工位測控系統設計與軟體實現
126 汽車制動性能虛擬檢測儀器設計與軟體實現
127 基於LAN的汽車性能微機檢測系統
128 汽車制動信號數字濾波及曲線擬合優化方法研究
129 動態存儲器的刷新
130 電磁機構的計算機設計
131 伺服器端安全監控軟體的設計
132 校園網路地址管理模型的設計與實現

Ⅲ 數據結構 java開發中常用的排序演算法有哪些

排序演算法有很多,所以在特定情景中使用哪一種演算法很重要。為了選擇合適的演算法,可以按照建議的順序考慮以下標准:
(1)執行時間
(2)存儲空間
(3)編程工作
對於數據量較小的情形,(1)(2)差別不大,主要考慮(3);而對於數據量大的,(1)為首要。

主要排序法有:
一、冒泡(Bubble)排序——相鄰交換
二、選擇排序——每次最小/大排在相應的位置
三、插入排序——將下一個插入已排好的序列中
四、殼(Shell)排序——縮小增量
五、歸並排序
六、快速排序
七、堆排序
八、拓撲排序

一、冒泡(Bubble)排序

----------------------------------Code 從小到大排序n個數------------------------------------
void BubbleSortArray()
{
for(int i=1;i<n;i++)
{
for(int j=0;i<n-i;j++)
{
if(a[j]>a[j+1])//比較交換相鄰元素
{
int temp;
temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;
}
}
}
}
-------------------------------------------------Code------------------------------------------------
效率 O(n²),適用於排序小列表。

二、選擇排序
----------------------------------Code 從小到大排序n個數--------------------------------
void SelectSortArray()
{
int min_index;
for(int i=0;i<n-1;i++)
{
min_index=i;
for(int j=i+1;j<n;j++)//每次掃描選擇最小項
if(arr[j]<arr[min_index]) min_index=j;
if(min_index!=i)//找到最小項交換,即將這一項移到列表中的正確位置
{
int temp;
temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp;
}
}
}
-------------------------------------------------Code-----------------------------------------
效率O(n²),適用於排序小的列表。

三、插入排序
--------------------------------------------Code 從小到大排序n個數-------------------------------------
void InsertSortArray()
{
for(int i=1;i<n;i++)//循環從第二個數組元素開始,因為arr[0]作為最初已排序部分
{
int temp=arr[i];//temp標記為未排序第一個元素
int j=i-1;
while (j>=0 && arr[j]>temp)/*將temp與已排序元素從小到大比較,尋找temp應插入的位置*/
{
arr[j+1]=arr[j];
j--;
}
arr[j+1]=temp;
}
}
------------------------------Code--------------------------------------------------------------
最佳效率O(n);最糟效率O(n²)與冒泡、選擇相同,適用於排序小列表
若列表基本有序,則插入排序比冒泡、選擇更有效率。

四、殼(Shell)排序——縮小增量排序
-------------------------------------Code 從小到大排序n個數-------------------------------------
void ShellSortArray()
{
for(int incr=3;incr<0;incr--)//增量遞減,以增量3,2,1為例
{
for(int L=0;L<(n-1)/incr;L++)//重復分成的每個子列表
{
for(int i=L+incr;i<n;i+=incr)//對每個子列表應用插入排序
{
int temp=arr[i];
int j=i-incr;
while(j>=0&&arr[j]>temp)
{
arr[j+incr]=arr[j];
j-=incr;
}
arr[j+incr]=temp;
}
}
}
}
--------------------------------------Code-------------------------------------------
適用於排序小列表。
效率估計O(nlog2^n)~O(n^1.5),取決於增量值的最初大小。建議使用質數作為增量值,因為如果增量值是2的冪,則在下一個通道中會再次比較相同的元素。
殼(Shell)排序改進了插入排序,減少了比較的次數。是不穩定的排序,因為排序過程中元素可能會前後跳躍。

五、歸並排序
----------------------------------------------Code 從小到大排序---------------------------------------
void MergeSort(int low,int high)
{
if(low>=high) return;//每個子列表中剩下一個元素時停止
else int mid=(low+high)/2;/*將列表劃分成相等的兩個子列表,若有奇數個元素,則在左邊子列表大於右側子列表*/
MergeSort(low,mid);//子列表進一步劃分
MergeSort(mid+1,high);
int [] B=new int [high-low+1];//新建一個數組,用於存放歸並的元素
for(int i=low,j=mid+1,k=low;i<=mid && j<=high;k++)/*兩個子列表進行排序歸並,直到兩個子列表中的一個結束*/
{
if (arr[i]<=arr[j];)
{
B[k]=arr[i];
I++;
}
else
{ B[k]=arr[j]; j++; }
}
for( ;j<=high;j++,k++)//如果第二個子列表中仍然有元素,則追加到新列表
B[k]=arr[j];
for( ;i<=mid;i++,k++)//如果在第一個子列表中仍然有元素,則追加到新列表中
B[k]=arr[i];
for(int z=0;z<high-low+1;z++)//將排序的數組B的 所有元素復制到原始數組arr中
arr[z]=B[z];
}
-----------------------------------------------------Code---------------------------------------------------
效率O(nlogn),歸並的最佳、平均和最糟用例效率之間沒有差異。
適用於排序大列表,基於分治法。

六、快速排序
------------------------------------Code--------------------------------------------
/*快速排序的演算法思想:選定一個樞紐元素,對待排序序列進行分割,分割之後的序列一個部分小於樞紐元素,一個部分大於樞紐元素,再對這兩個分割好的子序列進行上述的過程。*/ void swap(int a,int b){int t;t =a ;a =b ;b =t ;}
int Partition(int [] arr,int low,int high)
{
int pivot=arr[low];//採用子序列的第一個元素作為樞紐元素
while (low < high)
{
//從後往前栽後半部分中尋找第一個小於樞紐元素的元素
while (low < high && arr[high] >= pivot)
{
--high;
}
//將這個比樞紐元素小的元素交換到前半部分
swap(arr[low], arr[high]);
//從前往後在前半部分中尋找第一個大於樞紐元素的元素
while (low <high &&arr [low ]<=pivot )
{
++low ;
}
swap (arr [low ],arr [high ]);//將這個樞紐元素大的元素交換到後半部分
}
return low ;//返回樞紐元素所在的位置
}
void QuickSort(int [] a,int low,int high)
{
if (low <high )
{
int n=Partition (a ,low ,high );
QuickSort (a ,low ,n );
QuickSort (a ,n +1,high );
}
}
----------------------------------------Code-------------------------------------
平均效率O(nlogn),適用於排序大列表。
此演算法的總時間取決於樞紐值的位置;選擇第一個元素作為樞紐,可能導致O(n²)的最糟用例效率。若數基本有序,效率反而最差。選項中間值作為樞紐,效率是O(nlogn)。
基於分治法。

七、堆排序
最大堆:後者任一非終端節點的關鍵字均大於或等於它的左、右孩子的關鍵字,此時位於堆頂的節點的關鍵字是整個序列中最大的。
思想:
(1)令i=l,並令temp= kl ;
(2)計算i的左孩子j=2i+1;
(3)若j<=n-1,則轉(4),否則轉(6);
(4)比較kj和kj+1,若kj+1>kj,則令j=j+1,否則j不變;
(5)比較temp和kj,若kj>temp,則令ki等於kj,並令i=j,j=2i+1,並轉(3),否則轉(6)
(6)令ki等於temp,結束。
-----------------------------------------Code---------------------------
void HeapSort(SeqIAst R)

{ //對R[1..n]進行堆排序,不妨用R[0]做暫存單元 int I; BuildHeap(R); //將R[1-n]建成初始堆for(i=n;i>1;i--) //對當前無序區R[1..i]進行堆排序,共做n-1趟。{ R[0]=R[1]; R[1]=R[i]; R[i]=R[0]; //將堆頂和堆中最後一個記錄交換 Heapify(R,1,i-1); //將R[1..i-1]重新調整為堆,僅有R[1]可能違反堆性質 } } ---------------------------------------Code--------------------------------------

堆排序的時間,主要由建立初始堆和反復重建堆這兩部分的時間開銷構成,它們均是通過調用Heapify實現的。

堆排序的最壞時間復雜度為O(nlgn)。堆排序的平均性能較接近於最壞性能。 由於建初始堆所需的比較次數較多,所以堆排序不適宜於記錄數較少的文件。 堆排序是就地排序,輔助空間為O(1), 它是不穩定的排序方法。

堆排序與直接插入排序的區別:
直接選擇排序中,為了從R[1..n]中選出關鍵字最小的記錄,必須進行n-1次比較,然後在R[2..n]中選出關鍵字最小的記錄,又需要做n-2次比較。事實上,後面的n-2次比較中,有許多比較可能在前面的n-1次比較中已經做過,但由於前一趟排序時未保留這些比較結果,所以後一趟排序時又重復執行了這些比較操作。
堆排序可通過樹形結構保存部分比較結果,可減少比較次數。

八、拓撲排序
例 :學生選修課排課先後順序
拓撲排序:把有向圖中各頂點按照它們相互之間的優先關系排列成一個線性序列的過程。
方法:
在有向圖中選一個沒有前驅的頂點且輸出
從圖中刪除該頂點和所有以它為尾的弧
重復上述兩步,直至全部頂點均已輸出(拓撲排序成功),或者當圖中不存在無前驅的頂點(圖中有迴路)為止。
---------------------------------------Code--------------------------------------
void TopologicalSort()/*輸出拓撲排序函數。若G無迴路,則輸出G的頂點的一個拓撲序列並返回OK,否則返回ERROR*/
{
int indegree[M];
int i,k,j;
char n;
int count=0;
Stack thestack;
FindInDegree(G,indegree);//對各頂點求入度indegree[0....num]
InitStack(thestack);//初始化棧
for(i=0;i<G.num;i++)
Console.WriteLine("結點"+G.vertices[i].data+"的入度為"+indegree[i]);
for(i=0;i<G.num;i++)
{
if(indegree[i]==0)
Push(thestack.vertices[i]);
}
Console.Write("拓撲排序輸出順序為:");
while(thestack.Peek()!=null)
{
Pop(thestack.Peek());
j=locatevex(G,n);
if (j==-2)
{
Console.WriteLine("發生錯誤,程序結束。");
exit();
}
Console.Write(G.vertices[j].data);
count++;
for(p=G.vertices[j].firstarc;p!=NULL;p=p.nextarc)
{
k=p.adjvex;
if (!(--indegree[k]))
Push(G.vertices[k]);
}
}
if (count<G.num)
Cosole.WriteLine("該圖有環,出現錯誤,無法排序。");
else
Console.WriteLine("排序成功。");
}
----------------------------------------Code--------------------------------------
演算法的時間復雜度O(n+e)。

Ⅳ 小米麵試每一輪都有演算法嗎

一共兩輪,兩個不同類型的面試官,一輪要一小時左右,兩輪都要紙上寫代碼,給我最大的感觸就是問得特別深,是越來越深,直到你答不出來。

第一輪問了我STL的一些數據結構,其內部實現。我說了map是紅黑樹,unordered_map是hash表,之後我不小心說到hash表最常見的實現就是一個鏈表數組,鏈表是為了處理沖突。於是又問我hash表處理沖突的方式,也難不倒我。再問讓我寫一個hash表存儲用戶的圖片,大概要多少位hash值才能盡可能沒沖突。我大概算了一下。下一個問題是while(1) sleep(x);這里x大概要多少秒(可小數)才能使cpu忙碌。大家估計一下我心理陰影面積。然後看我操作系統內部了解不多,又問了一堆。(這就是為什麼我們應該好好讀<<深入理解計算機系統>>)我答得十分糟糕。之後讓我寫一個鏈表反轉,我感覺有點詫異,想不到這玩意還真這么容易考到。詫異是詫異,沒花我多長時間就搞定一個O(n)時間O(1)空間的鏈表反轉了。又讓我說如果要實現一個lrucache,怎麼實現?我記得教材上有說過用棧,我就直接說棧,面試官反問了我一堆問題,後來我又說用鏈表,不過可能空間消耗比較大,面試官問我為什麼,我說有個指針域(我也是蠢哭),然後就直接打發我走了。

本來我以為我沒機會了,想不到一輪面試官給面子,讓我到了二輪。

一上來,看見我簡歷上一個項目寫了tfidf,就問我其是什麼,我大概說了是頻率和逆向頻率的綜合,又要我給出精確定義。我放棄(不太確定)。雖然我不久前剛看過定義,但當時沒怎麼仔細思考,畢竟sklearn里都有現成實現。之後讓我寫一個singleton,這玩意當然難不倒我。寫完後又要我寫一個線程安全的版本,我用了鎖,但他說開銷太大。我繼續放棄(我印象中確實有的,但是比較底層,我對這種底層的東西沒啥興趣,要是有興趣,一面也不會那麼慘了),並反問他怎麼辦,他說了一個check twice(但我之後上網沒找到)。之後問我拓撲排序(當然難不倒我)和java線程模型,這里我十分可笑,竟然把可重入鎖說成自旋鎖(自旋鎖是lock後並不會讓此線程立刻放棄cpu,而是等待一會;可重入鎖是同一個線程可以多次獲得)。又讓我寫二叉樹後序的迭代版本,我壓根沒寫過,只看過一次,那次看的實現還特別復雜,最慘的是,房間里另一對面試的有些影響我,心想這下出事了。磨磨蹭蹭寫出了一個版本,面試官一看就否決了,我仔細一看,確實有問題,不過加上兩個標記還是成功搞定。之後問了我要是去了小米想做什麼,我十分可笑,說我想做比較酷的事(正常情況我是不會這么說的,我真正想法是做有趣的事,考慮到是小米),又問我做過什麼酷的事,我答不出來,隨口說了個裝linux系統,使用cli,頓時感覺自己low爆了,還不如說在android上裝linux呢!還問我哪方面比較薄弱,我當然是說計算機圖形學了。之後說了我一些缺點,比如有點油(tfidf惹的貨),知識面廣但都不深。數據結構是不錯(可能是我簡歷上寫了解B樹和紅黑樹),但演算法不行(筆試最後兩題,都只能給出差強人意的答案,不夠極致(原話))。之後就把我打發走了,事後我還覺得有些希望。但這么多天過去了,越想越覺得沒戲。

感覺自己還是太弱,還得多讀書,多寫代碼,來年春招再投。

Ⅳ ACM入門學什麼

初學者建議購買,《演算法競賽入門經典》 劉汝佳作,十分好,在深入可以是他的另外一本,黑書,《演算法藝術與信息學競賽》。
計劃:
ACM的演算法(覺得很好,有層次感)POJ上的一些水題(可用來練手和增加自信)
(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)
初期:
一.基本演算法:
(1)枚舉. (poj1753,poj2965)
(2)貪心(poj1328,poj2109,poj2586)
(3)遞歸和分治法.
(4)遞推.
(5)構造法.(poj3295)
(6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.圖演算法:
(1)圖的深度優先遍歷和廣度優先遍歷.
(2)最短路徑演算法(dijkstra,bellman-ford,floyd,heap+dijkstra)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成樹演算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓撲排序 (poj1094)
(5)二分圖的最大匹配 (匈牙利演算法) (poj3041,poj3020)
(6)最大流的增廣路演算法(KM演算法). (poj1459,poj3436)
三.數據結構.
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、歸並排(與逆序數有關)、堆排) (poj2388,poj2299)
(3)簡單並查集的應用.
(4)哈希表和二分查找等高效查找法(數的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼樹(poj3253)
(6)堆
(7)trie樹(靜態建樹、動態建樹) (poj2513)
四.簡單搜索
(1)深度優先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)廣度優先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)簡單搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)
五.動態規劃
(1)背包問題. (poj1837,poj1276)
(2)型如下表的簡單DP(可參考lrj的書 page149):
1.E[j]=opt{D[i]+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最長公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最優二分檢索樹問題)
六.數學
(1)組合數學:
1.加法原理和乘法原理.
2.排列組合.
3.遞推關系.
(POJ3252,poj1850,poj1019,poj1942)
(2)數論.
1.素數與整除問題
2.進制位.
3.同餘模運算.
(poj2635, poj3292,poj1845,poj2115)
(3)計算方法.
1.二分法求解單調函數相關知識.(poj3273,poj3258,poj1905,poj3122)
七.計算幾何學.
(1)幾何公式.
(2)叉積和點積的運用(如線段相交的判定,點到線段的距離等). (poj2031,poj1039)
(3)多邊型的簡單演算法(求面積)和相關判定(點在多邊型內,多邊型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)
中級:
一.基本演算法:
(1)C++的標准模版庫的應用. (poj3096,poj3007)
(2)較為復雜的模擬題的訓練(poj3393,poj1472,poj3371,poj1027,poj2706)
二.圖演算法:
(1)差分約束系統的建立和求解. (poj1201,poj2983)
(2)最小費用最大流(poj2516,poj2516,poj2195)
(3)雙連通分量(poj2942)
(4)強連通分支及其縮點.(poj2186)
(5)圖的割邊和割點(poj3352)
(6)最小割模型、網路流規約(poj3308, )
三.數據結構.
(1)線段樹. (poj2528,poj2828,poj2777,poj2886,poj2750)
(2)靜態二叉檢索樹. (poj2482,poj2352)
(3)樹狀樹組(poj1195,poj3321)
(4)RMQ. (poj3264,poj3368)
(5)並查集的高級應用. (poj1703,2492)
(6)KMP演算法. (poj1961,poj2406)
四.搜索
(1)最優化剪枝和可行性剪枝
(2)搜索的技巧和優化 (poj3411,poj1724)
(3)記憶化搜索(poj3373,poj1691)
五.動態規劃
(1)較為復雜的動態規劃(如動態規劃解特別的施行商問題等)
(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
(2)記錄狀態的動態規劃. (POJ3254,poj2411,poj1185)
(3)樹型動態規劃(poj2057,poj1947,poj2486,poj3140)
六.數學
(1)組合數學:
1.容斥原理.
2.抽屜原理.
3.置換群與Polya定理(poj1286,poj2409,poj3270,poj1026).
4.遞推關系和母函數.
(2)數學.
1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
2.概率問題. (poj3071,poj3440)
3.GCD、擴展的歐幾里德(中國剩餘定理) (poj3101)
(3)計算方法.
1.0/1分數規劃. (poj2976)
2.三分法求解單峰(單谷)的極值.
3.矩陣法(poj3150,poj3422,poj3070)
4.迭代逼近(poj3301)
(4)隨機化演算法(poj3318,poj2454)
(5)雜題.
(poj1870,poj3296,poj3286,poj1095)
七.計算幾何學.
(1)坐標離散化.
(2)掃描線演算法(例如求矩形的面積和周長並,常和線段樹或堆一起使用).
(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
(3)多邊形的內核(半平面交)(poj3130,poj3335)
(4)幾何工具的綜合應用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)
高級:
一.基本演算法要求:
(1)代碼快速寫成,精簡但不失風格
(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
(2)保證正確性和高效性. poj3434
二.圖演算法:
(1)度限制最小生成樹和第K最短路. (poj1639)
(2)最短路,最小生成樹,二分圖,最大流問題的相關理論(主要是模型建立和求解)
(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
(3)最優比率生成樹. (poj2728)
(4)最小樹形圖(poj3164)
(5)次小生成樹.
(6)無向圖、有向圖的最小環
三.數據結構.
(1)trie圖的建立和應用. (poj2778)
(2)LCA和RMQ問題(LCA(最近公共祖先問題) 有離線演算法(並查集+dfs) 和 在線演算法
(RMQ+dfs)).(poj1330)
(3)雙端隊列和它的應用(維護一個單調的隊列,常常在動態規劃中起到優化狀態轉移的
目的). (poj2823)
(4)左偏樹(可合並堆).
(5)後綴樹(非常有用的數據結構,也是賽區考題的熱點).
(poj3415,poj3294)
四.搜索
(1)較麻煩的搜索題目訓練(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
(2)廣搜的狀態優化:利用M進制數存儲狀態、轉化為串用hash表判重、按位壓縮存儲狀態、雙向廣搜、A*演算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
(3)深搜的優化:盡量用位運算、一定要加剪枝、函數參數盡可能少、層數不易過大、可以考慮雙向搜索或者是輪換搜索、IDA*演算法. (poj3131,poj2870,poj2286)
五.動態規劃
(1)需要用數據結構優化的動態規劃.
(poj2754,poj3378,poj3017)
(2)四邊形不等式理論.
(3)較難的狀態DP(poj3133)
六.數學
(1)組合數學.
1.MoBius反演(poj2888,poj2154)
2.偏序關系理論.
(2)博奕論.
1.極大極小過程(poj3317,poj1085)
2.Nim問題.
七.計算幾何學.
(1)半平面求交(poj3384,poj2540)
(2)可視圖的建立(poj2966)
(3)點集最小圓覆蓋.
(4)對踵點(poj2079)
八.綜合題.
(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)gsyagsy 2007-11-29 00:22
以及補充 Dp狀態設計與方程總結
1.不完全狀態記錄
<1>青蛙過河問題
<2>利用區間dp
2.背包類問題
<1> 0-1背包,經典問題
<2>無限背包,經典問題
<3>判定性背包問題
<4>帶附屬關系的背包問題
<5> + -1背包問題
<6>雙背包求最優值
<7>構造三角形問題
<8>帶上下界限制的背包問題(012背包)
3.線性的動態規劃問題
<1>積木游戲問題
<2>決斗(判定性問題)
<3>圓的最大多邊形問題
<4>統計單詞個數問題
<5>棋盤分割
<6>日程安排問題
<7>最小逼近問題(求出兩數之比最接近某數/兩數之和等於某數等等)
<8>方塊消除游戲(某區間可以連續消去求最大效益)
<9>資源分配問題
<10>數字三角形問題
<11>漂亮的列印
<12>郵局問題與構造答案
<13>最高積木問題
<14>兩段連續和最大
<15>2次冪和問題
<16>N個數的最大M段子段和
<17>交叉最大數問題
4.判定性問題的dp(如判定整除、判定可達性等)
<1>模K問題的dp
<2>特殊的模K問題,求最大(最小)模K的數
<3>變換數問題
5.單調性優化的動態規劃
<1>1-SUM問題
<2>2-SUM問題
<3>序列劃分問題(單調隊列優化)
6.剖分問題(多邊形剖分/石子合並/圓的剖分/乘積最大)
<1>凸多邊形的三角剖分問題
<2>乘積最大問題
<3>多邊形游戲(多邊形邊上是操作符,頂點有權值)
<4>石子合並(N^3/N^2/NLogN各種優化)
7.貪心的動態規劃
<1>最優裝載問題
<2>部分背包問題
<3>乘船問題
<4>貪心策略
<5>雙機調度問題Johnson演算法
8.狀態dp
<1>牛仔射擊問題(博弈類)
<2>哈密頓路徑的狀態dp
<3>兩支點天平平衡問題
<4>一個有向圖的最接近二部圖
9.樹型dp
<1>完美伺服器問題(每個節點有3種狀態)
<2>小胖守皇宮問題
<3>網路收費問題
<4>樹中漫遊問題
<5>樹上的博弈
<6>樹的最大獨立集問題
<7>樹的最大平衡值問題
<8>構造樹的最小環

Ⅵ 編寫java程序:輸入一組整數存放在數組中,比較並輸出其中最大值和最小值,並將數組

public class Arr{
//數組
int[] arr = {3,1,6,4,5,10,2};
//對數組進行簡單的排序
java.util.Arrays.sort(arr);
//輸出最大值、最小值
System.out.println("最大值:" + arr[arr.length-1] +" 最小值:" + arr[0]);
//從小到大輸出
System.out.println(java.util.Arrays.toString(arr));
}

Ⅶ 我是計算機科學與技術專業的學生,想問問前輩們,畢業設計做什麼項目啊

當時我們輔導員給的有100多個題目呢,當時我做的是網站開發,我好多同學做的都是圖書館管理系統和餐飲管理系統。

要說你們學校網站 計科繫上面應該發布的有題目的。下面是我們當時給的題目

1--住宅小區智能化物業管理系統總體設計-
2--網上測評系統的設計-
3--基於web網站的綜合考評系統的設計-
4--基於web網站的考試系統設計-
5--網上教育資源庫系統的設計-
6--淺談網路協議的選用對網路性能的影響-
7--高校校園網信息管理平台研製-
8--實驗室管理信息系統設計與實現-
9--基於互聯網的學習課件的研製-
10--基於環聯網的輔導答疑係統研製-
11--智能網路入侵檢測技術初步研究-
12--電子政府信息處理總體實現架構研究-
13--企業管理信息系統設計與實現-
14--人事管理信息系統設計與實現-
15--學生信息管理系統設計與實現-
16--職工信息系統設計與實現-
17--職工工資管理系統設計與實現-
18--客房管理系統設計與實現-
19--中學考試管理信息系統設計與實現-
20--自學考試管理系統設計與實現-
21--超市管理系統設計與實現-
22--考試管理系統-
23--考務管理信息系統-
24--高校數學試題庫-
25--拓撲排序演算法的改進(給出AOV網的所有拓撲有序序列)-
26--哈希函數構造方法研究-
27--試卷自動生成系統設計-
28--自動檢測系統設計-
29--教學中常見表現手法在AW平台上的實現-
30--教學中常見表現手法在PPT平台上的實現-
31--多媒體課件製作中的跨平台操作-
32--個人網路設計-
33--單片機時間控制器開發-
34--單片機通用數據採集和處理系統-
35--資料庫系統開發-
36--網頁製作-
37--網路資料庫開發-
38--試題庫軟體設計-
39--圖書館管理系統-
40--學籍管理系統--
41--基於教學型軟體的設計與實現-
42--基於練習型交互軟體的設計與實現-
43--基於游戲型學習軟體的設計與實
44--VC實現windows文件管理-
45--單片機與微機通信-
46--單片機與紅外技術-
47--電子閱覽室收費系統-
48--用戶登陸與許可權管理子系統-
49--網路環境中的數據共享問題的分析與對策-
50--Unix與Windows NT網路互聯技術-
51--單片機控制的CO2焊機的設計(mcs-51系列)-
52--單片機控制的點焊控制器設計(mcs-51系列)-
53--利用網路實現互動功能
54--利用網路實現管理功能
56--如何防止IP地址盜用-
57--區域網主幹網路的選型-
58--動態網站設計-
59--企業物流管理-
60--葯品管理-
61--單片機遙控技術-
62--單片機與通訊-
63--家用電器與單片控制-
64--計算機教育教學探討-
65--計算機硬體技術理解與應用-
66--計算機輔助教學理論與實踐-
1 SMART晶元模擬器系統設計
2 程序執行結果模擬器
3 計算機硬體檢測系統
4 圖象處理軟體
5 ITS信息平台的設計與分析
6 基於B/S的職工信息管理系統
7 iButton及其應用
8 工作備忘錄的設計與實現
9 基於MATLAB數據模擬
10 基於Delphi的數據通信系統
11 **中學籍管理軟體
12 動態網站製作
13 資料庫信息管理系統
14 網站視頻點播
15 24點游戲
16 趣味繪圖
17 聊天程序
18 小學算術加減法教學軟體設計
19 個人網頁設計與友情連接
20 圖像處理軟體包
21 學生英語試題題庫及判分系統軟體設計
22 家庭理財管理信息系統設計
23 人事信息管理系統設計
24 計量管理信息系統
25 字元智能識別方法研究
25 基於圖像分析的公路路面破損統計系統企業信息管理系統
27 VB數據採集系統設計
28 VC數據採集系統設計
29 虛擬儀器數據採集系統設計
30 光柵位移感測器原理圖製作及模擬
31 網路搜索引擎性能分析系統模型及設計
32 基於簡訊的智能導行系統模型及設計
34 遠程非同步視頻授課系統研究
35 規劃設計中圖形處理技術
36 計算機圖形學在裝飾設計中的應用
37 公路工程試驗數據處理與分析(VB與Matlab)
38 城市信號交叉口禁左模擬
39 隨機模擬模型
40 高等級公路新線中線坐標放樣CAE
41 **大學上下水地下管網地理信息系統設計
42 油田測井數據繪圖軟體開發
42 企業管理系統
43 "**"課程的網路教學系統設計與開發
44 "**"課程試題庫的設計
45 地球物理數據反演系統中的圖形處理
46 電子教案中電路圖的繪制方法研究
47 .NET實現Internet消息平台
48 遠程列印及計費管理系統
49 機房無人值守系統
50 高速公路路網描述模擬模型構建
51 基於XML的數據交換在分布式WEB系統中的應用
52 基於關系資料庫的OLAP研究
53 等值線自動生成方法及程序實現
54 基於LDAP的語音服務(IP電話)中心研究
55 人工智慧多媒體教學軟體
56 BUG系統的設計
57 教學管理系統
58 虛擬現實技術應用研究
60 客戶管理系統
61 基於Web的教學系統設計與實現
62 信息工程學院資料室信息管理系統
63 基於網路的教材管理系統
64 石油工業儀器儀表質量監督檢驗中心網站設計
65 非線性流水線調度演算法動態演示程序設計
66 存儲體系地址映象及替換演算法動態演示程序設計
67 醫院葯房管理系統
68 門診劃價收費系統
69 公交公司人事管理系統
70 固定資產管理系統
71 網上圖書館(在線瀏覽及在線查詢)
72 工資計算系統
73 網上超市(電子商務網站的建設)
74 客戶關系管理系統
75 旅遊資源研發網的開發與設計
76 《****》試題庫的設計
77 餐飲娛樂管理系統的開發與設計
78 文語轉換系統
79 遠程數據服務平台(網站設計,數據管理系統)
80 室外環境檢測模擬平台(下分:控制台軟體設計,網路傳輸程序,監測軟體設計,硬體電路設計4個子題目)
81 圖像識別技術(計算特定物體的個數,圖像檢索技術)
82 圖像檢索系統設計與開發
83 視頻會議系統設計與開發
84 多媒體畢業紀念冊及播放系統設計開發
85 網路媒體播放器設計與實現
86 《數據結溝》演算法的動態演示
87 基於B/S結構的畢業設計題目管理系統
88 **大學計算機應用研究所網站
89 客戶管理系統
90 設備管理系統
91 實驗室管理系統
92 《多媒體軟體設計技術》課程CAI的開發
93 新聞網頁自動生成系統的開發
94 網站開發
95 電子白板的設計與實現
96 蟻群演算法在動態TSP問題種的應用研究
97 基於Web的非同步按需點播學習系統
98 多媒體同步實時授課系統中應用程序共享研究
99 協作編輯系統
100 基於web的遠程測控制系統研究
101 基於B/S模式文獻檢索系統的設計與開發
102 在線課題項目選題系統的設計及實現
103 學生檔案信息管理系統的開發
104 在線圖書館信息管理系統的設計及實現
105 瀏覽器過濾軟體實現
106 基於區域網的IP數據包監控軟體實現
107 WDM設備驅動程序開發-鍵盤過濾器
108 WDM設備驅動程序開發-滑鼠過濾器
109 基於OpengGL的虛擬場景漫遊軟體設計
110 城市公交查詢系統
111 J2EE框架的構建(Weblogic+JBuilder)
112 BrokerTool Project (C/S 結構)
113 多媒體開發與應用(Java2D,Java3D,JMF,Java圖形製作與動畫設計)
114 計算機輔修遠程教學系統設計與實現
115 《操作系統》典型演算法實現
116 "***"網站設計與實現
117 門禁管理系統實現
118 計算機系網站設計及建設
119 基於Internet的網路教學系統
120 視頻點播系統
121 基於Internet的車輛管理、調度系統
122 武裝工作管理系統
123 門禁式網路機房計費系統
124 成人教育學生檔案及成績管理系統
125 汽車綜合性能工位測控系統設計與軟體實現
126 汽車制動性能虛擬檢測儀器設計與軟體實現
127 基於LAN的汽車性能微機檢測系統
128 汽車制動信號數字濾波及曲線擬合優化方法研究
129 動態存儲器的刷新
130 電磁機構的計算機設計
131 伺服器端安全監控軟體的設計
132 校園網路地址管理模型的設計與實現

Ⅷ 關鍵路徑怎麼求求詳解。

關鍵路徑的演算法是建立在拓撲排序的基礎之上的,這個演算法中用到了拓撲排序。

1. 什麼是拓撲排序?

舉個例子先:一個軟體專業的學生學習一系列的課程,其中一些課程必須再學完它的基礎的先修課程才能開始。如:在《程序設計基礎》和《離散數學》學完之前就不能開始學習《數據結構》。這些先決條件定義了課程之間的領先(優先)關系。這個關系可以用有向圖更清楚地表示。圖中頂點表示課程,有向邊表示先決條件。若課程i是課程j的先決條件,則圖中有弧<i,j>。若要對這個圖中的頂點所表示的課程進行拓撲排序的話,那麼排序後得到的序列,必須是按照先後關系進行排序,具有領先關系的課程必然排在以它為基礎的課程之前,若上例中的《程序設計基礎》和《離散數學》必須排在《數據結構》之前。進行了拓撲排序之後的序列,稱之為拓撲序列。

2. 如何實現拓撲排序?

很簡單,兩個步驟:

1. 在有向圖中選一個沒有前驅的頂點且輸出。

2. 從圖中刪除該頂點和以它為尾的弧。

重復上述兩步,直至全部頂點均已輸出,或者當前圖中不存在無前驅的頂點為止。後一種情況則說明有向圖中存在環。

3. 什麼是關鍵路徑?

例子開頭仍然,圖1是一個假想的有11項活動的A0E-網。其中有9個事件v1,v2......,v9,每個事件表示在它之前的活動一完成,在它之後的活動可以開始。如v1表示整個工程的開始,v9表示整個工程結束,v5表示a4和a5已完成,a7和a8可以開始。與每個活動相聯系的數是執行該活動所需的時間。比如,活動a1需要6天,a2需要4天。

packagegraph;
importjava.util.*;
publicclassGrph_CriticalPath
{
Graph_AdjListadjList;
Stack<Integer>T=newStack<Integer>();
intve[];
intvl[];
finalintmax=10000;

publicGrph_CriticalPath(Graph_AdjListadjList)//圖的存儲結構是用的鄰接表
{
this.adjList=adjList;
intlength=adjList.vetexValue.length;
ve=newint[length];
vl=newint[length];
for(inti=0;i<length;i++)
{
ve[i]=0;
vl[i]=max;
}
}

publicvoidgetCriticalPath()
{
topologicalOrder();

intt=T.pop();
T.push(t);
vl[t]=ve[t];
while(!T.isEmpty())
{
intj=T.pop();
for(Graph_AdjList.ArcNodep=adjList.vetex[j].firstArc;p!=null;p=p.next)
{
intk=p.adjvex;
if(vl[k]-p.weight<vl[j])
{
vl[j]=vl[k]-p.weight;
}
}
}
for(inti=0;i<ve.length;i++)
{
for(Graph_AdjList.ArcNodep=adjList.vetex[i].firstArc;p!=null;p=p.next)
{
intk=p.adjvex;
intee=ve[i];
intel=vl[k]-p.weight;
if(ee==el)
{
System.out.print(i+","+k+"");
}

}
}
}

publicvoidtopologicalOrder()
{
Stack<Integer>S=newStack<Integer>();
S.push(0);
intcount=0;
while(!S.isEmpty())
{
intj=S.pop();
T.push(j);
count++;
Graph_AdjList.ArcNodep=null;
for(p=adjList.vetex[j].firstArc;p!=null;p=p.next)
{
intk=p.adjvex;
if(--adjList.degree[k]==0)
{
S.push(k);
}
if(ve[j]+p.weight>ve[k])
{
ve[k]=ve[j]+p.weight;
}
}
}
if(count<adjList.vetexValue.length)
{
System.out.println("圖中存在環路!");
return;
}
}

publicvoidprint()
{
while(!T.isEmpty())
{
System.out.print(T.pop()+"");
}
}

publicvoidprintVel()
{
System.out.println();
for(inti=0;i<ve.length;i++)
{
System.out.print(ve[i]+"");
}
System.out.println();
for(inti=0;i<vl.length;i++)
{
System.out.print(vl[i]+"");
}
}


}

轉自:http://blog.csdn.net/pigli/article/details/5777048

Ⅸ acm競賽知識點

1. acm常用小知識點
acm常用小知識點 1.ACM 關於ACM程序設計競賽,需要掌握哪些知識點,最好能詳細一
訓練過ACM等程序設計競賽的人在演算法上有較大的優勢,這就說明當你編程能力提高之後,主要時間是花在思考演算法上,不是花在寫程序與debug上。

下面給個計劃你練練:第一階段:練經典常用演算法,下面的每個演算法給我打上十到二十遍,同時自己精簡代碼,因為太常用,所以要練到寫時不用想,10-15分鍾內打完,甚至關掉顯示器都可以把程序打出來。1.最短路(Floyd、Dijstra,BellmanFord) 2.最小生成樹(先寫個prim,kruscal要用並查集,不好寫) 3.大數(高精度)加減乘除4.二分查找. (代碼可在五行以內) 5.叉乘、判線段相交、然後寫個凸包. 6.BFS、DFS,同時熟練hash表(要熟,要靈活,代碼要簡) 7.數學上的有:輾轉相除(兩行內),線段交點、多角形面積公式. 8. 調用系統的qsort, 技巧很多,慢慢掌握. 9. 任意進制間的轉換第二階段:練習復雜一點,但也較常用的演算法。

如: 1. 二分圖匹配(匈牙利),最小路徑覆蓋 2. 網路流,最小費用流。 3. 線段樹. 4. 並查集。

5. 熟悉動態規劃的各個典型:LCS、最長遞增子串、三角剖分、記憶化dp 6.博弈類演算法。博弈樹,二進製法等。

7.最大團,最大獨立集。 8.判斷點在多邊形內。

9. 差分約束系統. 10. 雙向廣度搜索、A*演算法,最小耗散優先.第三階段: 前兩個階段是打基礎,第三階段是鍛煉在比賽中可以快速建立模型、想新演算法。這就要平時多做做綜合的題型了。

1. 把oibh上的論文看看(大概幾百篇的,我只看了一點點,呵呵)。 2. 平時掃掃zoj上的難題啦,別老做那些不用想的題.(中大acm的版主經常說我挑簡單的來做:-P ) 3. 多參加網上的比賽,感受一下比賽的氣氛,評估自己的實力. 4. 一道題不要過了就算,問一下人,有更好的演算法也打一下。

5. 做過的題要記好 :-)下面轉自:ACMer必備知識(任重而道遠。)

圖論 路徑問題 0/1邊權最短路徑 BFS 非負邊權最短路徑(Dijkstra) 可以用Dijkstra解決問題的特徵 負邊權最短路徑 Bellman-Ford Bellman-Ford的Yen-氏優化 差分約束系統 Floyd 廣義路徑問題 傳遞閉包 極小極大距離 / 極大極小距離 Euler Path / Tour 圈套圈演算法 混合圖的 Euler Path / Tour Hamilton Path / Tour 特殊圖的Hamilton Path / Tour 構造 生成樹問題 最小生成樹 第k小生成樹 最優比率生成樹 0/1分數規劃 度限制生成樹 連通性問題 強大的DFS演算法 無向圖連通性 割點 割邊 二連通分支 有向圖連通性 強連通分支 2-SAT 最小點基 有向無環圖 拓撲排序 有向無環圖與動態規劃的關系 二分圖匹配問題 一般圖問題與二分圖問題的轉換思路 最大匹配 有向圖的最小路徑覆蓋 0 / 1矩陣的最小覆蓋 完備匹配 最優匹配 穩定婚姻 網路流問題 網路流模型的簡單特徵和與線性規劃的關系 最大流最小割定理 最大流問題 有上下界的最大流問題 循環流 最小費用最大流 / 最大費用最大流 弦圖的性質和判定組合數學 解決組合數學問題時常用的思想 逼近 遞推 / 動態規劃 概率問題 Polya定理計算幾何 / 解析幾何 計算幾何的核心:叉積 / 面積 解析幾何的主力:復數 基本形 點 直線,線段 多邊形 凸多邊形 / 凸包 凸包演算法的引進,卷包裹法 Graham掃描法 水平序的引進,共線凸包的補丁 完美凸包演算法 相關判定 兩直線相交 兩線段相交 點在任意多邊形內的判定 點在凸多邊形內的判定 經典問題 最小外接圓 近似O(n)的最小外接圓演算法 點集直徑 旋轉卡殼,對踵點 多邊形的三角剖分數學 / 數論 最大公約數 Euclid演算法 擴展的Euclid演算法 同餘方程 / 二元一次不定方程 同餘方程組 線性方程組 高斯消元法 解mod 2域上的線性方程組 整系數方程組的精確解法 矩陣 行列式的計算 利用矩陣乘法快速計算遞推關系 分數 分數樹 連分數逼近 數論計算 求N的約數個數 求phi(N) 求約數和 快速數論變換 …… 素數問題 概率判素演算法 概率因子分解數據結構 組織結構 二叉堆 左偏樹 二項樹 勝者樹 跳躍表 樣式圖標 斜堆 reap 統計結構 樹狀數組 虛二叉樹 線段樹 矩形面積並 圓形面積並 關系結構 Hash表 並查集 路徑壓縮思想的應用 STL中的數據結構 vector deque set / map動態規劃 / 記憶化搜索 動態規劃和記憶化搜索在思考方式上的區別 最長子序列系列問題 最長不下降子序列 最長公共子序列 最長公共不下降子序列 一類NP問題的動態規劃解法 樹型動態規劃 背包問題 動態規劃的優化 四邊形不等式 函數的凸凹性 狀態設計 規劃方向線性規劃常用思想 二分 最小表示法串 KMP Trie結構 後綴樹/後綴數組 LCA/RMQ 有限狀態自動機理論排序 選擇/冒泡 快速排序 堆排序 歸並排序 基數排序 拓撲排序 排序網路。
2.ACM需要具備什麼知識
ACM國際大學生程序設計競賽(ACM/ICPC :ACM International Collegiate Programming Contest)是由國際計算機界歷史悠久、頗具權威性的組織ACM( 美國計算機協會)學會(Association for puter Machineary)主辦,是世界上公認的規模最大、水平最高的國際大學生程序設計競賽,其目的旨在使大學生運用計算機來充分展示自已分析問題和解決問題的能力。該項競賽從1970年舉辦至今已歷25屆,因歷屆競賽都薈萃了世界各大洲的精英,雲集了計算機界的「希望之星」,而受到國際各知名大學的重視,並受到全世界各著名計算機公司如Microsoft(微軟公司) 、IBM等的高度關注,成為世界各國大學生最具影響力的國際級計算機類的賽事,ACM所頒發的獲獎證書也為世界各著名計算機公司、各知名大學所認可。

該項競賽是年度性競賽,分區域預賽和國際決賽兩個階段進行,各預賽區第一名自動獲得參加世界決賽的資格,世界決賽安排在每年的3~4月舉行,而區域預賽安排在上一年的9月~12月在各大洲舉行。從1998年開始,IBM公司連續5年獨家贊助該項賽事的世界決賽和區域預賽。這項比賽是以大學為單位組隊(每支隊由教練、3名正式隊員,一名後備隊員組成)參賽,要求在5個小時內,解決5~8到題目。

ACM/ICPC的區域預賽是規模很大,范圍很廣的賽事,近幾年,全世界有1000多所大學, 2000多支參賽隊在六大洲的28~30個賽站中爭奪世界決賽的60~66個名額,去年我校舉辦的區域預賽,就有來自50多所高校的100多支隊伍參加,其激烈程度可想而知。

與其他編程競賽相比,ACM/ICPC題目難度更大,更強調演算法的高效性,不僅要解決一個指定的命題,而且必需要以最佳的方式解決指定的命題;它涉及知識面廣,與大學計算機系本科以及研究生如程序設計、離散數學、數據結構、人工智慧、演算法分析與設計等相關課程直接關聯,對數學要求更高,由於採用英文命題,對英語要求高,ACM/ICPC採用3人合作、共用一台電腦,所以它更強調團隊協作精神;由於許多題目並無現成的演算法,需要具備創新的精神,ACM/ICPC不僅強調學科的基礎,更強調全面素質和能力的培養。ACM/ICPC是一種全封閉式的競賽,能對學生能力進行實時的全面的考察,其成績的真實性更強,所以目前已成為內地高校的一個熱點,是培養全面發展優秀人材的一項重要的活動。概括來說就是:強調演算法的高效性、知識面要廣、對數學和英語要求較高、團隊協作和創新精神。
3.ACM需要那些方面的知識
一、語言是最重要的基本功 無論側重於什麼方面,只要是通過計算機程序去最終實現的競賽,語言都是大家要 過的第一道關。

亞洲賽區的比賽支持的語言包括C/C++與JAVA。筆者首先說說JAVA,眾所 周知,作為面向對象的王牌語言,JAVA在大型工程的組織與安全性方面有著自己獨特的 優勢,但是對於信息學比賽的具體場合,JAVA則顯得不那麼合適,它對於輸入輸出流的 操作相比於C++要繁雜很多,更為重要的是JAVA程序的運行速度要比C++慢10倍以上,而 競賽中對於JAVA程序的運行時限卻往往得不到同等比例的放寬,這無疑對演算法設計提出 了更高的要求,是相當不利的。

其實,筆者並不主張大家在這種場合過多地運用面向對 象的程序設計思維,因為對於小程序來說這不旦需要花費更多的時間去編寫代碼,也會 降低程序的執行效率。 接著說C和C++。

許多現在參加講座的同學還在上大一,C的基礎知識剛剛學完,還沒 有接觸過C++,其實在賽場上使用純C的選手還是大有人在的,它們主要是看重了純C在效 率上的優勢,所以這部分同學如果時間有限,並不需要急著去學習新的語言,只要提高 了自己在演算法設計上的造詣,純C一樣能發揮巨大的威力。 而C++相對於C,在輸入輸出流上的封裝大大方便了我們的操作,同時降低了出錯的 可能性,並且能夠很好地實現標准流與文件流的切換,方便了調試的工作。

如果有些同 學比較在意這點,可以嘗試C和C++的混編,畢竟僅僅學習C++的流操作還是不花什麼時間 的。 C++的另一個支持來源於標准模版庫(STL),庫中提供的對於基本數據結構的統一 介面操作和基本演算法的實現可以縮減我們編寫代碼的長度,這可以節省一些時間。

但是 ,與此相對的,使用STL要在效率上做出一些犧牲,對於輸入規模很大的題目,有時候必 須放棄STL,這意味著我們不能存在「有了STL就可以不去管基本演算法的實現」的想法; 另外,熟練和恰當地使用STL必須經過一定時間的積累,准確地了解各種操作的時間復雜 度,切忌對STL中不熟悉的部分濫用,因為這其中蘊涵著許多初學者不易發現的陷阱。 通過以上的分析,我們可以看出僅就信息學競賽而言,對語言的掌握並不要求十分 全面,但是對於經常用到的部分,必須十分熟練,不允許有半點不清楚的地方,下面我 舉個真實的例子來說明這個道理——即使是一點很細微的語言障礙,都有可能釀成錯誤 : 在去年清華的賽區上,有一個隊在做F題的時候使用了cout和printf的混合輸出,由 於一個帶緩沖一個不帶,所以輸出一長就混亂了。

只是因為當時judge team中負責F題的 人眼睛尖,看出答案沒錯只是順序不對(答案有一頁多,是所有題目中最長的一個輸出 ),又看了看程序發現只是輸出問題就給了個Presentation error(格式錯)。如果審 題的人不是這樣而是直接給一個 Wrong Answer,相信這個隊是很難查到自己錯在什麼地 方的。

現在我們轉入第二個方面的討論,基礎學科知識的積累。 二、以數學為主的基礎知識十分重要 雖然被定性為程序設計競賽,但是參賽選手所遇到的問題更多的是沒有解決問題的 思路,而不是有了思路卻死活不能實現,這就是平時積累的基礎知識不夠。

今年World Final的總冠軍是波蘭華沙大學,其成員出自於數學系而非計算機系,這就是一個鮮活的 例子。競賽中對於基礎學科的涉及主要集中於數學,此外對於物理、電路等等也可能有 一定應用,但是不多。

因此,大一的同學也不必為自己還沒學數據結構而感到不知從何 入手提高,把數學撿起來吧!下面我來談談在競賽中應用的數學的主要分支。 1、離散數學——作為計算機學科的基礎,離散數學是競賽中涉及最多的數學分支, 其重中之重又在於圖論和組合數學,尤其是圖論。

圖論之所以運用最多是因為它的變化最多,而且可以輕易地結合基本數據結構和許 多演算法的基本思想,較多用到的知識包括連通性判斷、DFS和BFS,關節點和關鍵路徑、歐拉迴路、最小生成樹、最短路徑、二部圖匹配和網路流等等。雖然這部分的比重很大 ,但是往往也是競賽中的難題所在,如果有初學者對於這部分的某些具體內容暫時感到 力不從心,也不必著急,可以慢慢積累。

競賽中設計的組合計數問題大都需要用組合數學來解決,組合數學中的知識相比於 圖論要簡單一些,很多知識對於小學上過奧校的同學來說已經十分熟悉,但是也有一些 部分需要先對代數結構中的群論有初步了解才能進行學習。組合數學在競賽中很少以難 題的形式出現,但是如果積累不夠,任何一道這方面的題目卻都有可能成為難題。

2、數論——以素數判斷和同餘為模型構造出來的題目往往需要較多的數論知識來解 決,這部分在競賽中的比重並不大,但只要來上一道,也足以使知識不足的人冥思苦想 上一陣時間。素數判斷和同餘最常見的是在以密碼學為背景的題目中出現,在運用密碼 學常識確定大概的過程之後,核心演算法往往要涉及數論的內容。

3、計算幾何——計算幾何相比於其它部分來說是比較獨立的,就是說它和其它的知 識點很少有過多的結合,較常用到的部分包括——線段相交的判斷、多邊形面積的計算 、內點外點的判斷、凸包等。
4.ACM需要那些方面的知識
一、語言是最重要的基本功 無論側重於什麼方面,只要是通過計算機程序去最終實現的競賽,語言都是大家要 過的第一道關。

亞洲賽區的比賽支持的語言包括C/C++與JAVA。筆者首先說說JAVA,眾所 周知,作為面向對象的王牌語言,JAVA在大型工程的組織與安全性方面有著自己獨特的 優勢,但是對於信息學比賽的具體場合,JAVA則顯得不那麼合適,它對於輸入輸出流的 操作相比於C++要繁雜很多,更為重要的是JAVA程序的運行速度要比C++慢10倍以上,而 競賽中對於JAVA程序的運行時限卻往往得不到同等比例的放寬,這無疑對演算法設計提出 了更高的要求,是相當不利的。

其實,筆者並不主張大家在這種場合過多地運用面向對 象的程序設計思維,因為對於小程序來說這不旦需要花費更多的時間去編寫代碼,也會 降低程序的執行效率。 接著說C和C++。

許多現在參加講座的同學還在上大一,C的基礎知識剛剛學完,還沒 有接觸過C++,其實在賽場上使用純C的選手還是大有人在的,它們主要是看重了純C在效 率上的優勢,所以這部分同學如果時間有限,並不需要急著去學習新的語言,只要提高 了自己在演算法設計上的造詣,純C一樣能發揮巨大的威力。 而C++相對於C,在輸入輸出流上的封裝大大方便了我們的操作,同時降低了出錯的 可能性,並且能夠很好地實現標准流與文件流的切換,方便了調試的工作。

如果有些同 學比較在意這點,可以嘗試C和C++的混編,畢竟僅僅學習C++的流操作還是不花什麼時間 的。 C++的另一個支持來源於標准模版庫(STL),庫中提供的對於基本數據結構的統一 介面操作和基本演算法的實現可以縮減我們編寫代碼的長度,這可以節省一些時間。

但是 ,與此相對的,使用STL要在效率上做出一些犧牲,對於輸入規模很大的題目,有時候必 須放棄STL,這意味著我們不能存在「有了STL就可以不去管基本演算法的實現」的想法; 另外,熟練和恰當地使用STL必須經過一定時間的積累,准確地了解各種操作的時間復雜 度,切忌對STL中不熟悉的部分濫用,因為這其中蘊涵著許多初學者不易發現的陷阱。 通過以上的分析,我們可以看出僅就信息學競賽而言,對語言的掌握並不要求十分 全面,但是對於經常用到的部分,必須十分熟練,不允許有半點不清楚的地方,下面我 舉個真實的例子來說明這個道理——即使是一點很細微的語言障礙,都有可能釀成錯誤 : 在去年清華的賽區上,有一個隊在做F題的時候使用了cout和printf的混合輸出,由 於一個帶緩沖一個不帶,所以輸出一長就混亂了。

只是因為當時judge team中負責F題的 人眼睛尖,看出答案沒錯只是順序不對(答案有一頁多,是所有題目中最長的一個輸出 ),又看了看程序發現只是輸出問題就給了個Presentation error(格式錯)。如果審 題的人不是這樣而是直接給一個 Wrong Answer,相信這個隊是很難查到自己錯在什麼地 方的。

現在我們轉入第二個方面的討論,基礎學科知識的積累。 二、以數學為主的基礎知識十分重要 雖然被定性為程序設計競賽,但是參賽選手所遇到的問題更多的是沒有解決問題的 思路,而不是有了思路卻死活不能實現,這就是平時積累的基礎知識不夠。

今年World Final的總冠軍是波蘭華沙大學,其成員出自於數學系而非計算機系,這就是一個鮮活的 例子。競賽中對於基礎學科的涉及主要集中於數學,此外對於物理、電路等等也可能有 一定應用,但是不多。

因此,大一的同學也不必為自己還沒學數據結構而感到不知從何 入手提高,把數學撿起來吧!下面我來談談在競賽中應用的數學的主要分支。 1、離散數學——作為計算機學科的基礎,離散數學是競賽中涉及最多的數學分支, 其重中之重又在於圖論和組合數學,尤其是圖論。

圖論之所以運用最多是因為它的變化最多,而且可以輕易地結合基本數據結構和許 多演算法的基本思想,較多用到的知識包括連通性判斷、DFS和BFS,關節點和關鍵路徑、歐拉迴路、最小生成樹、最短路徑、二部圖匹配和網路流等等。雖然這部分的比重很大 ,但是往往也是競賽中的難題所在,如果有初學者對於這部分的某些具體內容暫時感到 力不從心,也不必著急,可以慢慢積累。

競賽中設計的組合計數問題大都需要用組合數學來解決,組合數學中的知識相比於 圖論要簡單一些,很多知識對於小學上過奧校的同學來說已經十分熟悉,但是也有一些 部分需要先對代數結構中的群論有初步了解才能進行學習。組合數學在競賽中很少以難 題的形式出現,但是如果積累不夠,任何一道這方面的題目卻都有可能成為難題。

2、數論——以素數判斷和同餘為模型構造出來的題目往往需要較多的數論知識來解 決,這部分在競賽中的比重並不大,但只要來上一道,也足以使知識不足的人冥思苦想 上一陣時間。素數判斷和同餘最常見的是在以密碼學為背景的題目中出現,在運用密碼 學常識確定大概的過程之後,核心演算法往往要涉及數論的內容。

3、計算幾何——計算幾何相比於其它部分來說是比較獨立的,就是說它和其它的知 識點很少有過多的結合,較常用到的部分包括——線段相交的判斷、多邊形面積的計算 、內點外點的判斷、凸包等。
5.ACM需要具備什麼知識
ACM國際大學生程序設計競賽(ACM/ICPC :ACM International Collegiate Programming Contest)是由國際計算機界歷史悠久、頗具權威性的組織ACM( 美國計算機協會)學會(Association for puter Machineary)主辦,是世界上公認的規模最大、水平最高的國際大學生程序設計競賽,其目的旨在使大學生運用計算機來充分展示自已分析問題和解決問題的能力。該項競賽從1970年舉辦至今已歷25屆,因歷屆競賽都薈萃了世界各大洲的精英,雲集了計算機界的「希望之星」,而受到國際各知名大學的重視,並受到全世界各著名計算機公司如Microsoft(微軟公司) 、IBM等的高度關注,成為世界各國大學生最具影響力的國際級計算機類的賽事,ACM所頒發的獲獎證書也為世界各著名計算機公司、各知名大學所認可。

該項競賽是年度性競賽,分區域預賽和國際決賽兩個階段進行,各預賽區第一名自動獲得參加世界決賽的資格,世界決賽安排在每年的3~4月舉行,而區域預賽安排在上一年的9月~12月在各大洲舉行。從1998年開始,IBM公司連續5年獨家贊助該項賽事的世界決賽和區域預賽。這項比賽是以大學為單位組隊(每支隊由教練、3名正式隊員,一名後備隊員組成)參賽,要求在5個小時內,解決5~8到題目。

ACM/ICPC的區域預賽是規模很大,范圍很廣的賽事,近幾年,全世界有1000多所大學, 2000多支參賽隊在六大洲的28~30個賽站中爭奪世界決賽的60~66個名額,去年我校舉辦的區域預賽,就有來自50多所高校的100多支隊伍參加,其激烈程度可想而知。

與其他編程競賽相比,ACM/ICPC題目難度更大,更強調演算法的高效性,不僅要解決一個指定的命題,而且必需要以最佳的方式解決指定的命題;它涉及知識面廣,與大學計算機系本科以及研究生如程序設計、離散數學、數據結構、人工智慧、演算法分析與設計等相關課程直接關聯,對數學要求更高,由於採用英文命題,對英語要求高,ACM/ICPC採用3人合作、共用一台電腦,所以它更強調團隊協作精神;由於許多題目並無現成的演算法,需要具備創新的精神,ACM/ICPC不僅強調學科的基礎,更強調全面素質和能力的培養。ACM/ICPC是一種全封閉式的競賽,能對學生能力進行實時的全面的考察,其成績的真實性更強,所以目前已成為內地高校的一個熱點,是培養全面發展優秀人材的一項重要的活動。概括來說就是:強調演算法的高效性、知識面要廣、對數學和英語要求較高、團隊協作和創新精神。
6.ACM常用的經典演算法
大概分為數論演算法,圖論演算法,A*演算法。

數論演算法:

排序(選擇,冒泡,快速,歸並,堆,基數,桶排序等)

遞歸,回溯

概率,隨機

公約數,素數

因數分解

矩陣運算

線性規劃

最小二乘

微積分

多項式分解和級數

圖論演算法:

哈夫曼樹(即最優二叉樹)

哈希表

Prim,Kruskal演算法(即最小生成樹演算法)

紅黑樹

a-B剪枝法

深、廣度搜索

拓撲排序

強連通分量

Dijkstra,Bellman-Ford,Floyd-Warashall演算法(最短路徑演算法)

計算幾何(線段相交,凸包,最近點對)

A*演算法:

動態規劃

貪心演算法

KMP演算法

哈密頓迴路問題

子集問題

博弈(極大極小值演算法等)
7.參加ACM需要准備哪些知識
學ACM要熟練C語言的基礎語法,對編程有很大的興趣,還要學關於數據結構的知識。

內容大多數是考數據結構,例如:深度搜索(dfs)、廣度搜索(bfs)、並查集、母函數、最小生成樹、數論、動態規劃(重點)、背包問題、最短路、網路流……還有很多演算法,我列出這些是經常考到的,我也在學習上述所說的。 最好買一本《數據結構》或者關於演算法的書看看,看完一些要自己動手實踐做題,做題的話去杭電acm做題,裡面有很多很基礎的題,不錯的。

資料的話,網路有很多,我多數都是網路或者 *** ,還有可以看看別人的博客的解題報告,裡面有詳細的介紹,不懂還可以問問同學師兄的。 對了,還有一點,acm比賽都是英文題目的,比賽時帶本字典查吧。

希望我說的你能滿意,祝你能在acm方面有所收獲。

Ⅹ 拓撲排序排課表

信息工程系軟體技術學生課程表(拓撲排序)
拓撲圖為:(圖不好粘貼)

運用拓撲概念排序的結果:
C1 , C9 , C3 , C2 , C7 , C4, C5 , C8 , C6
C1計算機應用基礎 C2 C語言 C3 VB語言 C4 JSP C5數字邏輯電路 C6軟體工程
C7計算機網路基礎 C8 Java語言 C9計算機數學基礎
/*-------------------------------主類-----------------------------*/
public class Navy1 {
public static void main(String[] args) {
topology(); //調用拓撲的構造方法
}

public static void topology() { //構造拓撲方法
/**
聲明拓撲圖中的元素
定義節點和節點之間的關系
Entry(a,b)a為b的前導
**/

Entry[] relations = { new Entry(9, 2), new Entry(3,7),
new Entry(7, 5), new Entry(5, 8), new Entry(8, 6),
new Entry(4, 6), new Entry(1, 3), new Entry(7, 4),
new Entry(9, 5), new Entry(2, 8) };
int n = 9;
int n1 = 9;
/*計算拓撲圖中節點數*/
int[] count = { -1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
/*開辟內存空間*/
Node[] top = { null, null, null, null, null, null, null, null, null, null };
Node p = null;
for (int i = 0; i < relations.length; i++) {
count[relations[i].k]++;
p = new Node();
p.suc = relations[i].k;
p.next = top[relations[i].j];
top[relations[i].j] = p;
}
int r = 0;
int[] qlink = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
for (int i = 1; i <= n; i++) {
if (count[i] == 0) {
qlink[r] = i;
r = i;
}
}
int f = qlink[0];
System.out.println("題目及要求:");
System.out.println("課程排課程序。寫一個程序,實現對某個專業的課程進行排課的功能。");
System.out.println("已知某專業的課程和它們的前導和後續關系(以有向圖的形式表示),");
System.out.println("請用拓撲排序演算法求出這些課程的優先關系並輸出一種排課結果");
System.out.println("--------------------------------------");
System.out.println("08信息工程系軟體技術課程表(拓撲排序)");

while (true)
{
System.out.println(f);
if (f == 0) //結束條件
{
break;
}
else
{
n1--;
p = top[f];
while (true)
{
if (p == null)
{
break;
}
else
{
count[p.suc]--;
if (count[p.suc] == 0)
{
qlink[r] = p.suc;
r = p.suc;
}
p = p.next;
}
}
f = qlink[f];
}
}
System.out.println("結束的標志為:" + n1);
System.out.println("--------------------------------------------");
System.out.println("注釋(數字對應的課程):");
System.out.println("1 計算機應用基礎 2 C語言 3 VB語言 ");
System.out.println("4 JSP 5 數字邏輯電路 6 軟體工程");
System.out.println("7 計算機網路基礎 8 Java語言 9 計算機數學基礎");
System.out.println("--------------------------------------------");
}
/*構造元素類*/
private static class Entry
{
public Entry(int begin, int end) //定義開始元素和結束元素
{
this.j = begin;
this.k = end;
}
int j;
int k;
}
/*聲明節點的後繼*/
private static class Node
{
public Node(int suc, Node next)
{
this.suc = suc;
this.next = next;
}
public Node()
{

}
int suc;
Node next;
}
}

閱讀全文

與拓撲排序演算法java相關的資料

熱點內容
自己建了伺服器地址 瀏覽:696
命令按鈕的屬性設置 瀏覽:961
證券技術分析pdf 瀏覽:777
linux命令連接oracle 瀏覽:200
墊江停車收費樁怎麼上App 瀏覽:133
好興動app還款怎麼登錄不上去了 瀏覽:665
鄭州雲伺服器託管 瀏覽:722
伺服器地址跟蹤 瀏覽:980
免費google雲伺服器 瀏覽:516
摘譯和編譯的英文 瀏覽:359
熱泵壓縮機選型 瀏覽:121
op手機微信加密如何解除 瀏覽:386
如何在王牌戰爭找到高爆率伺服器 瀏覽:13
江浙小學語文輔導課用什麼APP 瀏覽:99
新夢幻大陸伺服器地址 瀏覽:241
網吧伺服器怎麼更換壁紙 瀏覽:530
linux命令方法 瀏覽:332
linux下載freetype 瀏覽:123
程序員入駐平台 瀏覽:327
程序員大戰外掛 瀏覽:745