演算法導論 第8章 線性時間排序

一、概念1.比較排序比較排序是指通過輸入元素間的比較來確定各元素次序的排序演算法。任何比較排序在最壞情況下都要用O(nlgn)次比較來進行排序合并排序和堆排序是漸近最優的2.非比較排序非比較排序指使用一些非比較的操作來確定排序次序的排序演算法對於非比較排序,下界O(nlgn)不適用計數排序是穩定排序,若n個資料的取值範圍是[0..k],則已耗用時間為O(n+k),Runspace是O(n+k)基數排序也是穩定排序,需要另一個穩定排序作為基礎,若n個d位元,每一位有k種取值可能,所用的穩定排序已耗

HDU2544用矩陣實現的Dijkstra

 #include <iostream>using namespace std;int road[105][105],dis[105],n;bool In[105];int Dijkstra(int start, int end);int main(){int m,a,b,c;while(cin>>n>>m && (n||m)){memset(road, 0, sizeof(road));memset(In, 0,

HDU2824歐拉公式之打表演算法

 HDU 2824 The Euler function歐拉φ函數:φ(n)是所有小於n的正整數裡,和n互素的整數的個數。n是一個正整數。歐拉證明了下面這個式子:如果n的標準素因子分解式是p1^a1*p2^a2*……*pm^am,其中眾pj(j=1,2,……,m)都是素數,而且兩兩不等。則有φ(n)=n(1-1/p1)(1-1/p2)……(1-1/pm)如果n為奇素數,φ(n)=n-1.解法:線性篩選法在程式中利用歐拉函數如下性質,可以快速求出歐拉函數的值(a為N的質因素)(1) 若(N%a==

演算法導論-8-3-排序不同長度的資料項目

一、題目a)給定一個整數數組,其中不同的整數中包含的數字個數可能不同,但是該數組中,所有整數中總的數字數為n。說明如何在O(n)時間內對該數組進行排序b)給定一個字串數組,其中不同的串包含的字元個數可能不同,但所有串中總的字元個數為n。說明如何在O(n)時間內對該數組進行排序(注意此處的順序是指標準的字母順序,例如,a < ab <

演算法導論 11.1-4 大數組的直接定址表

一、題目我們希望我們希望通過利用在一個非常大的數組上直接定址的方式來實現字典。開始時,該數組中可能包含廢料,但要對整個數組進行初始化是不實際的,因為該數組的規模太大。請給出在大數組上實現直接定址字典方案。每個儲存的對象佔用O(1)的空間;操作search,insert,delete的時間為O(1);對資料結構初始化時間為O(1)。

HDU2874並查集+(LCA-RMQ)

 #include <iostream>#include <cmath>using namespace std;#define MAX 10010int n,m,q;int tol;//邊的個數int cnt;//點的個數/*****************並查集,用於把樹木合成樹**********************/int root = 0;//添加的虛結點int father[MAX];void Merge(int a, int b);int

演算法導論-9.3-3-快速排序-最壞時間O(nlgn)

一、題目假定元素的值不同,說明如何才能使快速排序在最壞情況下以O(nlgn)時間運行二、思考要改善最壞情況的下已耗用時間,就要從劃分入手,保證即使是最壞情況,也要盡量均衡地劃分。因此,使用SELECT找到中值,再以這個中值為主元進行劃分三、代碼1.以RANDOMIZED-SELECT作為選擇中值的演算法//9.3-3#include <iostream>using namespace std;//已經出現很多次了,不解釋int Partition(int *A, int p,

演算法導論 11.2-4 散列表內未佔用槽連結成自由鏈表

一、題目說明在散列表內部,如何通過將所有未佔用的槽位鏈成一個自由表,來分配和去配元素的儲存空間。假定一個槽位可以儲存一個標誌、一個元素加上一個或兩個指標。所有的字典操作和自由鏈表操作應具有O(1)的期望已耗用時間。該自由鏈表是雙鏈表嗎?或者,是不是單鏈表就足夠了?二、思考已知(1)所有未佔用的槽位鏈成一個自由鏈表(2)槽位即slot(3)Hash(x)返回x所屬於的slot一個slot儲存以下內容,佔用和未佔用時表示的含義不同struct node{int key;bool

HDU2888二維RMQ

 HDU2888二維RMQdp[row][col][i][j] 表示[row,row+2^i-1]x[col,col+2^j-1] 二維區間內的最小值這是RMQ-ST演算法的核心: 倍增思想== min( [row,row+ 2^(i-1)-1]x[col,col+2^j-1], [row+2^(i-1),row+2^i-1]x[col,col+2^j-1] )= min(dp[row][col][i-1][j], dp[row+(1<<(i-1))][col][i-1][j] )/

演算法導論-第11章-散列表

一、概念1.綜述散表表僅支援INSERT、SEARCH、DELETE操作。把關鍵字k映射到槽h(k)上的過程稱為散列。多個關鍵字映射到同一個數組下標位置稱為碰撞。好的散列函數應使每個關鍵字都等可能地散列到m個槽位中2.散表函數(1)若函數為h(k)=k,就是直接定址表(2)除法散列法:h(k) = k mod m(3)乘法散列法:h(k) = m * (k * A mod 1)

演算法導論-12-1-具有相同關鍵字元素的二叉尋找樹

題目:相同關鍵字的存在,給二叉尋找樹的實現帶來了一些問題。a)當用TREE-INSERT將n個具有相同關鍵字的資料項目插入到一棵初始為空白的二叉尋找樹中時,該演算法的漸近效能如何?我們可以對TREE-INSERT做一些改進,即在第5行的前面測試key[z] = key[x],在第11行的前面測試key[z] =

DLL的災難—DEBUG與RELEASE版本不能交叉調用

讓我們先看一段引文,再來進行心靈的探索:If you have an EXE and a DLL.When your exe APP was built Debug Mode, your Dll must be Debug mode. When your exe APP was built Release Mode, your Dll must be Release mode. If exe is Release Mode and Dll is Debug Mode, Error. If

演算法導論-12-2-基數樹

題目:給定兩個串a = a0a1……ap和b = b0b1……b1,其中每一個ai和每一個bj都屬於某個有序字元集,如果下面兩條規則之一成立,則說串a按字典序小於串b:1)存在一個整數j,0<=j<=min(p,q),使得ai=bi,i=0,1,……,j-1,且aj<bj;2)p<q,且ai=bi,對所有的i=0,1,……,p成立例如,如果a和b是位串,則根據規則1)(設j=3),有10100 < 10110;根據規則2),有10100 <

總結一下目標檢測與跟蹤

       今天開始更,也不知道有沒有人會看,學習要抱著一種師夷長技以自強的心態,本人不是崇洋媚外,只是目標cv這方面也確實國外比我們領先很多。呵呵,這個總結是我論文裡的,僅供大家學習哦。     

演算法導論 第6章 堆排序

一、概念1.定義(1)堆heap堆是一種數組對象The  (binary) heap  data structure is an array object that can be viewed as a nearly complete binary tree(2)最大堆max-heapfor every node  i  other than the root,A[PARENT( i)]  ≥ A[i](3)最小堆min-heapfor every node  i  other than

HDU-1043-八數位-代碼

解題分析過程見hdu1043八數位問題解題報告 //1043雙向搜尋-八數位#include <iostream>#include <string>#include <queue>using namespace std;char input[100];int state[10],s_num,e10[10],fac_n[10];char hash_T[400000],step[10000],hash_T2[400000];struct inf{ int

HDU3033分組背包之每組至少選一

分組背包之每組至少選一動規方程:for i:=1 to n do //迴圈組數for k:=1 to t do //迴圈每組內的物品for j:=v downto 0 do //迴圈體積f[i][v]=max{f[i-1][v],f[k-1][v-c[k]]+w[k]| #include <iostream>using namespace std;struct node{int price;int value;}t[11][105];int n,m,k;int f[11][10005

演算法導論 第7章 快速排序

一、概念快速排序是基於分治模式的,選擇一個數作為主元,經過一遍掃描,所有小於主元的數放在主元的左邊,大於主元的數放在主元的右邊,這樣就劃分成了兩組資料。然後對兩組數分別進行快排。快排的已耗用時間與劃分是否對稱有關,關鍵是如何選擇主元。最壞情況下,時間複雜度是O(n^2),最好情況下,時間是O(nlgn)二、程式#include <iostream>using namespace std;//輸出過程void Print(int *A, int len){for(int i = 0;

演算法導論 7-6 對區間的模糊排序

一、題目考慮這樣一種排序問題,即無法準確的知道等排序的各個數字到底是多大.對於其中的每個數字,我們只知道它落在實軸上的某個區間內.亦即,給定的 n 個形如[ai, bi ]的閉區間,其中ai,≤bi .演算法的目標是對這些區間進行模糊排序(fuzzy-sort),亦即,產生各區間的一個排序<i1, i2, i3, i4,…in >,使得存在一個 cj ∈[ai,

演算法導論8.3-4 O(n)時間內對[0..n^-1]之間的n個數排序

一、題目如何在O(n)時間內,對0到n^2-1之間的n個整數進行排序 二、思路把整數轉換為n進位再排序,每個數有兩位,每位的取值範圍是[0..n-1],再進行基數排序 三、代碼#include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A, int start, int end){int i;for(i = start;

總頁數: 61357 1 .... 18280 18281 18282 18283 18284 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.