實現數獨:
2 程式設計思想:
9宮格中每個值可以取值的範圍在(1~9)中,從data矩陣的data[1,1]座標開始,按列進行迭代,直到data[9,9]格點結束。
3 演算法步驟:
step1:首先將格點調入到:模組判斷
一、模組判斷
二、模組判斷三中進行判斷;當格點的值在模組中時,返回0;否則返回1。
step2:將各返回值相乘,如果乘積value=1,進行下一步,否則返回step1。
step3:當遍歷到最後格點data[9,9]時,演算法結束。
(一)模組判斷一:每行
傳入引數:矩陣data、格點座標、待填補的格點值。
判斷過程:傳入的值a會與整行中所有元素判斷,若該填補的元素a本身存在於本行中,則返回0,否則返回1。
進行判斷程式為:
function out_put=
rowtest
(data,x,y,a)
iffind
(data
(x,:
)==a)
% 行索引判斷
out_put=0;
else
out_put=1;
endend
(二)模組判斷二:每列
傳入引數:矩陣data、格點座標、待填補的格點值。
判斷過程:傳入的值a會與整列中所有元素判斷,若該填補的元素a本身存在於此列中,則返回0,否則返回1。
進行判斷程式為:
function out_put =
linetest
(data,x,y,a)
iffind
(data(:
,y)==a)
% 列索引判斷
out_put=0;
else
out_put=1;
endend
(三)模組判斷三:每個【3*3】宮
傳入引數:矩陣data、格點座標、待填補的格點值。
判斷過程:傳入的值a會與宮[3*3]中所有元素判斷,若該填補的元素a本身存在於宮中,則返回0,否則返回1。
進行判斷程式為:
function out_put=
housetest
(data,x,y,a)
x_start =
floor
((x-1)
/3)*
3+1;
% 行開始
x_end =
ceil
(x/3)*
3;% 行結束
y_start =
floor
((y-1)
/3)*
3+1;
% 列開始
y_end =
ceil
(y/3)*
3;% 列結束
iffind
(data
(x_start:x_end,y_start:y_end)
==a)
out_put=0;
else
out_put=1;
endend
(四)數獨用例測試
完整程式:
% 主程式 main_test.m
clc,clear
% 資料在此輸入
% data就是要求的數獨矩陣,未知數用0表示
data =[0
0300
0100
1004
0000
0000
2000
0000
0000
0500
0703
6000
0000
0004
2200
0000
0000
0070
9005
8001
0000
];test
(data,1)
;% 指令碼 test.m
function
test
(data,i)
[row,line]
=size
(data)
;%鎖定a矩陣的座標(x,y);
y=ceil
(i/row)
;x=i-
(y-1
)*row;
if i>row*line
data % 輸出數獨
else
ifdata
(i)~=0
test
(data,i+1)
;else
for a=
1:row
%判斷是否每行,每列是否相同的。
judge=
rowtest
(data,x,y,a)
*linetest
(data,x,y,a)
*housetest
(data,x,y,a)
;if judge==
1data
(i)=a;
test
(data,i+1)
;else
endend
endend
% 指令碼 rowtest.m
function out_put=
rowtest
(data,x,y,a)
iffind
(data
(x,:
)==a)
% 行索引判斷
out_put=0;
else
out_put=1;
endend
% 指令碼 linetest.m
function out_put =
linetest
(data,x,y,a)
iffind
(data(:
,y)==a)
% 列索引判斷
out_put=0;
else
out_put=1;
endend
% 指令碼 housetest.m
function out_put=
housetest(a
,x,y,a)
x_start =
floor
((x-1)
/3)*
3+1;
% 行開始
x_end =
ceil
(x/3)*
3;% 行結束
y_start =
floor
((y-1)
/3)*
3+1;
% 列開始
y_end =
ceil
(y/3)*
3;% 列結束
iffind(a
(x_start:x_end,y_start:y_end)
==a)
out_put=0;
else
out_put=1;
endend
驗證結果:
data =64
3758
1291
9246
3587
7582
9143
6861
9247
5342
7536
8919
3518
7642
2796
4531
8314
8729
6558
6319274
是不是很酷炫。 資料缺失值填補
缺失值填充方法包括簡單填充 屬性填充和例項填充三種型別,本文主要研究屬性填充方式。填充依賴原始資料的單一或少量屬性維度,利用屬性間的關係或屬性潛在的規則對缺失值進行填充。常用的屬性填充方法有 基於回歸分析 資訊增益 灰色 的方法和em 演算法等。基於回歸分析的填充方法通過擬合回歸數學模型計算缺失值,...
sklearn 資料填補缺失值
機器學習和資料探勘中所使用的資料,永遠不可能是完美的。很多特徵,對於分析和建模來說意義非凡,但對於實 際收集資料的人卻不是如此,因此資料探勘之中,常常會有重要的字段缺失值很多,但又不能捨棄欄位的情況。因 此,資料預處理中非常重要的一項就是處理缺失值。從kaggle中簡單的獲取的鐵達尼號的遇難者生存資...
eviews如何處理缺失資料填補 缺失值的處理
一 缺失值產生的原因 缺失值的產生的原因多種多樣,主要分為機械原因和人為原因。機械原因是由於機械原因導致的資料收集或儲存的失敗造成的資料缺失,比如資料儲存的失敗,儲存器損壞,機械故障導致某段時間資料未能收集 對於定時資料採集而言 人為原因是由於人的主觀失誤 歷史侷限或有意隱瞞造成的資料缺失,比如,在...