[ 收藏 ] [ 繁体中文 ]  
臺灣貨到付款、ATM、超商、信用卡PAYPAL付款,4-7個工作日送達,999元臺幣免運費   在線留言 商品價格為新臺幣 
首頁 電影 連續劇 音樂 圖書 女裝 男裝 童裝 內衣 百貨家居 包包 女鞋 男鞋 童鞋 計算機周邊

商品搜索

 类 别:
 关键字:
    

商品分类

  • 新类目

     管理
     投资理财
     经济
     社会科学
  • 算法第一步(Python版)(博文視點出品)
    該商品所屬分類:圖書 -> 電子工業出版社
    【市場價】
    982-1424
    【優惠價】
    614-890
    【作者】 葉蒙蒙 
    【所屬類別】 電子工業出版社 
    【出版社】電子工業出版社 
    【ISBN】9787121391279
    【折扣說明】一次購物滿999元台幣免運費+贈品
    一次購物滿2000元台幣95折+免運費+贈品
    一次購物滿3000元台幣92折+免運費+贈品
    一次購物滿4000元台幣88折+免運費+贈品
    【本期贈品】①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
    版本正版全新電子版PDF檔
    您已选择: 正版全新
    溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。
    *. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。
    *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。
    *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。
    內容介紹



    出版社:電子工業出版社
    ISBN:9787121391279
    版次:1

    商品編碼:13034396
    品牌:電子工業出版社
    包裝:平裝

    開本:16開
    出版時間:2020-12-01
    用紙:膠版紙

    頁數:272
    字數:372000

    作者:葉蒙蒙

        
        
    "

    產品特色

    編輯推薦

    適讀人群 :青少年計算機編程愛好者,及計算機相關專業初學者

    軟件開發就是通過各種算法實現具體的業務邏輯,把繁雜的過程抽像化、可計算化的過程,了解基本原理,掌握數據結構和6大經典算法,手寫代碼實現,鍛煉思維肌肉,讓大腦靈活地轉起來。

    即使沒有任何程序設計基礎的讀者也可以閱讀本書,書中同步講解兩方面內容:使用Python 語言編寫程序,基礎經典算法。由編程學算法,以算法促編程。

    用妙趣橫生的插畫描述復雜的原理的算法框架。


    內容簡介

    《算法第一步(Python版)》針對零基礎的初學者,以算法為核心,以編程為手段,最終的目的是培養讀者的計算思維。

    本書涉及大學計算機課程中程序設計、數據結構和計算機原理等多個領域的知識,從程序、編程和算法是什麼入手;然後重點介紹了控制流程和數據結構,並針對數據結構的限制和實現剖析了現代電子計算機的基礎:二進制和馮·諾依曼結構;最後重點介紹了6大經典算法的原理、過程和編程實現,以及其背後的算法策略。

    為了使零基礎的讀者能夠上手編程,本書從操作角度闡述了編程工具的使用和程序編寫、運行、調試的過程。


    作者簡介

    葉蒙蒙,微軟資深算法工程師,科普寫手。近二十年間積累了大量用C/C++, Java, C# 和 Python開發各類軟件的經驗,深刻體會到編程的核心在於算法。本著幫助更多朋友了解、學習計算機算法,掌握計算思維的初心,寫作此書。


    目錄

    第1章 認識算法
    1.1 算法究竟是什麼
    1.1.1 廣義的算法
    1.1.2 計算機領域的算法
    1.2 程序、編程和算法之間的關繫
    1.2.1 算法與程序
    1.2.2 算法與編程
    1.2.3 學習算法和編程的用處
    1.3 學習算法的深度
    1.3.1 掌握算法的5個層次
    1.3.2 對應不同層次的講解方法
    1.3.3 算法驅動編程
    1.3.4 算法的難點:從原理到實現

    第2章 萬事的抽像:控制流程
    2.1 認識流程
    2.1.1 順序
    2.1.2 順序結構
    2.1.3 條件(分支)
    2.1.4 條件(分支)結構
    2.1.5 循環(迭代)
    2.1.6 循環(迭代)結構
    2.2 用簡單的結構表達復雜的過程:控制結構的排列和嵌套
    2.2.1 什麼是流程圖
    2.2.2 極簡版流程圖符號表
    2.2.3 最簡單的流程圖
    2.3 流程圖的粒度與嵌套
    2.3.1 粒度
    2.3.2 嵌套
    2.3.3 條件結構和循環結構的嵌套
    2.3.4 粒度均衡的流程圖

    第3章 計算機是如何運行的
    3.1 數據
    3.1.1 信息數字化
    3.1.2 數據化與數據
    3.1.3 數據的組織
    3.1.4 數據結構
    3.2 計算機原理淺釋
    3.2.1 電子計算機的前世今生
    3.2.2 馮·諾依曼結構
    3.2.3 存儲空間的地址和內容
    3.2.4 一條指令是如何被執行的
    3.2.5 馮·諾依曼結構的直觀解釋
    3.2.6 馮·諾依曼結構的應用
    3.2.7 馮·諾依曼結構的瓶頸
    3.2.8 哈佛結構

    第4章 萬物的抽像:數據結構
    4.1 認識數據結構
    4.1.1 數組
    4.1.2 鏈表
    4.2 直觀理解數據結構
    4.2.1 數組與鏈表
    4.2.2 數組與鏈表之同
    4.2.3 數組與鏈表之異
    4.3 預留給貨物的固定貨架:內存中的數組
    4.3.1 存儲空間
    4.3.2 數組:一塊連續的存儲空間
    4.3.3 數組的下標
    4.3.4 數素
    4.3.5 素值
    4.3.6 數組的特性
    4.3.7 連續存儲惹的禍
    4.4 見縫插針地擺放貨物:內存中的鏈表
    4.4.1 鏈表
    4.4.2 鏈表的編輯
    4.5 數據結構的特性和發展
    4.5.1 特性各異的鏈表與數組
    4.5.2 數據結構的發展

    第5章 復雜一些的數據結構:圖和樹
    5.1 圖
    5.1.1 圖的定義和分類
    5.1.2 相關概念和算法
    5.2 樹
    5.2.1 樹的定義
    5.2.2 二叉樹
    5.3 遍歷算法
    5.3.1 樹的遍歷和圖的遍歷
    5.3.2 二叉樹的深度優先遍歷算法
    5.3.3 二叉樹的廣度優先遍歷算法
    5.4 圖和樹的現實意義
    5.4.1 圖的抽像
    5.4.2 樹的抽像
    5.5 圖和樹
    5.5.1 樹是圖的真子集
    5.5.2 樹比圖更加嚴謹

    第6章 第一行Python代碼
    6.1 跟你的計算機聊天:編程語言
    6.1.1 什麼是編程語言
    6.1.2 從低級語言到高級語言
    6.1.3 編譯和解釋
    6.2 直觀感受不同的編程語言
    6.3 一條可愛的小蟒蛇:Python語言
    6.3.1 主流編程語言
    6.3.2 為什麼選擇Python
    6.3.3 Python的特性
    6.3.4 結合數組與鏈表的優點的列表
    6.4 Python的編輯、運行環境
    6.4.1 順序安裝
    6.4.2 創建項目
    6.4.3 開始編寫第一個程序
    6.5 第一個Python程序:讓Python小蟒蛇動起來
    6.5.1 你好世界
    6.5.2 運行Python程序的幾種方式
    6.5.3 編程語言的基本概念
    6.5.4 Python中的print()函數

    第7章 開始用Python語言編寫程序
    7.1 數據值和數據類型
    7.1.1 數據的抽像和具像含義
    7.1.2 數據類型
    7.2 標識符
    7.3 字面量、變量和常量
    7.4 變量賦值
    7.4.1 賦值的方式
    7.4.2 賦值前無須聲明類型
    7.4.3 賦值後不能隱性轉換類型
    7.5 Python中的數組
    7.5.1 邏輯上的數組
    7.5.2 素
    7.5.3 列表的賦值和復制
    7.6 Python中的流程控制
    7.6.1 用縮進劃分代碼塊
    7.6.2 關鍵字
    7.6.3 Python中的3種控制結構
    7.6.4 不同類型結構的嵌套

    第8章 實現第一個算法並衡量其優劣
    8.1 從最簡單的算法開始學:順序查找
    8.1.1 什麼是查找算法
    8.1.2 查找算法的要素
    8.1.3 順序查找
    8.2 順序查找的數據結構和控制流程
    8.2.1 數據結構
    8.2.2 控制流程
    8.3 用Python實現順序查找算法
    8.3.1 用變量和賦值重繪流程圖
    8.3.2 代碼實現
    8.4 用for語句實現順序查找算法
    8.4.1 Python循環關鍵字:for和while
    8.4.2 用for循環實現順序查找算法
    8.5 如何衡量算法的性能
    8.5.1 時間復雜度
    8.5.2 常見算法的時間復雜度
    8.5.3 空間復雜度

    第9章 簡單但有用的經典查找算法
    9.1 猜數遊戲
    9.1.1 遊戲規則
    9.1.2 不限制猜測次數的遊戲的必勝攻略
    9.1.3 限制猜測次數的猜數遊戲
    9.2 從“挨著找”到“跳著找”
    9.3 二分查找:從原理到形式化描述
    9.3.1 二分查找的原理
    9.3.2 結構化的自然語言描述——流程圖
    9.3.3 形式化描述第一步——變量和賦值
    9.4 二分查找的編程實現
    9.4.1 形式化流程控制
    9.4.2 從流程圖到代碼
    9.5 二分查找的性能
    9.5.1 二分查找的時間復雜度
    9.5.2 二分查找的空間復雜度

    第10章 程序中的函數
    10.1 計算機領域的函數
    10.1.1 編程中的函數
    10.1.2 函數的定義
    10.1.3 函數的調用
    10.1.4 二分查找函數
    10.2 函數的作用
    10.2.1 重用
    10.2.2 抽像和封裝
    10.2.3 從程序之外獲得數據
    10.3 函數的參數
    10.3.1 函數的參數及其值的變化
    10.3.2 Python的函數參數傳遞
    10.3.3 函數參數問題的簡化理解

    第11章 編程實現猜數遊戲
    11.1 用Python實現猜數遊戲
    11.1.1 猜數遊戲與二分查找
    11.1.2 編寫猜數遊戲攻擊者輔助程序
    11.2 修改後的猜數小助手為什麼輸了
    11.3 Bug
    11.4 Bug的天敵——Debug
    11.4.1 什麼是Debug
    11.4.2 常用Debug方法:打印變量中間值
    11.5 和Bug鬥智鬥勇
    11.5.1 Bug的嚴重性
    11.5.2 產生Bug的原因
    11.5.3 防止Bug產生危害的方法

    第12章 二分查找的變形
    12.1 二分查找變形記:重復數列二分查找
    12.1.1 包素數列的二分查找
    12.1.2 包素數列的二分查找的變形
    12.2 讓變形更高效:與經典二分查找相同的時間復雜度
    12.2.1 包素數列的二分查找的時間復雜度
    12.2.2 時間復雜度的計算
    12.2.3 包素數列的二分查找的O(log(n))算法
    12.3 二分查找再變形:旋轉數列二分查找
    12.3.1 有序數列的旋轉
    12.3.2 不包素旋轉數列的二分查找
    12.3.3 算法實現
    12.3.4 代碼優化
    12.4 包素旋轉數列的二分查找

    第13章 認識排序算法
    13.1 處處可見的排行榜
    13.1.1 什麼是排序
    13.1.2 排序算法的江湖地位
    13.1.3 無處不在的排行榜
    13.2 排序算法的分類
    13.2.1 排序算法的分類方式
    13.2.2 比較排序
    13.2.3 比較排序的局限和優勢
    13.3 排序算法的基本操作:兩兩交換數素
    13.3.1 查找算法和排序算法
    13.3.2 兩兩交換數素
    13.3.3 swap()函數
    13.3.4 沒有返回值的swap()函數

    第14章 幾種簡單排序算法
    14.1 撲克牌遊戲
    14.1.1 用撲克牌做一個小遊戲
    14.1.2 排序要解決的問題
    14.1.3 基於直覺的排序算法
    14.2 選擇排序
    14.2.1 算法原理
    14.2.2 數據結構
    14.2.3 算法步驟
    14.2.4 編程實現
    14.3 起泡排序
    14.3.1 歷史
    14.3.2 算法原理
    14.3.3 算法步驟
    14.3.4 編程實現
    14.3.5 算法優化
    14.4 插入排序
    14.4.1 算法原理:又見撲克牌
    14.4.2 在數組素
    14.4.3 算法步驟
    14.4.4 編程實現
    14.5 簡單排序概述
    14.5.1 排序的時間復雜度
    14.5.2 排序的空間復雜度
    14.5.3 簡單排序算法性能總結

    第15章 必須掌握的排序算法
    15.1 快速排序
    15.1.1 一個“笑話”
    15.1.2 算法原理
    15.1.3 算法的江湖地位
    15.1.4 算法步驟
    15.2 快速排序的時間復雜度
    15.2.1 時間復雜度的計算
    15.2.2 最佳時間復雜度
    15.2.3 最差時間復雜度
    15.2.4 平均時間復雜度
    15.2.5 理解快速排序的平均時間復雜度
    15.3 快速排序的空間復雜度
    15.3.1 簡單的分區函數
    15.3.2 優化分區函數
    15.4 解讀分區算法源代碼
    15.4.1 “人肉計算機”法
    15.4.2 打印解讀法
    15.5 編程實現快速排序算法
    15.5.1 分治策略
    15.5.2 快速排序的分與治
    15.5.3 編程實現快速排序算法

    第16章 遞歸實現快速排序
    16.1 遞歸:像“貪喫蛇”一樣“喫掉”自己
    16.1.1 歷史悠久的概念
    16.1.2 無效遞歸
    16.1.3 有效遞歸
    16.1.4 分形
    16.1.5 斐波那契數列
    16.2 遞歸函數
    16.2.1 遞歸和分治
    16.2.2 遞歸函數
    16.2.3 最簡單的遞歸函數
    16.2.4 Python 限制遞歸深度
    16.2.5 限制運行次數的遞歸函數
    16.2.6 遞歸實現斐波那契數的計算
    16.3 實現遞歸式快速排序
    16.3.1 遞歸式快速排序的原理
    16.3.2 遞歸式快速排序的編程實現
    16.3.3 算法性能
    16.4 測試算法程序
    16.4.1 構造測試數據集
    16.4.2 安裝 pip 和用 pip 安裝模塊
    16.4.3 用生成數據測試快速排序
    16.4.4 分區函數帶來的差異

    第17章 算法精進
    17.1 如何算學會了一個算法
    17.1.1 以二分查找為例了解“掌握算法的幾個層次”
    17.1.2 依據掌握的知識解決問題
    17.1.3 學習算法的誤區
    17.2 學會之後——創新
    17.3 如何自學算法
    17.3.1 自學三要素
    17.3.2 學習材料和內容
    17.3.3 學習目的和深度
    17.3.4 學習方法
    17.3.5 如何閱讀代碼
    17.3.6 練習與實踐
    17.4 說說刷題


    查看全部↓

    前言/序言

    筆者第一次接觸編程是20 世紀80 年代,當時參加了宋慶齡兒童活動中心舉辦的一項編程體驗活動,就是照著前面黑板上寫的代碼在現場的機器上敲一遍,然後運行。當時到底用的是什麼語言已經記不清了,但是還記得花費了好大力氣,摸索著敲了一遍完全不清楚其含義的字符串,然後按照說明運行,最終毫無動靜。雖然請教了巡場的工作人員,但他們也不知道是什麼問題,到離場時都沒能讓程序“跑”起來——難道,編程就是要用計算機“寫”一堆“ 密碼”嗎?如果這堆密碼“跑”起來了,又會是怎樣的效果呢?
    初次不成功的體驗後,直到20 世紀90 年代中期,因為學校開設了計算機課,筆者纔再度接觸編程。老師在課堂上講了一點Basic 語言知識,編寫的是a+b=c 之類的程序,然後運行得出結果。筆者由此知道了編程語言,期末考試成績也不錯,但對於編程是什麼,計算機能干什麼,還是不明所以。國外的影視劇中用計算機能做生意,能管理企業,但我們編寫的程序隻能做算術題,這是為什麼呢?
    上大學後,除了編程語言,筆者還學習了“數據結構”、“計算機原理”、“計算機體繫結構”、“編譯原理”、“操作繫統”和“軟件工程”等專業課程,這纔逐漸明白了“編程”這一表面現像背後的體質:算法是怎麼回事,計算機是如何運行的,為什麼我們輸入的靜態字符能夠變成動態的程序,通過其“跑動”來滿足人們的需求……並由此了解到編程其實就是實現算法的過程。
    算法,纔是編程的核心。
    後來進入職場,成了程序員,十幾年一路走來,始終在一線研發崗位,開發過不同類型的實踐項目,在開發過程中不斷學習、揣摩,纔逐漸領悟到抽像算法和現實問題之間的關繫:軟件開發就是通過各種算法實現具體的業務邏輯,把繁雜的過程抽像化、可計算化的過程。
    而軟件開發工作背後的思維邏輯(將一個個具體的問題及其解決方案表達成計算機可以處理的形式,並設計計算的方式,將客觀世界解釋為一個復雜的信息處理過程)則被稱為計算思維,其具體表現如下:
    把一個大問題分解為一個個子問題,然後進一步分解為一個個子子問題……直到無須分解。
    分別執行一個個最小規模的問題。
    按照問題劃分的結構將各個小問題的結果組成整個問題的結果。
    也就是自上而下進行結構化的設計,遇到問題“分而治之,各個擊破”。這種解決問題
    的方法並不是計算機專業獨有的,完全可以脫離編程而存在,並且是各行各業都需要的:
    準備一桌宴席應該怎麼做?先確定總共有幾道菜;然後購買原料,逐一烹調,裝盤上桌——這是分而治之的過程。
    創作一幅漫畫應該怎麼做?先確定故事背景、人物設置;然後構思主題、情節,繪制分鏡頭腳本;最後將每個分鏡頭的草圖通過精描、上色等步驟繪制成成品圖——這也是分而治之的過程。
    舉辦一場學術會議應該怎麼做?先確定主題、主講人、參會群體、場地;然後分頭準備(如邀請主講人、確定演講題目、制定日程)、租用/ 借用場地、協調交通、布置會場;最後招募參會者,注冊、繳費,安排各項活動——這也是分而治之的過程。
    開辦一家餐館應該怎麼做?
    拍攝一部電影應該怎麼做?
    研發一款電動汽車應該怎麼做?
    建設一個高新科技開發區應該怎麼做?
    ……
    計算思維不僅提出了一套解決問題的方法論,而且非常強調實踐性——解決方案不是理論正確就可以,而是要在實際中可行纔可以。
    這個特點是由計算思維的誕生背景所決定的——當計算機科學家處理問題時,除了需要知道如何將一個問題抽像為計算機能夠理解的可計算模型,還要能夠將計算收斂到有限空間中得到結果。如果算法的時空復雜度過大,以當前的算力在有效求解的時間內無法得出結果,那麼再完美的理論算法也無法在現實中奏效。
    世界上的問題有大有小,所需要的資源有多有少,但抽像到最高層面的方法論可以是一致的。計算思維是各行各業都需要的。
    掌握計算思維單靠理論學習是遠遠不夠的,必須經由大量的實踐。編程實踐就是習得計算思維的最佳方式。
    既然要進行編程實踐,學習編程語言和工具的使用方法當然是必不可少的。但語言、工具都隻是皮毛,隨著計算機技術的發展,編程語言日益增加,各種工具日新月異,“保質期”越來越短。而經由現實問題提煉出來的經典算法卻經得起時間的考驗。
    從計算機被發明出來到現在,一些邏輯層面的基礎問題在大多數應用領域都會用到。
    許多應用層繁多的花樣,最終對應的都是共同的基礎問題。計算機領域的科研人員、開發者,在幾十年的工作中,針對一些歷史悠久、應用廣泛、高頻出現的問題,研發出了對應的精致、高效的算法,我們將這些算法稱為經典算法。
    計算機的經典算法也有多種,但其中重要且常用的相對有限,主要有:
    針對序列數據的查找算法和排序算法是基礎。
    針對樹和圖數據結構的各種算法:首先是遍歷算法(深度優先和廣度優先);然後是各種類型的樹結構,以及以計算圖中不同頂點間最短路徑為目的的各種算法。
    若干用於解決數學問題(求最大公約數等)的計算機算法。
    通過對經典算法的研習和實踐,掌握“用數值表達現實事物,用運算描述任務目標,
    再通過算法處理數據找到到達目標的最優路徑”的方法論。如此,既是一種有效的思考力訓練,又是形成計算思維的過程。由此形成的思維能力是內力,而同步掌握的編程技能則屬外功。
    從長遠來看,學習編程可以提升人們的計算思維水平;就近期來看,掌握一門正在日益變得通用的技能非常重要。
    本書針對沒有任何程序設計基礎的讀者,同步講解兩方面內容:使用Python 語言編寫程序;基礎經典算法。由編程學算法,以算法促編程。同時,為了幫助讀者理解算法,本書還介紹了計算機的基礎運行原理。
    在大學計算機專業課程中,本書所介紹的內容往往被拆分在如下幾門課程中:
    程序設計語言(如Python)
    數據結構
    計算機組成原理和體繫結構
    本書將幾個領域的知識融合在一起,從日常事物開始,介紹軟件、程序、算法和編程分別是什麼;然後重點介紹編程的兩大要素,即控制流程和數據結構,並詳細介紹了幾種常見的數據結構(如數組、鏈表、樹和圖),在此過程中,由數據結構的限制和實現引出現代電子計算機的基礎——二進制和馮·諾依曼結構;最後進入算法階段,從最簡單的順序查找開始,一邊介紹算法,一邊介紹它們的編程實現,詳細介紹的經典算法包括順序查找、二分查找、簡單排序(包括選擇排序、起泡排序、插入排序)和快速排序。
    介紹具體算法無法脫離背後的原則,所以本書還介紹了作為快速排序思維基礎的分治策略和引自數學的遞歸等算法策略。為了使零基礎的讀者能夠上手編程,本書從操作角度闡述了編程工具的使用和程序編寫、運行、調試的過程。
    如此安排本書的內容主要源於以下兩點:
    使讀者在接觸編程的最初階段就能夠明確編程的核心是算法,從而將掌握算法策略、原理和過程作為學習重點,而不必將過多精力投入編程語言的語法或工具的操作等 “易過期”的細節上。
    在學習理論算法的同時能夠時刻聯繫實際,使讀者不僅可以理解算法本身在不同應用場景中的優點和缺點,還可以運用算法解決現實中的問題,並培養讀者的計算思維。
    為了寫作本書,筆者專門邀請了兩位零基礎的同學作為學生,按照上述思路,為她們上了為期一年的“算法編程同步學”課程。本書就是根據這門課程的教案整理而成的。在此特別感謝康牧心和任臻同學

    查看全部↓



    "
     
    網友評論  我們期待著您對此商品發表評論
     
    相關商品
    在線留言 商品價格為新臺幣
    關於我們 送貨時間 安全付款 會員登入 加入會員 我的帳戶 網站聯盟
    DVD 連續劇 Copyright © 2024, Digital 了得網 Co., Ltd.
    返回頂部