複雜度與熵 KC複雜度演算法實現

2021-08-20 15:42:27 字數 1956 閱讀 5428

作者zhonglihao

演算法名kc複雜度

分類複雜度與熵

複雜度近o(n3)

形式與資料結構

matlab**,普通搜尋匹配(c語言實現會較複雜)

特性跑起來很慢,但是還挺準

,對過零分布混亂與規整的訊號有較好的區分性

具體參考出處

《基於eeg的睡眠分期與睡眠評估方法研究》高群霞,碩士**

% parameter input

tar_data = 0; %自己輸入資料

data_len = length(tar_data);

% 對交流訊號進行粗粒化處理(二值化),直流訊號不適用

for i = 1:1:data_len

if(tar_data(i)>=0)

tar_data_coarse(i) = 1;

else

tar_data_coarse(i) = 0;

endend% 標記新的模式,記1

kc_mark = zeros(data_len,1);

% 第乙個元素直接記1

kc_mark(1) = 1;

% 總模式數量,初始化置1

kc_cn = 1;

% 已出現訊號的長度

s_len = 1;

% 未被記錄的資料段開始位置

q_start = 2;

% 未被記錄的資料段結束位置

q_end = 2;

for i = 2:1:data_len - 1

s_data = tar_data_coarse(1:s_len);% 獲取已記錄模式的資料

q_data = tar_data_coarse(q_start:i);% 獲取未記錄模式的資料

% 如果新資料長度比已經記錄的資料還長,則直接認定為新模式

if(length(q_data)>length(s_data))

kc_mark(i) = 1; % 標記新模式點

s_len = i; % 更新s末端位置

q_start = i + 1; % 更新q初始位置

kc_cn = kc_cn + 1; % 增加複雜度總量計數

continue;

end% 搜尋匹配

j_max = length(s_data) - length(q_data) + 1;

match_len = length(q_data); % 如果計數匹配為q_data長度則為已存在此模式

match_count = 0;

find_none_flag = 1; % 找不到q模式

for j = 1:1:j_max

s_data_match = s_data(j:j+match_len-1);

q_data_match = q_data;

match_count = 0;

for k = 1:1:match_len

if(s_data_match(k)==q_data_match(k))

match_count = match_count + 1;

endend

%finded

if(match_count == match_len)

find_none_flag = 0;

break;

endend

if(find_none_flag ==1)

kc_mark(i) = 1;

s_len = i;

q_start = i + 1;

kc_cn = kc_cn + 1;

continue;

endend% 複雜度為kc_cn / (data_len / log2(data_len))

% 一般取kc_cn觀察即可

演算法的複雜度 時間複雜度與空間複雜度

通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...

演算法複雜度 時間複雜度和空間複雜度

1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...

演算法複雜度 時間複雜度和空間複雜度

演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...