原创 算法導論之最大子數組問題

例如我們在求解下面的最大子數組時 13 -3 -25 20 -3 -16 -23 18 20 -7 12 -5 -22 15 -4 7     最簡單的做法就是暴力求解,但是時間複雜度爲O(n^2); 那麼有沒有更好的做法呢? 答案當然是

原创 算法導論之插入排序

比如我們對下面的進行排序,排序過程如下 5 2 4 6 1 3     2 5 4 6 1 3     2 4 5 6 1 3     --------------------------------------------每次進行比較2

原创 算法導論之歸併排序

歸併排序的思想就是分治法; 分治法:爲了解決一個給定的問題,算法一次或多次遞歸地調用其自身以解決緊密相關的若干子問題。 分治模式在每層遞歸時都有三個步驟: 一,分解原問題爲若干子問題。 二,解決這些子問題,遞歸求解各子問題。 三,合併這些

原创 算法導論之二分查找

二分查找的前提是要進行查找的序列必須是有序的,這裏我們以升序爲例。 1 2 3 4 5 6 7 8 9     start = 0, end = 8, mid = (0 + 8) / 2; 比如我們查找val = 2; 首先我們比較A[m

原创 P1553 數字反轉(升級版)

題目描述 給定一個數,請將該數各個位上數字反轉得到一個新數。 這次與NOIp2011普及組第一題不同的是:這個數可以是小數,分數,百分數,整數。整數反轉是將所有數位對調;小數反轉是把整數部分的數反轉,再將小數部分的數反轉,不交換整數部分與

原创 P1980 計數問題

題目描述 試計算在區間 11 到 nn的所有整數中,數字x(0≤x≤9)x(0≤x≤9)共出現了多少次?例如,在 11到1111中,即在 1,2,3,4,5,6,7,8,9,10,111,2,3,4,5,6,7,8,9,10,11 中,數

原创 大數加法

對於一些比long int還大的數,我們應該如何計算加法呢? 可以想到的是可以轉換爲字符串去計算。 思路: 1,逆序輸入 2,加法 1)主要就是考慮進位。 比如我們計算987654321 + 5678 對於高位不足的我們補0 最後結果在逆

原创 堆(Heap)的實現

什麼是堆? 優先隊列(Opriority Queue) 特殊的“隊列”,取出元素的順序是依照元素的優先權(關鍵字)大小,而不是元素進入隊列的先後順序。 堆有兩大特性: 1,結構性:是一顆完全二叉樹。 2, 有序性:每個葉子結點到根結點都

原创 快速排序

快速排序又冒泡排序改進而來,快速排序方法中的一次交換可以消除多個逆序。 (1)時間複雜度 例如 對下面的元素進行快速排序 0 1 2 3 4 5 6 7   49 38 65 97 76 13 27 low = 1, high = L.

原创 排序

#include <stdio.h> typedef int ElementType; int P; int N = 6; ElementType A[] = {34,8,64,51,32,21}; void Buddle_Sort

原创 02-線性結構2 一元多項式的乘法與加法運算

02-線性結構2 一元多項式的乘法與加法運算 (20 分) 設計函數分別求兩個一元多項式的乘積與和。 輸入格式: 輸入分2行,每行分別先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項係數和指數(絕對值均爲不超過1000的整數

原创 KMP算法,oj2087,Oulipo

對於一些簡單的查找我們可以用c庫函數strstr   #include <stdio.h> #include <string.h> typedef char* Position; #define NotFound NULL int

原创 C++頭文件algorithm的一些用法

轉載自https://blog.csdn.net/liuweiyuxiang/article/details/51865991 <algorithm>是c++特有的STL模板的算法頭文件 包含了一些特定的算法函數  包括sort(),st

原创 二分查找和排序

二分查找,主要是針對排序問題進行查找 我們先算出數組的長度 len = sizeof(a) / sizeof(a[0]) 我們先設置 int left = 0; int right = Len - 1; int mid = (left

原创 樹的一些基本用法

我們用先序創建樹,算出它的先序,中序和後序,然後計算他的結點和葉子結點 最後計算樹的深度。   目錄