Time of Update: 2018-12-04
用最小堆實現最小優先順序隊列://返回堆中關鍵字最小的元素HeapMinimum()//去掉並返回堆中關鍵字最小的元素HeapExtractMin()//將堆中元素x的關鍵字減小到k,k要小於x原來的關鍵字值HeapDecreaseKey()//將元素x插入到堆中MInHeapInsert()#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE
Time of Update: 2018-12-04
d叉堆在數組中如何表示:(1)若某個子節點索引為i,則它的父節點的索引為(i-2)/d+1,向下取整。(2)若某個父節點索引為i,則它的第j個子節點的索引為d*(i-1)+j+1。下面的程式是用插入法建立d叉最大堆,並顯示了一次去掉和返回堆頂元素後剩餘堆的情況。其中 “調整d叉堆”
Time of Update: 2018-12-04
這個電影我看了個開頭就忍不住要研究一下裡面提到的”Monty Hall problem“即三門問題。我在網上搜了一下,沒個說服力的解釋。我認為不管是否放棄第一次選擇,獲得汽車的機率是相同的。但是放棄第一次選擇而獲得汽車的機率不會比不放棄第一次選擇獲的汽車的機率低。所以,可以選擇放棄。我用程式類比了“放棄第一次選擇”和“不放棄第一次選擇”的實驗。實驗次數各自四十億次。一、”放棄第一次選擇“類比了二十回,每回進行一億次。獲得汽車的機率如下:放棄第一次選擇:30.856244%43.011920%22
Time of Update: 2018-12-04
MAX-HEAPIFY用於最大堆的堆調整,i的左右子堆已經滿足最大堆要求。數組的第0個位置未用,這樣計算左右子女的索引簡單點。遞迴的話對某些編譯器來說可能會很低效,所以改為迴圈迭代。void MaxHeapIfy(int *a,int i,int heapSize){int left=i;int right=i;int tmp;int largest=i;while(i<heapSize){left=i<<1;//左子索引
Time of Update: 2018-12-04
#include<cmath>#include<iostream>#include<fstream>#include<string>#include<sstream>using namespace std;class City{private:string filename;int dimension;string comment;void cityGenerate(char* s);public:City(char*
Time of Update: 2018-12-04
自下向上對每一個結點或者只對每個非葉結點使用“保持堆的性質”即“堆調整”MAX-HEAPIFY#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE 10void MaxHeapIfy(int *a,int i,int heapSize){int left=i<<1;int right=(i<<1)+1;int tmp;int
Time of Update: 2018-12-04
//TSP#include<math.h>#include<iostream>#include<ctime>#include <cstdlib>#include<vector>#include<fstream>#include<string>#include<sstream>#include<stdio.h>#include<stdlib.h>#include
Time of Update: 2018-12-04
自下向上對每一個結點或者只對每個非葉結點使用“保持堆的性質”即“堆調整”MAX-HEAPIFY#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE 10void MaxHeapIfy(int *a,int i,int heapSize){int left=i;int right=i;int tmp;int largest=i;while(i<=heapSize)
Time of Update: 2018-12-04
設計用時間複雜度為O(nlgn)的演算法對長度為n的數組中的逆序對計數。核心思想就是修改合并排序演算法,因為當合并時會比較兩個連續小數組中元素的大小。#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE 10void Merge(int *a,int p,int q,int r,int *cnt){int i=0;int j=0;int k=0;int n1=q-p+
Time of Update: 2018-12-04
轉自:http://blog.csdn.net/leojames007/article/details/6798123題目:輸入一個整形數組,數組裡有正數也有負數。數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。求所有子數組的和的最大值。要求時間複雜度為O(n)。 例如輸入的數組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組為3, 10, -4, 7, 2,因此輸出為該子數組的和18。
Time of Update: 2018-12-04
題目:請給出一個已耗用時間為O(nlgn)的演算法,使之能在給定一個由n個整數構成的集合S和另一個整數x時,判斷出S中是否存在有兩個其和等於x的元素。思路:輸入:數組a[1...n],待尋找整數v輸出:若存在,輸出在數組a中找到的第一對加和等於v的兩個元素索引及其值。首先採用合并排序演算法對數組進行從小到大排序(複雜度為O(nlgn))。從左→右掃描數組a(時間複雜度為O(n)),對每個a[i],在數組中用二分尋找演算法尋找v-a[i](時間複雜度為O(lgn)),則總時間複雜度為O(nlgn)
Time of Update: 2018-12-04
(1)先用BuildMaxHeap()建立最大堆(2)交換a[1]和a[heapSize],把最大的換到最後(3)堆大小heapSize減1(4)因為將最後一個元素換到堆頂可能會破壞堆的性質,所以調用MaxHeapIfy()將新的heapSize大小的堆調整最大堆(5)將(2)~(4)重複heapSize-1次,這裡的heapSize是最初的那個heapSize。因為一共有heapSize個元素,要換heapSize-1次,才能將大的都換到後面來,實現從小到
Time of Update: 2018-12-04
這個程式沒什麼可擴充性和使用價值,但是也算是個小小小小迷你的搜尋引擎,其中字典的產生過程也許大家願意參考一下,所以粘出來,裡面有很多垃圾的地方,歡迎吐槽!import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import
Time of Update: 2018-12-04
最近寫根據前序和中序構造二叉樹用到了這個函數,但是用這個函數不好,因為strchr返回的是某字元在字串中首次出現的位置,若有重複字元就白瞎了。所以前提是二叉樹中沒有重複出現的元素。 標頭檔:#include <cstring> (c++)或#include <string.h> (c)功能:尋找字串s中首次出現字元c的位置
Time of Update: 2018-12-04
用最大堆實現最大優先順序隊列://返回堆的最大值int HeapMaximum(int *a)//去掉並返回堆中具有最大關鍵字的元素int HeapExtractMax(int *a,int *heapSize)//將元素x的關鍵字值增加到k,這裡k不能小於x的原關鍵字值void HeapIncreaseKey(int *a,int i,int k)//將元素x插入到堆中void MaxHeapInsert(int *a,int *heapSize,int key)#include
Time of Update: 2018-12-04
建堆既可以用堆調整方法將原數組調整為一個堆,也可以藉助往堆中插入元素的方法從無到有的建立一個堆。兩種方法比較:(1)藉助堆調整建堆的時間複雜度為O(n)。藉助插入法建堆的時間複雜度為O(nlgn)
Time of Update: 2018-12-04
我是個Qt新手,一直對Qt事件處理的流程不是太清楚,看了這篇文章(見http://devbean.blog.51cto.com/448512/231861),然後經過自己的思考,把Qt事件處理的五個層次、同時也是Qt時間處理的流程畫了出來。若有不對請批評指正,不勝感激!層次圖(即事件處理流程圖)及其說明如下:說明如下:sendEvent()會把event直接發送給QCoreApplication的notify(),postEvent()把event追加到事件隊列中最終也要調用notify(),n
Time of Update: 2018-12-04
這個不寫代碼了。思路如下:首先要先明確優先順序是誰?優先順序隊列嘛,當然最重要的是要Crowdsourced Security
Time of Update: 2018-12-04
這個程式是利用Young氏矩陣為n*n的數組排序。其中涉及到:插入法建立Young氏矩陣,然後再調用”去掉返回堆頂元素”的函數得到從小到大的排列。總的時間複雜度為O(n^3)。其中向Young氏矩陣“插入一個元素”的時間複雜度為O(m+n),m為Young氏矩陣的行數,n為Young氏矩陣的列數,建立Young氏矩陣要插入n*n個元素則為O((n^2)*2n)=O(n^3)。“去掉返回堆頂元素”因為要藉助“堆調整”函數保持Young氏矩陣的性質,所以時間複雜度為O(m+n)。在排序函數Young
Time of Update: 2018-12-04
重複的交換相鄰的兩個反序元素。#include <stdio.h>#include <string.h>#include <time.h>#define BUFFER_SIZE 10void BubbleSort(int *a,int len){int i=0;int j=0;int temp=0;for(i=1;i<len;i++){for(j=0;j<len-i;j++){if(a[j]>a[j+1]){temp=a[j];a[j]=a[