回覆列表
  • 1 # 綜藝蛀蟲

    我認為你在學習演算法前,必須要掌握Java的一些基礎理論知識,比如:理解並掌握&和&&,JVM、JRE和JDK的區別,path和classpath的作用,Java語言的三種技術架構等等。同時,請你不用耗太多時間去學資料結構,因為Java本身就有這庫,直接用就是行了,不過對資料結構你肯定要有一定程度的瞭解,不然你知道有類庫也不知道咋用,更不知何時用了。

    當你學好10種演算法後,可以深入學習Java的高階應用,譬如:執行緒開發、WEB程式設計、資料庫開發、GUI的開發,等等。

  • 2 # 程式引力

    作為Java開發者,建議你在學習Java的基礎語法後,就可以學習演算法。演算法主要是體現的是邏輯或方法,演算法其實跟程式語言沒有直接關係。

    但是你在學習演算法過程中,會看到很多演算法是透過某種語言來講解的,所以才建議你學習Java基礎語法的。也就是說,只要你能看懂演算法教程中的舉例,就可以學習演算法了。

  • 3 # 碼鄰蜀科技

    演算法,首先要清楚什麼演算法,如果只是簡單的查詢和排序演算法,在學習得語言基礎階段就會接觸,其他一些演算法,要了解資料結構的相關知識,比如堆疊,佇列,連結串列,圖,樹等,更高階的演算法就要涉及數學知識,比如ai的學習演算法,涉及,離散數學,機率統計等。另外,就是要明白,你學習演算法的目的是什麼,千萬不要為了演算法而演算法,一切學習全在於應用,一定要用到實踐中去。

  • 4 # IT人劉俊明

    演算法和資料結構對於程式設計來說是非常重要的,因為程式設計說到底就是一個演算法問題,在後端開發、大資料以及人工智慧相關的開發中,演算法都是非常重要的從業基礎。演算法本身是獨立於程式設計的,但是要想真正的掌握演算法需要透過程式語言對演算法予以實現,所以通常情況下都是掌握了程式設計基礎之後再開始學習演算法和資料結構。

    以Web開發為例,學習Java的過程大概分為三個階段,分別是程式語言基礎、Web開發基礎、分散式開發和框架開發,通常情況下在程式設計基礎學習完之後就可以學習演算法和資料結構了。Java程式設計基礎包括掌握面向物件程式設計過程、陣列、流程控制、封裝、繼承、多型、異常處理、IO、集合、多執行緒以及網路程式設計等內容。

    演算法設計的學習往往從排序開始,然後是遞迴求解、機率分析、隨機演算法、資料結構(棧、佇列、連結串列、圖、樹等)、貪心演算法、核算法、圖演算法等內容,演算法的學習需要一個系統的過程,同時要結合實驗進行。其實,演算法的學習也可以先於程式語言的學習,不少演算法設計的教材會提供基於演算法的虛擬碼的實現過程,對於沒有程式設計基礎的人來說也能夠了解演算法的實現過程,看兩個例子:

    演算法設計的基礎是數學,所以在學習演算法之前要對高等數學、線性代數、機率論和離散數學有一定的瞭解,因此數學對於計算機專業來說還是非常重要的,如果要想在軟體研發這條路上走的更遠,一定要有一個紮實的數學基礎。

    對於研發級程式設計師來說,幾乎每天都要跟演算法打交道,但是對於應用級程式設計師來說,與演算法打交道的時候往往並不多,對於學習者來說要根據自身的知識結構來選擇發展方向,做應用級研發也是可以的。

  • 5 # 小貝的STEAM教室

    演算法說白了就是對時間和空間的平衡,換算。其實,演算法在java中很少用到,不過也要學習一些(簡單的),如遍歷,棧,佇列,當然還包括遞迴演算法。其實我覺得遞迴演算法很重要,尤其是訪問檔案目錄時。(因此什麼時候學並不是需要關注的問題,掌握了Java基礎,就可以學了)

    當然了,如果只是簡單地做一般性應用,大可不必花大心思去學資料結構和演算法設計。其一:這些與語言不相關;其二:這些都已經有現成的實現,自己直接呼叫就行。資料結構與演算法設計的重要性,體現在最佳化而不是實現。

  • 6 # IT講壇

    java裡面本身是包含演算法的,只不過它的演算法比著大資料python 那些,還是顯得有點low的。在java程式設計學習的過程中,你會接觸到一些排序,比如氣泡排序,選擇排序,希爾排序,歸併排序等,這可以當作是學習演算法的入門吧。下面我們從幾個階段來討論:

    1.學習階段

    剛開始學習java程式設計,主要還是熟悉它的基本語法,以及常用的框架,做到能夠開發企業級專案,對於一些演算法你可以作為了解,畢竟初級階段,你出去面試找工作,人家也不會難為你問到一些複雜的演算法。

    2.工作階段

    這個階段你已經步入職場了,在職場中,你會發現,演算法幾乎用不到,可能是你還沒到那個價格,但是這並不意味著,你就不需要學習演算法了。相反,在你工作的同時,你就要留意公司裡面所用的框架,關鍵的技術點,尤其是用到的演算法。有了大致瞭解後,你就需要利用你工作之餘的時間,開始學習演算法了,因為你不會是想當一輩子的程式設計師吧?不想的話,你就要下足功夫去學演算法,開源的框架等。

    綜上所述,你在學習階段學習一些簡單的演算法,以及對演算法有一個大致的瞭解,就足夠了。在工作階段,才是你學習演算法的好時機。

  • 7 # 一零言

    java程式設計的學習與演算法的學習是相輔相成的,演算法的學習需要你已經有了一定的基礎,下面我來告訴你學習演算法以前怎麼學習java程式設計。

    學好基礎,穩紮穩打

    1.從你建第一個java類,寫下第一個main方法,輸出第一個hello world開始,學習一個java方法的構成

    2.學習Java的基本資料型別、變數型別、修飾符、運算子,學習條件語句、for迴圈等。

    3.學習字串、陣列的操作,字串、陣列可以說是你在開發的過程中經常使用的部分。

    4.學習Java的異常處理,你在程式設計過程中肯定需要考慮錯誤問題,如何對錯誤進行處理以及捕獲異常需要你去掌握。

    5.學習面向物件,瞭解Java的封裝、繼承、多型,掌握抽象類和介面的編寫。

    6.至此,你已經掌握了基本的Java知識,能夠編寫一些程式,但對於演算法的實現需要你先去理解演算法,然後轉化為程式實現演算法的邏輯。

    演算法那些事

    1.演算法的學習由淺入深,從實現簡單的演算法開始。比如,學習實現氣泡排序、快速排序、插入排序、歸併排序等等,在這裡你可以利用陣列的知識去一一進行實現。

    2.Java工具包提供了強大的資料結構,為此,你需要掌握幾種介面和類:

    列舉(Enumeration)位集合(BitSet)向量(Vector)棧(Stack)字典(Dictionary)雜湊表(Hashtable)屬性(Properties)

    3.下一步該學習更難一些的資料結構演算法,分別為:

    線性表棧和佇列樹與二叉樹二叉查詢樹平衡二叉樹紅黑樹圖

    還有其他的一些演算法,需要你去了解學習啦,想當年我去找實習面試官問了一個需要用字典樹解決的問題,然而當時的我太年輕,沒有太重視演算法,結果可想而知、面試碰壁了。

    4.刷leetcode

    leetcode是一個老少皆宜的網站,你想刷演算法題的話可以去那裡,很多老司機在那裡刷題保持寫程式碼的手感,如果找工作刷leetcode也是必備之品。

    當然有一點需要注意,很多演算法題需要你利用數學知識去解決,所以在編寫演算法題時很可能需要你去惡補下數學。

    還有一點友情提示,LeetCode是一個英文平臺,你在做題時必備谷歌翻譯,想他們參加ACM比賽都是去借大頭目牛津英漢字典!

  • 8 # 唯曉寶

    演算法是反應一個人邏輯思維能力的東西,大部分程式設計師在大部分工作中其實都用不到演算法。但是我個人認為程式設計師對演算法的學習應該是貫穿整個程式設計生涯的,就是隻要你有空,就可以研究一小會演算法,因為這是對邏輯思維的一個鍛鍊,即使你平時的工作用不到演算法,但是一個良好的邏輯思維能力也是對你的編碼有很大幫助的。

  • 9 # 哎呦658

    演算法原理整合學習(ensemble leaning)透過構建並結合多個學習器來完成學習任務,透過將多個學習器結合,常常可以獲得比單一學習器顯著優越的效果和泛化能力。整合學習中的基學習器可以是同質的,也可以是異質的。根據個體學習器的生成方式,目前的整合學習方法大致可分為三大類:一類是Bagging,個體學習器之間不存在強依賴關係,可以同時並行化訓練和生成,最終結果通常透過投票機制產出,隨機森林是這一型別的代表;另一類是Boosting,個體學習器之間存在強依賴關係,後一學習器依賴前一學習器的結果,,因此必須以序列化形式序列生成,我們下節會講到的Adaboost和GBDT是這一型別的代表;其實還有第三類,叫Stacking,即將初級學習器的輸出次級學習器的輸入特徵,深層神經網路甚至可以理解為Stacking整合學習的變種。

    隨機森林(Random Forest)是以決策樹為基學習器構建的Bagging整合學習演算法,其實現簡單、計算開銷小、並且在很多現實任務中表現出搶眼的效果。其主要透過樣本擾動和屬性擾動使得整合學習的泛化性顯著提高。樣本擾動是指透過對初始訓練集取樣構建每一棵決策樹;屬性擾動是指對基決策樹的每個節點,分裂時從該節點的屬性集合中隨機選擇k個屬性(k一般去log(d,2),d為屬性數量)。

    模型訓練程式碼地址:https://github.com/qianshuang/ml-exp

    def train():

    print("start training...")

    # 處理訓練資料

    train_feature, train_target = process_file(train_dir, word_to_id, cat_to_id)

    # 模型訓練

    model.fit(train_feature, train_target)

    def test():

    print("start testing...")

    # 處理測試資料

    test_feature, test_target = process_file(test_dir, word_to_id, cat_to_id)

    # test_predict = model.predict(test_feature) # 返回預測類別

    test_predict_proba = model.predict_proba(test_feature) # 返回屬於各個類別的機率

    test_predict = np.argmax(test_predict_proba, 1) # 返回機率最大的類別標籤

    # accuracy

    true_false = (test_predict == test_target)

    accuracy = np.count_nonzero(true_false) / float(len(test_target))

    print()

    print("accuracy is %f" % accuracy)

    # precision recall f1-score

    print()

    print(metrics.classification_report(test_target, test_predict, target_names=categories))

    # 混淆矩陣

    print("Confusion Matrix...")

    print(metrics.confusion_matrix(test_target, test_predict))

    if not os.path.exists(vocab_dir):

    # 構建詞典表

    build_vocab(train_dir, vocab_dir)

    categories, cat_to_id = read_category()

    words, word_to_id = read_vocab(vocab_dir)

    # kNN

    # model = neighbors.KNeighborsClassifier()

    # decision tree

    # model = tree.DecisionTreeClassifier()

    # random forest

    model = ensemble.RandomForestClassifier(n_estimators=10) # n_estimators為基決策樹的數量,一般越大效果越好直至趨於收斂

    train()

    test()執行結果:

    ead_category...

    read_vocab...

    start training...

    start testing...

    accuracy is 0.875000

    precision recall f1-score support

    娛樂 0.83 0.91 0.87 89

    房產 0.78 0.83 0.80 104

    教育 0.81 0.81 0.81 104

    家居 0.75 0.71 0.73 89

    遊戲 0.93 0.95 0.94 104

    時政 0.78 0.79 0.78 94

    時尚 0.94 0.89 0.92 91

    體育 0.98 0.97 0.97 116

    財經 0.95 0.91 0.93 115

    科技 0.99 0.96 0.97 94

    avg / total 0.88 0.88 0.88 1000

    Confusion Matrix...

  • 中秋節和大豐收的關聯?
  • 老公冷暴力一年半,妻子提離婚,丈夫猶豫,請問男人是怎麼想的?