- N +

javascript實例500例,JavaScript排序算法之希爾排序的2個實例

大家好,今天小編來為大家解答javascript實例500例這個問題,JavaScript排序算法之希爾排序的2個實例很多人還不知道,現在讓我們一起來看看吧!

零編程基礎,想學JavaScript,有哪些書推薦

我是人民郵電出版社簽約作者,最近剛剛完成一本書《B/S項目開發實戰》,春節前后上市,可以關注一下。不僅有JavaScript,還有涉及jQuery、php等方面的內容。

其實,目前市場上B/S方面的基礎書籍非常多,各種在線資源也很豐富。但為什么還要寫這本書?也就是說,這本書有什么與眾不同的地方?

本人原來主要做的是C/S項目,后來因為一個客戶的“苛刻”要求,必須要同時提供B/S端的訪問,就這樣被倒逼著開始學習的。畢竟從C/S到B/S,模式完全變了,只好從網上購買各種所謂的“從入門到精通”教材。這些書一般都是先從一個個的基礎知識點講起,最后再以一個或多個實例做綜合講解。由于B/S涉及的知識點非常多,整個學習的過程非常枯燥,堅持了二三個星期后根本看不到任何的開發成果。

怎么辦?傳統的老路走不通了!但答應客戶的事,必須要做到啊,不然數十萬的單子可能就會飛掉!只好再上網查資料、找工具,想快速開發,最后決定采用一個前端框架來開發。當時它最最吸引我的是:再不用為那些多的想吐的CSS樣式煩神了,依照自身帶的各種應用實例就可以非常快的搭建好自己的項目,而且擁有非常強大的后臺數據交互能力。最終在約定時間內拿出了測試版,客戶非常滿意。

項目做完之后,回頭再看當時的開發過程,有一點觸動很大:那就是越早體驗到開發的成就感,這種學習下去的動力就會越大。如果按部就班、采取教科書式的學習,很多人往往都堅持不下去而導致半途而廢。尤其對于B/S來說,由于涉及的知識點非常多,順著學習難免會分不清重點,而且非常耗時間,學習到最后的結果可能還是沒有頭緒,具體到項目開發時仍然無從下手。就像小學生學語文一樣,見過誰是拿著一本《新華字典》一個字一個字的去學嗎?肯定是要結合一些場景來學習比較好!

所以,我寫的這本書主體部分只有4章:

第一章“初步認識B/S”:以一個文本文檔為例,手把手的教會大家如何創建、運行最基本的網頁,并大致了解靜態網頁中的html標簽、css樣式、JavaScript信息交互等方面的知識。

第二章“項目開發準備”:學習JavaScript及其標配工具jQuery方面的知識,對JavaScript中各種對象的屬性和方法、jQuery中的各種事件都做了詳細說明。本章內容主要用于客戶端頁面的開發。

第三章“數據交互操作”:學習服務器端編程語言php方面的知識,以及服務器端數據的Ajax交互技術。本章內容主要用于服務器端的數據操作。

第四章“使用前端框架實現快速開發”:有了前幾章的知識儲備之后,就可以使用一些現成的框架來快速搭建自己的應用項目。

為不影響全書的主體結構,很多細節化的內容都以附錄形式放到了本書的“B/S基本知識庫”中。基本知識庫具體包括6大部分:HTML、CSS、jQuery、MySQL、PHP和正則表達式。這些基本知識并不要求一下子全部掌握,僅做日常開發時備查使用。可以毫不夸張的說,新手要學習B/S項目開發,有了這本書就夠了,它已涵蓋常規B/S項目開發中絕大部分的知識點。

自學編程難嗎?說難不難,說易也不易,關鍵是要掌握里面的各種“套路”。是的,就是“套路”,一通百通!以JavaScript為例,本書是這樣開始介入的(從1.5開始):

以下是本書前面幾章的目錄結構,供參考。全書共450頁左右。

如何使用JavaScript構建一個神經網絡

首先,我必須承認我不是神經網絡或機器學習方面的專家。坦率的說,我仍然對大部分內容感到困惑。但希望這能夠鼓勵到正在讀這篇文章,并急切想嘗試M.L的非專家們。

機器學習會時不時地出現,我會告訴自己「是的,這很酷……但是我不確定我是否想在接下來幾個月的時間里學習線性代數和微積分。」

然而,像很多的開發人員一樣,我對JavaScript很感興趣,偶爾也會尋找在JS中實現機器學習的例子,結果卻發現大量的文章和StackOverflow的帖子都在告訴我們對于M.L.來說JS是多么糟糕的語言,誠然,這是事實。然后我就分心了,繼續,認為他們是對的,我應該回去驗證表格輸入并等待CSS網格的啟動。

但是后來我發現了Brain.js,這讓我大吃一驚。它在哪里被藏起來了?!文檔寫的非常好且易于遵循,在開始大約30分鐘之內,我就建立并訓練了一個神經網絡。事實上,如果你想直接跳過整篇文章,僅僅在Github上閱讀readme(https://github.com/BrainJS/brain.js),請便。它真的很棒。

也就是說,接下來的內容不是關于深入研究神經網絡的隱藏輸入層、激活函數或如何使用Tensorflow的教程。相反,這是一個簡單的、入門級別的關于如何實現Brain.js的解釋,這有點超出了文檔的范圍。

OK,讓我們做點什么......

以下是我們將要做的事情的概述:

1.創建你的起始文件

2.決定你想要你的神經網絡做什么

3.建立Brain.js并了解如何處理訓練數據和用戶輸入

4.收集一些訓練數據

5.運行神經網絡

6.利潤?

如果你希望直接下載此項目的工作版本,而不是按照文章進行操作,那么你可以在這里(https://github.com/lordpoint/neural-network-author-classifier)克隆Github存儲庫。

1-起始文件

創建一個新目錄并在其中放置一個好的ol』*index.html*樣板文件。然后創建三個JS文件:*brain.js、training-data.js*和*scripts.js*(或用于默認JS文件的任何通用項),當然,將所有這些文件導入到index.html的底部文件中。

永遠不要害怕看到文件結構

到目前為止都很容易。

現在,在這里(https://raw.githubusercontent.com/harthur-org/brain.js/master/browser.js)獲取Brain.js的源代碼。將**全部內容**復制并粘貼到空的*Brain.js*文件中,點擊save和bam:完成4個文件中的2個。

2-「我的目的是什么?」

接下來是有趣的部分:決定你的機器學什么。用這樣的東西可以解決無數的實際問題,例如,情感分析或圖像分類等。我碰巧認為將文本作為輸入的M.L.的應用程序非常有趣,因為你幾乎可以在任何地方找到訓練數據,并且他們有各種各樣的潛在用例,所以我們將在這里使用的例子是一個處理文本分類的例子:

我們將確定一個推特是由DonaldTrump還是KimKardashian寫的。

Ok,這可能不是最有用的應用程序。但是Twitter是機器學習素材的寶庫,盡管它可能是無用的,但我們的推特作者識別器仍然會說明一個強大的觀點。一旦它被訓練完成,我們的神經網絡將可以在看到**它從未看過的**推特后確定它是由DonaldTrump還是KimKardashian所寫的,僅僅通過識別他們所寫東西中的模式。為了做到這一點,我們將需要提供盡可能多的訓練數據,以便將其復制/粘貼到我們的*training-data.js*文件中,然后我們可以看看我們是否能找到一些推特的作者。

3-建立和數據處理

現在剩下要做的就是在我們的*scripts.js*文件中建立Brain.js,并提供一些在*training-data.js*文件中的訓練數據。但是在此之前,讓我們從30,000英尺的角度來看一下這些將如何工作。

建立Brain.js非常簡單,所以我們不會花費太多時間,但是有一些關于如何預測其輸入數據被格式化的細節,我們應該先來看一下。我們先看一下文檔匯中包含的建立示例(我在此略微做過修改),這些示例很好地說明了這一點:

letnet=newbrain.NeuralNetwork();

net.train([

{

Input:{r:0.03,g:0.7,b:0.5},

Output:{black:1}

},{

Input:{r:0.16,g:0.09,b:0.2},

Output:{black:1}

},{

Input:{r:0.5,b:0.5},

Output:{black:1}

}

]);

letoutput=net.run({r:1,g:0.4,b:0});

首先,上面的例子實際上是一個工作A.I(它看著給定的顏色,然后告訴你黑色文本還是白色文本在上面更清晰)。這有希望說明Brain.js是多么容易使用。只是實例化、訓練、然后運行而已。我的意思是,如果你將訓練數據內聯,將會是3行代碼。很酷。

現在讓我們來談一下訓練數據。在上面的例子中,除了訓練數據整體input:{},output:{}的格式,還有兩個重要的事情需要注意。

首先,數據不需要長度相同。正如你在上面第11行看到的,只有一個R和B值通過,而另外兩個輸入通過了R、G和B的值。另外,值得一提的是,即使上面的例子將輸入看作對象,你也可以使用數組。我提到這點很大程度上是因為我們將在項目中傳遞不同長度的數組。

第二,這些不是有效的RGB值。如果你想真的使用它們,每個都會變成黑色。這是因為輸入值必須介于0和1之間才能使Brain.js和它們一起工作。因此,在上面的例子中,每種顏色都必須經過處理(可能只是經過一個將其除以255的函數進行處理——RGB的最大值)以使其工作。我們也會做同樣的事情。

3.1—encode()

所以如果我們想讓神經網絡接受推特(即字符串)為輸入,我們需要通過一個類似的函數(下面稱為encode())來處理它們,這將使字符串中的每一個字符變成一個介于0和1之間的值,并將其儲存在一個數組中。幸運的是,Javascript有一個將字符轉化成ASCII的簡單方法,叫做charCodeAt()。所以我們將使用它并將輸出除以擴展的ASCII(http://www.theasciicode.com.ar/)碼的最大值:255(我們用**擴展的**ASCII

碼,以防遇到像**é**或**?**這樣的邊緣情況),這將確保我們得到的值<1。

3.2—processTrainingData()

另外,我們會將訓練數據存儲為純文本,而不是我們最終將輸入到人工智能的編碼數據——稍后你將會為此感謝我。所以我們需要另一個函數(下面稱為processTrainingData())將前面提到的編碼函數應用到訓練數據中,有選擇地將文本轉換為編碼字符,并返回一組訓練數據,這些數據將與Brain.js很好的工作。

Sohere』swhatallofthatcodewilllooklike(thisgoesintoyour『scripts.js』file):

所以下面是所有的代碼(這會進入你的『scripts.js』文件中):

lettrainedNet;

functionencode(arg){

returnarg.split('').map(x=>(x.charCodeAt(0)/255));

}

functionprocessTrainingData(data){

returndata.map(d=>{

return{

input:encode(d.input),

output:d.output

}

})

}

functiontrain(data){

letnet=newbrain.NeuralNetwork();

net.train(processTrainingData(data));

trainedNet=net.toFunction();

console.log('Finishedtraining...');

};

functionexecute(input){

letresults=trainedNet(encode(input));

letoutput;

results.trump>results.kardashian?output='Trump':output='Kardashian';

returnoutput;

}

train(trainingData);

31行。這是非常多的。

在這里你會注意到在train()函數中的第20行有前面文檔的示例中沒有提到的(除了我們已經討論過的兩個輔助函數外),它將訓練過的神經網絡保存到一個叫trainedNet的全局變量中。這可以防止我們每次使用神經網絡時不得不重新訓練它們。一旦網絡被訓練并保存到變量中,我們可以將它稱為函數,并傳入編碼輸入(如execute()函數中的第25行)以使用A.I。

好的,所以現在你的*index.html*、*brain.js*、和*scripts.js*文件都完成了。現在我們需要的是將一些東西放入training-data.js中,準備好開始吧。

4-訓練

最后,我們的訓練數據。像我之前提到的,我們將所有推特存儲為文本,并將它們編碼為數值,這將使你在實際需要復制/粘貼訓練數據時變得更加容易。沒有必要的格式。只需要在文本中粘貼并添加一個新行。

consttrainingData=[

{

input:"InsideChi'snursery",

output:{kardashian:1}

},{

input:"WhyIdyedmyhairpink",

output:{kardashian:1}

},{

input:"FeelingBlue(wearing@kkwbeautypowdercontourinmedium&darkcontourkitaseyeshadow,&anewlipcomingsoon)",

output:{kardashian:1}

},{

input:"Iwillbeinterviewedby@JudgeJeanineon@FoxNewsat9:00P.M.Enjoy!",

output:{trump:1}

},{

input:"DemMemo:FBIdidnotdisclosewhotheclientswere-theClintonCampaignandtheDNC.Wow!",

output:{trump:1}

},{

input:"ThankyoutothegreatmenandwomenoftheUnitedStates@SecretServiceforajobwelldone!",

output:{trump:1}

}

]

把它添加到你的『training-data.js』文件中,你就完成了!

注意:雖然上面的例子只顯示了每個人的3個樣本,但我用了10個;我只是不希望這個樣本占用太多空間。當然,你的神經網絡的準確性會隨著你提供的訓練數據量的增加而成比例的增加,所以你可以隨意使用比我更多或更少的數據,看看它是如何影響結果的。

5-執行

現在,運行新訓練的神經網絡只需要在『script.js』文件的底部額外添加一行調用execute()函數的指令,并傳入一個Trump或Kardashian的推特。確保console.log,因為我們還沒有建立UI。下面是一個來自KimKardashian的推特,它不在我的訓練數據中(即網絡之前沒有見過這篇推特):

然后在本地主機上拉起index.html頁面,檢查console,然后......

在這里!該網絡正確識別了它之前從未見過的來自KimKardashian的推特,確定性為86%。

現在讓我們用Trump的推特再嘗試一下:

console.log(execute("WhetherweareRepublicanorDemocrat,wemustnowfocusonstrengtheningBackgroundChecks!"));

結果是......

再一次,一個從未見過的推特。再一次,正確識別!這次有97%的確定性。

6-利潤?

現在你有一個神經網絡可以訓練你想要的任何文本!你可以輕松地調整它來識別電子郵件或公司在線評論中的情緒,識別垃圾郵件,分類博客文章,確定信息是否緊急,或任何上千種不同的應用程序。盡管我們的推特識別器是無用的,但是它仍然說明了一個非常有趣的觀點:像這樣的神經網絡可以執行類似根據寫作方式識別作者這樣的細致入微的任務。

所以,即使你不去創建一個以機器學習為動力的創新或有用的工具,這仍然是你開發工具中很好的經驗。你永遠不知道什么時候可能就派上用場了,甚至可能在未來開辟新的機會。

js實現日歷可獲得指定日期周數及星期幾示例分享

1、要獲得當前時間,我們可以使用Date方法,new一個Date對象。

2、然后調用這個對象的toLocaleTimeString方法,來獲取具體的時間

3、最后使用alert方法來彈出結果,來驗證一下是否正確

4、運行頁面,點擊按鈕,可以看到彈出一個確認框里,里面顯示的時間就是當前時間了。

JavaScript排序算法之希爾排序的2個實例

代碼示例:

functionshellSort(arr){

letlen=arr.length;

//gap即為增量

for(letgap=Math.floor(len/2);gap>0;gap=Math.floor(gap/2)){

for(leti=gap;i<len;i++){

letj=i;

letcurrent=arr[i];

while(j-gap>=0&&current<arr[j-gap]){

arr[j]=arr[j-gap];

j=j-gap;

}

arr[j]=current;

}

}

}

vararr=[3,5,7,1,4,56,12,78,25,0,9,8,42,37];

shellSort(arr);

js如何實現滑動事件

js的左右上下滑動觸屏事件,主要有三個事件:touchstart,touchmove,touchend。這三個事件最重要的屬性是pageX和pageY,表示X,Y坐標。touchstart在觸摸開始時觸發事件touchend在觸摸結束時觸發事件touchmove這個事件比較奇怪,按道理在觸摸到過程中不斷激發這個事件才對,但是在部分設備中,在touchstart激發后激發一次,然后剩余的都和touchend差不多同時激發。這三個事件都都有一個timeStamp的屬性,查看timeStamp屬性,可以看到順序是touchstart->touchmove->touchmove->…->touchmove->touchend。下面是一段代碼實例:document.getElementsByTagName('body')[0].addEventListener('touchstart',function(e){nStartY=e.targetTouches[0].pageY;nStartX=e.targetTouches[0].pageX;});document.getElementsByTagName('body')[0].addEventListener('touchend',function(e){nChangY=e.changedTouches[0].pageY;nChangX=e.changedTouches[0].pageX;PS:

1.touch事件跟click事件是不會被同時觸發的。現在的移動設備做的比較好,已經把這個問題完美的避免掉了。

2.注意觸摸的開始和結束位置的位移大小。如果位移小過小應該不做任何動作。

javascript實例500例的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于JavaScript排序算法之希爾排序的2個實例、javascript實例500例的信息別忘了在本站進行查找哦。

返回列表
上一篇:
下一篇: