原创 二分法以及牛頓法開根號

二分法比較簡單 #include<cstdio> #include<iostream> using namespace std; float sqrt(float n) { float max,min,mid; m

原创 KMP算法(未優化版本,算法導論原版)

kmp是經典的單模式串字符串匹配算法,對於一個字符串在長文本中的匹配很有效。 kmp算法包括兩部分,對模式串的預處理和模式串匹配** 1、模式串預處理 這一部分關鍵在於next數組的構造,相當於對模式串進行kmp匹配。注意,字

原创 全排列的遞歸實現以及利用STL實現全排列

遞歸實現全排列 讓第一個元素和每一個元素交換(包括他本身),對後面的元素全排列,然後再還回來方便和下一個交換,當全排列只有一個元素時,輸出整個序列。 #include <iostream> #include <algorithm>

原创 二叉樹生成與遞歸遍歷

前序遞歸生成,前中後序遍歷 #include<cstdio> #include<cstdlib> #include<string> #include<iostream> #include<cstdio> using namesp

原创 如何給數字文件蓋上時間戳——How to Time-Stamp a Digital Document

傳統TSS時間戳實現以及分佈式時間戳的實現。 思考:這兩種時間戳不可僞造嗎? 更改時間戳字符串不可以嗎? 先例舉一種比較幼稚的方法:數字保險箱 每當客戶機有一個要加蓋時間戳的文件時,就將文檔發送到時間戳服務器(TSS)。

原创 克魯斯卡爾算法實現圖的最小生成樹(紫書)

過程如下: 對邊集排序,選取最小的邊 選取次小的邊,判斷是否形成環路,形成則捨去,不形成則選取, 重複以上步驟 (用並查集對節點集合快速合併,話說並查集真的是簡單,暴力又優美啊//嘻嘻) #include<cstdio>

原创 大數乘法(完全模擬手工乘法,弱爆了)

這是數據結構與算法的作業,要求實現一個能做任意的大數乘法的程序 當時完全不懂分治法和FFT,後來還是聽一個學長說,可以快速大數乘法(汗) 一併寫到筆記裏吧 #include<stdio.h> #include<stdlib.h

原创 順序表實現一顆avl樹

課本上講的是用指針建立avl樹,但是這種方法速度慢而且指針容易出現各種錯誤,實在是不是競賽中的上上選。 現在po上順序表建立avl樹的代碼。 #include<iostream> #include<cstdio> using names

原创 香農編碼

信息論與編碼作業,要求用C語言對文本實現香農編碼,要放寒假了,一併寫到筆記裏吧(新版編輯器居然不能對文章創建新分類了。。。。。。) 細節見註釋 //我記得這段代碼的註釋寫成於和初戀分手第二天 #include<cstdio> #incl

原创 克魯斯卡爾算法(Kruskal)圖的最小生成樹

算法競賽中常用的算法,求圖的最小生成樹 過程: 對邊集排序, 選取最小邊,將連接的節點放到一個集合中 選取次小的邊,當邊連接的定點不在同一個集合中時,合併集合。 #include<cstdio> #include<iostream

原创 競賽中使用的數據結構——二叉樹

看了劉汝佳編寫的《算法競賽入門經典》中的一節(p148),用數組表示一顆二叉樹,第一次見到這樣的數據結構 #include<cstdio> #include<string> #include<iostream> using namespa

原创 樹轉二叉樹

input.txt中用括號表示法輸入樹,輸出生成的二叉樹的每個節點的子節點地址。 測試文件:a(b(d)g(e(h)f)c) 算法複雜度分析: 最壞情況下:每次遍歷都要遍歷該節點後的所有節點, n-1+n-2+n-3……+0,即(