Time of Update: 2018-12-05
當我們需要對鏈表進行排序時,由於不能對它的元素進行隨機訪問,所以更適合使用歸併排序,大名鼎鼎的快速排序用到鏈表上,效率也很低,原因還是在於不能對鏈表中的元素進行隨機訪問,同理,採用堆排序更是不可能的事情。 演算法具體實現時需要一個指向前端節點(鏈表的第一個節點,鏈表中不包含額外的一個節點來作前端節點)的指標,這是因為在演算法實現的時候,不大可能第一個節點正好就是所有元素中最小的一個,則鏈表的前端節點會改變,因此我們需要一個指向前端節點的指標來儲存不斷變化的前端節點。
Time of Update: 2018-12-05
package com.czp;import java.io.File;import java.util.Properties;public class UnRarFile {public static void main(String[] args) {UnRarFile unrar = new UnRarFile();unrar.unRarFileCurDir(new File("d:/ftpd/pm/test/*.bz2"));}/** * 解壓檔案 * * @param target
Time of Update: 2018-12-05
問題定義: 寫一個函數SortedMerge函數,該函數有兩個參數,都是遞增的鏈表,函數的功能就是合并這兩個遞增的鏈表為一個遞增的鏈表,SortedMerge的傳回值是新的鏈表。新鏈表由前兩個鏈表按元素遞增順序合并而成,也就是說它不會建立新的元素。比如:這裡有兩個鏈表,分別是list1: 5->10->15list2:
Time of Update: 2018-12-05
這麼簡單的插入排序,都可以最佳化,還有什麼是不可以最佳化的。最讓我驚訝的是,當多次調用一個函數的時候,函數的調用開銷是不可忽略的。正如測試結果所示:#include<stdio.h>#define MAX 1000000void swap( int *data, int i, int j){int temp = data[i]; data[i] = data[j];data[j] = temp;}//未經過最佳化的插入排序,簡單直觀void InsertSort1( int
Time of Update: 2018-12-05
給定2個鏈表,求這2個鏈表的並集(鏈表)和交集(鏈表)。不要求並集(鏈表)和交集(鏈表)中的元素有序。如,輸入:List1: 10->15->4->20List2: 8->4->2->10輸出:交集(鏈表):4->10並集(鏈表):2->8->20->4->15->10方法一(簡單、直觀的方法): 下面是得到2個鏈表的並集和交集的簡單演算法。 InterSection(list1,
Time of Update: 2018-12-05
#include <signal.h>#include <unistd.h>#include <limits.h>#include <stdio.h>#include <stdlib.h>int count;void alrm_action(int);int main(){int p[2];int pipe_size = 0;char c = 'x';static struct sigaction act;/*set up the
Time of Update: 2018-12-05
如題。設計一個高效的資料結構,包含MaxElement操作,快速的返回隊列中最大的元素。編程之美關於這題的解析實在是太漂亮了,因為直接求解沒有什麼好的解法,但是我們可以便於使用兩個棧來實現一個隊列,這樣就把問題轉換為如果方便的從棧中返回最大值問題。 思路如下: 在棧中維護一個最大值序列,保證MaxElement操作的時間複雜度為O(1)。虛擬碼如下:class stack {public:stack (){stackTop =
Time of Update: 2018-12-05
對於趕時間的朋友,只看第一段就好了。 首先,我非常肯定以及確定的告訴你ssize_t是有符號整型,在32位機器上等同與int,在64位機器上等同與long int,有沒有注意到,它和long資料類型有啥區別?其實就是一樣的。size_t 就是無符號型的ssize_t,也就是unsigned long/ unsigned int (在32位下),不同的編譯器或系統可能會有區別,主要是因為在32位機器上int和long是一樣的。在64位沒有測試,但是參見百度百科,size_t
Time of Update: 2018-12-05
在應用中,我們通常不可避免地要對容器中的某些特定元素進行刪除操作。這看起來並不是什麼困難的問題。我們先寫一個迴圈來迭代容器中的元素,如果迭代元素是要刪除的元素,則刪除之。代碼如下所示: vector<int> intContainer;for(vector<int>::iterator is = intContainer.begin(); it != intContainer.end(); ++it){if ( *it == 25)
Time of Update: 2018-12-05
寫出如下程式運行結果:#include<stdio.h>#include<string.h>int main(){int a[2000];char *p = (char*)a;for( int i = 0; i < 2000; i++)a[i] = -1 - i;printf( "%d\n", strlen(p));return 0;}請不要運行,先用草稿紙算算,能算出來不?
Time of Update: 2018-12-05
以下是man memcpy的結果: #include <string.h> void *memcpy(void *dest, const void *src, size_t n);DESCRIPTION The memcpy() function copies n bytes from memory area src to memory area dest. The memory areas must not overlap. Use
Time of Update: 2018-12-05
實現功能:1、在對話方塊上的一塊地區繪製彩色線條。2、視窗被覆蓋後恢複時,映像自動重繪。3、改變按鈕顏色。操作:根據嚮導建立一個對話方塊程式。在資源中添加一個靜態文字框,其ID為IDC_STATIC。在DialogXXXDlg.h 中加入如下內容 CBrush m_brush;//用於自訂色彩 CDC m_memDC;//螢幕DC相容的記憶體DC CBitmap m_Bmp;//位元影像 CWnd* m_pDrawWnd;//用於儲存靜態文字框的對象指標 //
Time of Update: 2018-12-05
演算法思想:Dijkstra(迪傑斯特拉)演算法是典型的最短路徑路由演算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充,直到擴充到終點為止。Dijkstra演算法能得出最短路徑的最優解,但由於它遍曆計算的節點很多,所以效率低。Dijkstra演算法是很有代表性的最短路演算法,在很多專業課程中都作為基本內容有詳細的介紹,如資料結構,圖論,運籌學等等。其基本思想是,設定頂點集合S並不斷地作貪心選擇來擴充這個集合。一個頂點屬於集合S若且唯若從源到該頂點的最短路徑長度
Time of Update: 2018-12-05
深度優先遍曆演算法的非遞迴實現需要瞭解深度優先遍曆的執行過程,設計一個棧來類比遞迴實現中系統設定的工作棧,演算法的虛擬碼描述為: 假設圖採用鄰接矩陣作為儲存結構,具體演算法如下: 深度優先遍曆演算法的非遞迴實現需要瞭解深度優先遍曆的執行過程,設計一個棧來類比遞迴實現中系統設定的工作棧,演算法的虛擬碼描述為: 假設圖採用鄰接矩陣作為儲存結構,具體演算法如下:#include<iostream>#include <queue>using namespace
Time of Update: 2018-12-05
一步一步最佳化的快速排序,速度比插入排序快很多,而且可以很方便的引入隨機演算法來避免最差情況。#include<iostream>#include<string.h>#include<stdio.h>#include<algorithm>#include <sys/times.h>//#include <time.h>using namespace std;#define DEBUGconst int MAX = 10000
Time of Update: 2018-12-05
問題定義: Write a program to swap odd and even bits in an integer with as few instructions as possible(e.g, bit 0 and bit 1 are swapped, bit 2 and bit 3 are swapped, etc)代碼如下,自己想了一個晚上,居然沒想出來,太失敗了。#include <stdio.h>int SwapOddEvenBit(int
Time of Update: 2018-12-05
描述:template <class InputIterator, class Function> Function for_each (InputIterator first, InputIterator last, Function f);Apply function to rangeApplies function f to each of the elements in the range [first,last).The behavior of this
Time of Update: 2018-12-05
本著樂於分享、助人為樂、快樂自己、協助他人、全新全意為人民服務的精神寫下這篇文章。讀完這篇文章你能學到如何在linux下將本地代碼備份到github以及如何將github上感興趣的代碼clone到本地。其實關於git的入門教程網上一堆一堆的,但是都太散亂,而且大都是給有經驗的程式員看的,對於我們這種從來沒用過其他版本控制工具的學生而言,講得不夠仔細。
Time of Update: 2018-12-05
給定n個任務J1, J2,……, Jn和M台機器M1, M2……,Mm。對於每個任務Ji,其處理時間為ti > 0,而且必須由一台不間斷底處理,每台機器在一個時間段裡最多處理一個任務。並行機器調度問題就是如何將任務分配給機器,使得處理完成任務的完成時間(makespan)最短。 對於這個NP問題,沒有多項式時間的精確演算法,用近似演算法,效果好,速度快,真是難以置信啊,我剛5小時前還覺得JB近似演算法有什麼好研究的。ListScheduling(I)while
Time of Update: 2018-12-05
問題定義: 給定一個數組data[]和一個數M,向右旋轉M位,要求時間複雜度為O(n),空間複雜度為O(1),如,char data[]="abcde", M = 2,旋轉以後data 應該為cdeab,如何高效的實現該功能?這是一個非常經典的題目,第一次自己看到可能根本想不出來,也是09年電腦研究生入學考試的演算法題,該題在《編程珠璣》和《編程之美》裡都有討論,寫這篇文章的原因是今天發現了STL對該問題的一個高效演算法。1.