import java.util.Random;

網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)公司專注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開發(fā).小程序定制開發(fā),H5頁面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為宴會(huì)酒店設(shè)計(jì)等企業(yè)提供專業(yè)服務(wù)。
public class BpDeep{
public double[][] layer;//神經(jīng)網(wǎng)絡(luò)各層節(jié)點(diǎn)
public double[][] layerErr;//神經(jīng)網(wǎng)絡(luò)各節(jié)點(diǎn)誤差
public double[][][] layer_weight;//各層節(jié)點(diǎn)權(quán)重
public double[][][] layer_weight_delta;//各層節(jié)點(diǎn)權(quán)重動(dòng)量
public double mobp;//動(dòng)量系數(shù)
public double rate;//學(xué)習(xí)系數(shù)
public BpDeep(int[] layernum, double rate, double mobp){
this.mobp = mobp;
this.rate = rate;
layer = new double[layernum.length][];
layerErr = new double[layernum.length][];
layer_weight = new double[layernum.length][][];
layer_weight_delta = new double[layernum.length][][];
Random random = new Random();
for(int l=0;llayernum.length;l++){
layer[l]=new double[layernum[l]];
layerErr[l]=new double[layernum[l]];
if(l+1layernum.length){
layer_weight[l]=new double[layernum[l]+1][layernum[l+1]];
layer_weight_delta[l]=new double[layernum[l]+1][layernum[l+1]];
for(int j=0;jlayernum[l]+1;j++)
for(int i=0;ilayernum[l+1];i++)
layer_weight[l][j][i]=random.nextDouble();//隨機(jī)初始化權(quán)重
}
}
}
//逐層向前計(jì)算輸出
public double[] computeOut(double[] in){
for(int l=1;llayer.length;l++){
for(int j=0;jlayer[l].length;j++){
double z=layer_weight[l-1][layer[l-1].length][j];
for(int i=0;ilayer[l-1].length;i++){
layer[l-1][i]=l==1?in[i]:layer[l-1][i];
z+=layer_weight[l-1][i][j]*layer[l-1][i];
}
layer[l][j]=1/(1+Math.exp(-z));
}
}
return layer[layer.length-1];
}
//逐層反向計(jì)算誤差并修改權(quán)重
public void updateWeight(double[] tar){
int l=layer.length-1;
for(int j=0;jlayerErr[l].length;j++)
layerErr[l][j]=layer[l][j]*(1-layer[l][j])*(tar[j]-layer[l][j]);
while(l--0){
for(int j=0;jlayerErr[l].length;j++){
double z = 0.0;
for(int i=0;ilayerErr[l+1].length;i++){
z=z+l0?layerErr[l+1][i]*layer_weight[l][j][i]:0;
layer_weight_delta[l][j][i]= mobp*layer_weight_delta[l][j][i]+rate*layerErr[l+1][i]*layer[l][j];//隱含層動(dòng)量調(diào)整
layer_weight[l][j][i]+=layer_weight_delta[l][j][i];//隱含層權(quán)重調(diào)整
if(j==layerErr[l].length-1){
layer_weight_delta[l][j+1][i]= mobp*layer_weight_delta[l][j+1][i]+rate*layerErr[l+1][i];//截距動(dòng)量調(diào)整
layer_weight[l][j+1][i]+=layer_weight_delta[l][j+1][i];//截距權(quán)重調(diào)整
}
}
layerErr[l][j]=z*layer[l][j]*(1-layer[l][j]);//記錄誤差
}
}
}
public void train(double[] in, double[] tar){
double[] out = computeOut(in);
updateWeight(tar);
}
}
參考資料
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
//用來保存java文件的名字的list
ListString javaFilelist = new ArrayListString();
String filePath = "C://111"; //要測(cè)試的文件,如果是分區(qū),必須是C://這樣子的
getAllFiles(new File(filePath), javaFilelist);
if(javaFilelist.size() == 0){
System.out.println("No java file found under " + filePath);
}
System.out.println("Java file list in " + filePath);
for(String javaFileName: javaFilelist){
System.out.println(javaFileName);
}
}
public static void getAllFiles(File path, ListString list){
if(path.isFile()){//如果是文件
if(path.getName().matches("^.+\\.java$")){//用正則表達(dá)式并且是java文件加入list
list.add(path.getAbsolutePath());
}
}else{//這里加入一個(gè)過濾,過濾掉非java文件,只保留java文件和文件夾
File[] fileAry = path.listFiles(new JavaFileFilter());
if(fileAry == null || fileAry.length == 0){
return;
}
for(File file: fileAry){
getAllFiles(file, list);
}
}
}
}
class JavaFileFilter implements FileFilter{
public boolean accept(File pathname) {
if(pathname.isDirectory()){//如果是目錄也接受
return true;
}else{//如果是java文件,才接受
return pathname.getName().matches("^.+\\.java$");
}
}
}
-------------
測(cè)試文件夾下所有文件及其文件夾,輸出應(yīng)該只有4個(gè)文件,11.java, 444.java, test.java, 222.java
C:\111tree /F
Folder PATH listi
Volume serial num
C:.
│ 11.java
│ abdef.txt
│
├—2
│ 444.java
│ test.java
│
└—3
│ 222.java
│
└—2.java
--------程序輸出
Java file list in C://111
C:\111\11.java
C:\111\2\444.java
C:\111\2\test.java
C:\111\3\222.java
public static void main(String[] args) {
ListA list=new ArrayListA();
list.add(new A(1,1,0));
list.add(new A(2,2,1));
list.add(new A(3,3,1));
list.add(new A(4,4,2));
list.add(new A(5,5,2));
list.add(new A(6,6,3));
list.add(new A(7,7,3));
list.add(new A(8,8,4));
list.add(new A(9,9,5));
diayong(list,2);
}
private static void diayong(ListAlist,int i) {
// TODO Auto-generated method stub
for (A a : list) {
if(a.did==i){
System.out.println(a.id);
diayong(list,a.id);
}
}
}
輸出結(jié)果 4 8 5 9 先找到等于2的第一次 4 然后找等于4的 8 然后沒有了 再循環(huán)找到等于 2的 5 然后找到9 以此類推 不知道 是不是你要的
import java.util.ArrayList;
import java.util.List;
public class BackTrack {
public static void main(String[] args) {
//初始化一個(gè)集合,放在list里面
ListString list=new ArrayListString();
list.add("1");
list.add("2");
list.add("3");
list.add("f");
ListString li=new ArrayListString();
PowerSet(0,list,li);
}
//回溯法求冪集
public static void PowerSet(int i,ListString list,ListString li){
if(ilist.size()-1){System.out.println(li);}
else{
li.add(list.get(i));//左加
PowerSet(i+1,list,li); //遞歸方法
li.remove(list.get(i)); //右去
PowerSet(i+1, list, li);
}
}
}
注:該方法采用中序遍歷二叉樹(實(shí)際這棵樹是不存在的)。對(duì)于第一個(gè)元素,左節(jié)點(diǎn)加進(jìn)去,右節(jié)點(diǎn)去掉。對(duì)于第i一個(gè)節(jié)點(diǎn),左加,右去。直到i大于元素的總個(gè)數(shù)。
輸出結(jié)果:
[1, 2, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 2]
[1, 3, 4]
[1, 3]
[1, 4]
[1]
[2, 3, 4]
[2, 3]
[2, 4]
[2]
[3, 4]
[3]
[4]
[]
二叉樹具有以下重要性質(zhì):
性質(zhì)1 二叉樹第i層上的結(jié)點(diǎn)數(shù)目最多為2i-1(i≥1)。
證明:用數(shù)學(xué)歸納法證明:
歸納基礎(chǔ):i=1時(shí),有2i-1=20=1。因?yàn)榈?層上只有一個(gè)根結(jié)點(diǎn),所以命題成立。
歸納假設(shè):假設(shè)對(duì)所有的j(1≤ji)命題成立,即第j層上至多有2j-1個(gè)結(jié)點(diǎn),證明j=i時(shí)命題亦成立。
歸納步驟:根據(jù)歸納假設(shè),第i-1層上至多有2i-2個(gè)結(jié)點(diǎn)。由于二叉樹的每個(gè)結(jié)點(diǎn)至多有兩個(gè)孩子,故第i層上的結(jié)點(diǎn)數(shù)至多是第i-1層上的最大結(jié)點(diǎn)數(shù)的2倍。即j=i時(shí),該層上至多有2×2i-2=2i-1個(gè)結(jié)點(diǎn),故命題成立。
性質(zhì)2 深度為k的二叉樹至多有2k-1個(gè)結(jié)點(diǎn)(k≥1)。
證明:在具有相同深度的二叉樹中,僅當(dāng)每一層都含有最大結(jié)點(diǎn)數(shù)時(shí),其樹中結(jié)點(diǎn)數(shù)最多。因此利用性質(zhì)1可得,深度為k的二叉樹的結(jié)點(diǎn)數(shù)至多為:
20+21+…+2k-1=2k-1
故命題正確。
性質(zhì)3 在任意-棵二叉樹中,若終端結(jié)點(diǎn)的個(gè)數(shù)為n0,度為2的結(jié)點(diǎn)數(shù)為n2,則no=n2+1。
證明:因?yàn)槎鏄渲兴薪Y(jié)點(diǎn)的度數(shù)均不大于2,所以結(jié)點(diǎn)總數(shù)(記為n)應(yīng)等于0度結(jié)點(diǎn)數(shù)、1度結(jié)點(diǎn)(記為n1)和2度結(jié)點(diǎn)數(shù)之和:
n=no+n1+n2 (式子1)
另一方面,1度結(jié)點(diǎn)有一個(gè)孩子,2度結(jié)點(diǎn)有兩個(gè)孩子,故二叉樹中孩子結(jié)點(diǎn)總數(shù)是:
nl+2n2
樹中只有根結(jié)點(diǎn)不是任何結(jié)點(diǎn)的孩子,故二叉樹中的結(jié)點(diǎn)總數(shù)又可表示為:
n=n1+2n2+1 (式子2)
由式子1和式子2得到:
no=n2+1
滿二叉樹和完全二叉樹是二叉樹的兩種特殊情形。
1、滿二叉樹(FullBinaryTree)
一棵深度為k且有2k-1個(gè)結(jié)點(diǎn)的二又樹稱為滿二叉樹。
滿二叉樹的特點(diǎn):
(1) 每一層上的結(jié)點(diǎn)數(shù)都達(dá)到最大值。即對(duì)給定的高度,它是具有最多結(jié)點(diǎn)數(shù)的二叉樹。
(2) 滿二叉樹中不存在度數(shù)為1的結(jié)點(diǎn),每個(gè)分支結(jié)點(diǎn)均有兩棵高度相同的子樹,且樹葉都在最下一層上。
【例】圖(a)是一個(gè)深度為4的滿二叉樹。
2、完全二叉樹(Complete BinaryTree)
若一棵二叉樹至多只有最下面的兩層上結(jié)點(diǎn)的度數(shù)可以小于2,并且最下一層上的結(jié)點(diǎn)都集中在該層最左邊的若干位置上,則此二叉樹稱為完全二叉樹。
特點(diǎn):
(1) 滿二叉樹是完全二叉樹,完全二叉樹不一定是滿二叉樹。
(2) 在滿二叉樹的最下一層上,從最右邊開始連續(xù)刪去若干結(jié)點(diǎn)后得到的二叉樹仍然是一棵完全二叉樹。
(3) 在完全二叉樹中,若某個(gè)結(jié)點(diǎn)沒有左孩子,則它一定沒有右孩子,即該結(jié)點(diǎn)必是葉結(jié)點(diǎn)。
【例】如圖(c)中,結(jié)點(diǎn)F沒有左孩子而有右孩子L,故它不是一棵完全二叉樹。
【例】圖(b)是一棵完全二叉樹。
性質(zhì)4 具有n個(gè)結(jié)點(diǎn)的完全二叉樹的深度為
證明:設(shè)所求完全二叉樹的深度為k。由完全二叉樹定義可得:
深度為k得完全二叉樹的前k-1層是深度為k-1的滿二叉樹,一共有2k-1-1個(gè)結(jié)點(diǎn)。
由于完全二叉樹深度為k,故第k層上還有若干個(gè)結(jié)點(diǎn),因此該完全二叉樹的結(jié)點(diǎn)個(gè)數(shù):
n2k-1-1。
另一方面,由性質(zhì)2可得:
n≤2k-1,
即:2k-1-ln≤2k-1
由此可推出:2k-1≤n2k,取對(duì)數(shù)后有:
k-1≤lgnk
又因k-1和k是相鄰的兩個(gè)整數(shù),故有
,
由此即得:
分享題目:深度遍歷java算法代碼,深度遍歷 java
文章分享:http://chinadenli.net/article29/dsejgjh.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、服務(wù)器托管、網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、全網(wǎng)營(yíng)銷推廣
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)