數獨 缺失填補 9 9 (MATLAB)

2021-10-23 06:06:26 字數 4149 閱讀 1038

實現數獨:

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如何處理缺失資料填補 缺失值的處理

一 缺失值產生的原因 缺失值的產生的原因多種多樣,主要分為機械原因和人為原因。機械原因是由於機械原因導致的資料收集或儲存的失敗造成的資料缺失,比如資料儲存的失敗,儲存器損壞,機械故障導致某段時間資料未能收集 對於定時資料採集而言 人為原因是由於人的主觀失誤 歷史侷限或有意隱瞞造成的資料缺失,比如,在...