這幾天看到了吳軍的文章,主要是說明好的計算機算法的一些概念和方法,我覺得相當的受用,所在接下來幾天就來整理一下相關的重點。
 
在計算機裡面,控制部分很重要,而控制硬體執行的是程序。史元春教授講了計算機思維的本質是翻譯,也就是把人想要做的具體事倩,翻譯成計算機能夠理解的程序語言。很多時候,張三希望計算機做的一件事,和李四希望它做的一件事,有一些共性的地方,久而久之大家發現使用計算機工作的流程是相似的,於是科學家們在翻譯現實世界的需求和計算機虛擬過程時,就提煉出一些高效的、不斷被驗證過的標準流程,這些流程就是我們所說的計算機算法。
 
人和人水平的差別,東西和東西質量的差別,是數量級的,這個認識恰恰來自於計算機算法。因為在計算機算法上稍微差了一點,最後計算機執行的效率很容易差出千萬倍。
 
人「本能」地對大數沒有概念,其實對超過我們生活經驗的小數也是如此,計算機算題的速度很決, 以至於人們對一毫秒(千分之一秒)和一微秒的差別是無感的,但是,計算機要處理的數據量也是非常大的,因此累計起來,後者就比前者快了很多(一干倍)。很多計算機從業者對計算機資源的數量沒有概念,總覺得是無窮大,因此無端浪費很多資源,這樣做事倩,在行業裡是很難出人頭地的。即使在Google,軟體工程師因為水平不行,無意中多用掉十倍的計算資源的事情也時常發生。
 
既然講到了算法的好壞,就必須先要明確衡量算法的標準,以及測試的方法, 這和任何科學都一樣。什麼是好算法呢, 很多人首先會想到速度決,當然還有人會想到佔用內存空間不要太大。制定這樣兩個標準,大方向本身都沒有問題,但用多少數據來測試算法的速度和空間卻是一個問題,因為用不同數量的數據測試時, 兩個算法的相對錶現可能會完全不一樣。
 
1965年哈特馬尼斯(Juris Hartmanis ) 和斯坦恩斯 ( Richard Stearns )提出了算法複雜度的概念( 二人後來因此獲得了圖靈獎 ),計算機科學家們開始考慮一個公平的、一致的評判算法好壞的方法。不過,最早將複雜度嚴格量化衡量的是著名計算機科學家、算法分析之父高德納(Don Knuth)。今天,全世界計算機領域都以高德納的思想為準。
 
高德納的思想主要包括這三個部分:
 

  • 在比較算法的快漫時,需要考慮數據量特別特別大,大到近乎無窮大時的清況。為什麼要比大數的清況,而不比小數的清況呢?因為計算機的發明就是為了處理大量數據的,而且數據越處理越多。


  •  

  • 決定算法決漫的因素雖然可能很多,但是所有的因素都可以被分為兩類。第一類是不隨數據量變化的因素,第二類是隨著數量變化的。高德納講,我們在研究算法時,不必考慮前面那個不變的常數,它是10倍,還是1倍, 或者是100倍,只需要看後面那個變化的因素即可。更廣泛地講,任何隨著 N 變化的因素,通常會造成量級的差異。關於量級,量級就如同芝麻和西瓜的差異,西瓜和地球的差異。100個芝麻是無法和一個西瓜去對比的。


  •  

  • 如果兩種算法在量級上相當,在計算機科學裡,就認為它們是一樣好的,也就是計算機科學家並不關心三五倍的差別,這就好比1粒芝麻和5粒芝麻都是芝麻量級的東西,大家就不要比了。只有當科學家們不關心幾倍的差異後,才可能集中精力考慮量級的差異。也就是說,計算機科學家要盡可能地去撿西瓜。事實上在計算機科學領域,如果誰說自己把目前最好的算法速度提升了一倍,這種論文是無法發表的。


  •  
    高德納關於算法複雜度的思想,其實又是建立在一個相對理想狀態之下的,也就是說計算機要解決的問題都近乎無限大。很顯然,現實世界並非如此,那麼高德納這樣理想化的假設是否有意義呢?非常有意義,而且非常重要。回顧一下科學發展的歷史,那些能總結出理論的人要做的第一件事,就是過濾掉所有次要的因素,構建一個理想的環境(或者虛擬的環境)。
     
    當年亞里士多德就是因為無法濾除空氣阻力對重力加速度的影響,得到了重物比輕物下降速度快的荒唐結論。而後來伽利略和牛頓在研究運動時,也是假設空氣阻力和摩擦力可以忽略不計的,那就是構建理想狀態。

    Gimmy 發表在 痞客邦 留言(0) 人氣()

     
    一、知識:深知識與表面知識

    Gimmy 發表在 痞客邦 留言(0) 人氣()

     
    一、觀念

    Gimmy 發表在 痞客邦 留言(0) 人氣()


    ■ 如何同時運作
     
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()


    這星期去參加讀書會,今天分享的《購物心理學》這本書的第三章、第四章,這兩個章節主要要講的就是關於《決策介面》,當然我也是這次的分享者之一,我覺得參加讀書會是一個很好的自我提升活動。這次分享的人其實也算蠻多的,但是沒有機會一一記錄下來每一個人講的部份,因為有些人實在講太快了。
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()


     
    ■ 中途稟賦

    Gimmy 發表在 痞客邦 留言(0) 人氣()

    想像你是一所學校的校長,並且相當關心學生們的健康。你想要改善他們的飲食習慣,降低攝取熱量。那有什麼好的方法可以達成這個目標呢?或許你會想到「校內廣告」宣傳的主意,由此告知學生們健康食品的好處,讓他們知道更多關於吃下太多熱量的負面影響。很多健康心理學領域的研究都指出,這種宣傳或許確實可以改變人們對高熱量食物的態度,有助於提升健康飲食的意願,不過同類研究也顯示出,這對實際行為的影響結果微乎其微。
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()

    成本可分為兩種:金錢與行為成本。行為成本包括獲取報償所需的時間與努力。
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()


    在linux系統中,如 ubuntu,cron 排程的資料是存在 /etc/crontab 中,我們可以直接輸入 sudo nano /etc/crontab 進行編輯。
     
    1. Linux Cron 指令
     

  • crontab -l    列出該使用者擁有的 crontab 指令



  • crontab -e   編輯該使用者的 crontab 指令



  • crontab -r    將使用者的 crontab 全部清除!( 小心使用



  • crontab -u   改變排程的執行身分: crontab -u user filename


  •  
     
    2. Cron 語法介紹
     
    crontab 是 Linux 內建的機制,可以根據設置的時間參數來執行例行性的工作排程。
     
     
    依序是 分鐘,   小時,   日期,   月份,    星期,   command
    參數為 0-59,   0-23,   1-31,  1-21,   0-6,   需要執行的command
     
    ※ 星期參數為 代表星期日
     
     
     
    3. 參數特殊字符意義
     
    【*】:星號,代表任何時刻都接受的意思
    【,】:逗號,代表分隔時段。例如:30 9,17 * * * command,代表早上 9 點半和下午五點半都執行 command。
    【-】:減號,代表一段時間範圍。例如:15 9-12 * * * command,代表從 9 點到 12 點的每個 15 分都執行 command。
    【/n】:斜線,n 代表數字,表示每個 n 單位間隔。例如:*/5 * * * * command,代表每隔 5 分鐘執行一次 command。
    ■ 還有一些人性化的參數,一次取代全部五個數字參數
     
    【@reboot】 :僅在開機的時候執行一次。
    【@yearly】 :一年執行一次,和0 0 1 1 * command效果一樣。
    【@annually】:(和@yearly一樣)
    【@monthly】:一個月執行一次,和0 0 1 * * command效果一樣。
    【@weekly】:一個星期執行一次,和0 0 * * 0 command效果一樣。
    【@daily】:每天執行,和0 0 * * * command效果一樣。
    【@midnight】:(和@daily一樣)
    【@hourly】 :每小時執行,和0 * * * * command效果一樣。
     
     
    4. Cron 執行範例
     

  • 每 5 分鐘執行一次:





    • */5 * * * *  root    /usr/libexec/atrun




  •  

  • 每 5 小時執行一次





    • * */5 * * * root    /usr/libexec/atrun




  •  

  • 每天 AM 5:00 執行指令(星號與星號之間要有空隔)





    • 00 05   * * *  username /bin/bash /路徑/command




  •  

  • 1 至 20 號每天執行一次





    • 0 1 1-20  * * root    /usr/libexec/atrun




  •  

  • 當分針移到第 5 分時,執行此 cron





    • 5 * * * * root    /usr/libexec/atrun




  •  

  • 當時針移到 1 點 1 分時,執行此 cron





    • 1 1 * * * root    /usr/libexec/atrun




  •  

  • 每週一的 1 點 1 分,執行





    • 1 1 * * 1 root    /usr/libexec/atrun




  •  

  • 2 月 29 日時針到 1 點 1 分,執行





    • 1 1 29 2 * root    /usr/libexec/atrun




  •  

  • 8 點到 16 點每 5 分鐘執行一次 cron





    • */5 8-16 * * *   root    /usr/libexec/atrun




  •  
    設定完成後將 cron 重新啟動
     
    /etc/init.d/cron restart
     
     
    5. 如何讓 cron job 自動備份資料
     
    範例是每天自動備份另一台機器的資料,但是時間一久 ,備份的資料會越來越多,最後硬碟會撐不住,所以又要加一個自動刪除舊檔的 cron job,下面這個範例會自動刪除五天前的 gz 備份檔。
     
    40 1 * * * userxx /usr/bin/rm `date --date="-5 day" +"\%Y-\%m-\%d"`*.gz
     
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()


    米雯娟老師結合 VIPKID 自身的創業經歷,來說明《 如何從 0 到1 找到自己的商業模式 》。
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()

    三、如何擺脫情緒勒索?
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()

    二、「自我價值感」提升,是避免被「情緒勒索」的護身符!
     

    Gimmy 發表在 痞客邦 留言(0) 人氣()

    Blog Stats
    ⚠️

    成人內容提醒

    本部落格內容僅限年滿十八歲者瀏覽。
    若您未滿十八歲,請立即離開。

    已滿十八歲者,亦請勿將內容提供給未成年人士。