public?static?void?Regular()?throws?Exception?{
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到獻(xiàn)縣網(wǎng)站設(shè)計(jì)與獻(xiàn)縣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋獻(xiàn)縣地區(qū)。
File?inputfile?=?new?File("F:\\weka\\eucalyptus_Train.arff");
ArffLoader?loader?=?new?ArffLoader();
loader.setFile(inputfile);
Instances?insTrain?=?loader.getDataSet();
insTrain.setClassIndex(insTrain.numAttributes()-1);
inputfile?=?new?File("F:\\weka\\eucalyptus_Test.arff");
loader.setFile(inputfile);
Instances?insTest?=?loader.getDataSet();
insTest.setClassIndex(insTest.numAttributes()-1);
double?sum?=?insTest.numInstances();
int?right?=?0;
Classifier?clas?=?new?J48();
//Classifier?clas?=?new?weka.classifiers.bayes.BayesNet();
clas.buildClassifier(insTrain);
for(int?i?=?0;?i??sum;?i++)?{
if(clas.classifyInstance(insTest.instance(i))?==?insTest.instance(i).classValue())?{
right++;
}
System.out.println(clas.classifyInstance(insTest.instance(i))+"?: "+insTest.instance(i).classValue());
}
System.out.println("分類準(zhǔn)確率:"+right/sum);
}
svm的話,要用一個(gè)wlsvm的包。 代碼是一樣的,就是Classifier class= new J48()這里要用svm的實(shí)例
算法思想:
將數(shù)列按有序化(遞增或遞減)排列,查找過(guò)程中采用跳躍式方式查找,即先以有序數(shù)列的中點(diǎn)位置為比較對(duì)象,如果要找的元素值小于該中點(diǎn)元素,則將待查序列縮小為左半部分,否則為右半部分。通過(guò)一次比較,將查找區(qū)間縮小一半。
折半查找是一種高效的查找方法。它可以明顯減少比較次數(shù),提高查找效率。但是,折半查找的先決條件是查找表中的數(shù)據(jù)元素必須有序。
算法步驟描述:
step1 首先確定整個(gè)查找區(qū)間的中間位置
mid = ( left + right )/ 2
step2 用待查關(guān)鍵字值與中間位置的關(guān)鍵字值進(jìn)行比較;
若相等,則查找成功
若大于,則在后(右)半個(gè)區(qū)域繼續(xù)進(jìn)行折半查找
若小于,則在前(左)半個(gè)區(qū)域繼續(xù)進(jìn)行折半查找
Step3 對(duì)確定的縮小區(qū)域再按折半公式,重復(fù)上述步驟。最后,得到結(jié)果:要么查找成功, 要么查找失敗。
折半查找的存儲(chǔ)結(jié)構(gòu)采用一維數(shù)組存放。
折半查找算法舉例
對(duì)給定數(shù)列(有序),按折半查找算法,查找關(guān)鍵字值為30的數(shù)據(jù)元素。
折半查找的算法討論:
優(yōu)點(diǎn): ASL≤log2n,即每經(jīng)過(guò)一次比較,查找范圍就縮小一半。經(jīng)log2n 次計(jì)較就可以完成查找過(guò)程。
缺點(diǎn):因要求有序,所以要求查找數(shù)列必須有序,而對(duì)所有數(shù)據(jù)元素按大小排序是非常費(fèi)時(shí)的操作。另外,順序存儲(chǔ)結(jié)構(gòu)的插入、刪除操作不便利。
考慮:能否通過(guò)一次比較拋棄更多的部分(即經(jīng)過(guò)一次比較,使查找范圍縮得更?。?,以達(dá)到提高效率的目的?!??
可以考慮把兩種方法(順序查找和折半查找)結(jié)合起來(lái),即取順序查找簡(jiǎn)單和折半查找高效之所長(zhǎng),來(lái)達(dá)到提高效率的目的?實(shí)際上這就是分塊查找的算法思想。
例如:[問(wèn)題分析] 由于數(shù)據(jù)按升序排列,故用折半查找最快捷.
program binsearch;
const max=10;
var num:array[1..max] of integer;
i,n:integer;
procedure search(x,a,b:integer);
var mid:integer;
begin
if a=b then
if x=num[a] then writeln('Found:',a) else writeln('Number not found')
else begin
mid:=(a+b) div 2;
if xnum[mid] then search(x,mid,b);
if xnum[mid] then search(x,a,mid);
if x=num[mid] then writeln('Found:',mid);
end;
end;
begin
write('Please input 10 numbers in order:');
for i:=1 to max do read(num);
write('Please input the number to search:');
readln(n);
search(n,1,max);
end.
Java風(fēng)格的代碼舉例:
//使用折半法進(jìn)行查找
int getIndex(int[] nList, int nCount, int nCode) {
int nIndex = -1;
int jMin = 0;
int jMax = nCount - 1;
int jCur = (jMin+jMax)/2;
do
{
if(nList[jCur] nCode) {
jMax--;
} else if(nList[jCur] nCode) {
jMin++;
} else if(nList[jCur] == nCode) {
nIndex = jCur;
break;
}
jCur = (jMin + jMax)/2;
} while(jMin jMax);
return nIndex;
}
二分查找的性能說(shuō)明
雖然二分查找的效率高,但是要將表按關(guān)鍵字排序。而排序本身是一種很費(fèi)時(shí)的運(yùn)算。既使采用高效率的排序方法也要花費(fèi) O(n lg n) 的時(shí)間。
二分查找只適用順序存儲(chǔ)結(jié)構(gòu)。為保持表的有序性,在順序結(jié)構(gòu)里插入和刪除都必須移動(dòng)大量的結(jié)點(diǎn)。因此,二分查找特別適用于那種一經(jīng)建立就很少改動(dòng)、而又經(jīng)常需要查找的線性表。
對(duì)那些查找少而又經(jīng)常需要改動(dòng)的線性表,可采用鏈表作存儲(chǔ)結(jié)構(gòu),進(jìn)行順序查找。鏈表上無(wú)法實(shí)現(xiàn)二分查找
二分查找的C#實(shí)現(xiàn)代碼:
using System;
using System.Collections.Generic;
using System.Text;
namespace BinschDemo
{
public class BinschDemo
{
public static int Binsch(int[] a, int key)
{
int low = 1;
int high = a.Length;
while (low = high)
{
int mid = (low + high) / 2;
if (key == a[mid])
{
return mid; //返回找到的索引值
}
else
{
if (key a[mid])
high = mid - 1;
else
low = mid + 1;
}
}
return -1; //查找失敗
}
static void Main(string[] args)
{
Console.WriteLine("請(qǐng)輸入10個(gè)遞增數(shù)字: ");
int[] list = new int[10];
for (int i = 0; i 10; i++)
{
Console.Write("數(shù)字 : ", i);
list = Convert.ToInt32(Console.ReadLine());
}
Console.Write("請(qǐng)輸入一個(gè)你要查找的數(shù)字:");
int find = Convert.ToInt32(Console.ReadLine());
int result = Binsch(list, find);
Console.WriteLine(result);
}
}
}
分塊查找又索引查找,它主要用于“分塊有序”表的查找。所謂“分塊有序”是指將線性表L(一維數(shù)組)分成m個(gè)子表(要求每個(gè)子表的長(zhǎng)度相等),且第i+1個(gè)子表中的每一個(gè)項(xiàng)目均大于第i個(gè)子表中的所有項(xiàng)目?!胺謮K有序”表應(yīng)該包括線性表L本身和分塊的索引表A。因此,分塊查找的關(guān)鍵在于建立索引表A。
(1)建立索引表A(二維數(shù)組)
索引表包括兩部分:關(guān)鍵字項(xiàng)(子表中的最大值)和指針項(xiàng)(子表的第一項(xiàng)在線性表L中位置)
索引表按關(guān)鍵字有序的。
例如:線性表L(有序)為:1 2 3 4 5 6 7 8 9 10 11 12
分成m=3個(gè)子表:
索引表A:二維數(shù)組:第一列為每個(gè)子表的最大值 ,第二列為每個(gè)子表的起始地址
即: 4 0
8 4
12 8
(2)利用索引表A,確定待查項(xiàng)X所在的子表(塊)。
(3)在所確定的子表中可以用“折半查找”法搜索待查項(xiàng)X;若找到則輸出X;否則輸出未找到信息。
n1和n2本身就指向兩個(gè)完全不同的對(duì)象,因此其成員對(duì)象的地址不同也是很自然的
java轉(zhuǎn)大數(shù)據(jù)是非常有優(yōu)勢(shì)的,如果想轉(zhuǎn)入大數(shù)據(jù)開(kāi)發(fā)領(lǐng)域,選擇數(shù)倉(cāng)開(kāi)發(fā)是個(gè)捷徑。千鋒教育擁有線上免費(fèi)Java線上公開(kāi)課。如果特別想做更底層的開(kāi)發(fā),也可以選擇從數(shù)倉(cāng)開(kāi)發(fā)切入,先接觸,再曲線救國(guó)。那么數(shù)倉(cāng)開(kāi)發(fā)需要學(xué)啥? 1、會(huì)一門(mén)基礎(chǔ)語(yǔ)言:java/python/scala:如果是java相關(guān)開(kāi)發(fā)轉(zhuǎn)大數(shù)據(jù),那實(shí)在是太容易了,這一項(xiàng)就可以略過(guò)了。2、分布式存儲(chǔ)及調(diào)度理論:hdfs、yarn的理論要理解且熟記,這些對(duì)于學(xué)習(xí)spark 或者h(yuǎn)ive 以及sql的優(yōu)化是最最基礎(chǔ)的知識(shí)。
3、sql 框架要會(huì)一個(gè):spark sql/hive sql :如果對(duì)hive和spark都不懂的話,那就選擇學(xué)spark,現(xiàn)在離線數(shù)倉(cāng)越來(lái)越多的公司切spark了。Spark 相關(guān)主要學(xué)習(xí)spark core 和spark sql;要求sql要寫(xiě)的熟練,調(diào)優(yōu)參數(shù)及原理,能懂一些源碼就更好了。4、數(shù)倉(cāng)建模、分層理論:這個(gè)是數(shù)倉(cāng)的方法論,是一定要掌握的,理論都在《維度建模權(quán)威指南-kimball》這本書(shū)里,好書(shū)是好書(shū),看起來(lái)比較枯燥,在看的時(shí)候多思考,結(jié)合自己正在做的業(yè)務(wù),想象一下如果要為現(xiàn)在的業(yè)務(wù)劃分主題該怎么劃、業(yè)務(wù)矩陣該怎么設(shè)計(jì)等等,大膽想象就ok。5、其它需要了解:大數(shù)據(jù)相關(guān)的架構(gòu)理論、olap、數(shù)據(jù)湖等等,知道越多越好,不需要太深入,主要作用是幫助理解大數(shù)據(jù)的那一套東西;網(wǎng)上的其它公司數(shù)倉(cāng)的架構(gòu)是啥樣子,要知道架構(gòu)里每個(gè)組件的作用是啥。還有一些其它的框架組件:kafka、presto、druid、flink 等了解,寫(xiě)個(gè)demo跑跑,知道流程就可。如果想了解更多相關(guān)知識(shí),建議到千鋒教育了解一下。千鋒教育目前在18個(gè)城市擁有22個(gè)校區(qū),年培養(yǎng)優(yōu)質(zhì)人才20000余人,與國(guó)內(nèi)20000余家企業(yè)建立人才輸送合作關(guān)系,院校合作超600所。