python-題庫篇-為什么數組下標從0 開始而不是 1

為什么很多編程語言要把 0 作為第一個下標索引,而不是直觀的 1 呢?

這個問題 Dijkstra 已經解答過了,沒錯,就是你知道的 Dijkstra,Dijkstra 最短路徑算法,荷蘭語全名是 Edsger Wybe Dijkstra,于 1972 年獲得了圖靈獎,除了上面說的最短路徑算法,還有眾所周知的信號量和 PV 原語、銀行家算法等也是這位巨佬提出的。
原文在這里:https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

首先來看個案例

如何用一個不等式(或者說表達式)來表示[2,3,4,5,6,7,8,9,10,11,12]這個連續的整數序列(一共 11 個數)?

假設i是一個整數,那么我們能夠迅速地寫出如下四個符合上述連續序列的不等式:

1)2 <= i < 13(不等式1)

2)1 < i <= 12(不等式2)

3)2 <= i <= 12(不等式3)

4)1 < i < 13(不等式4)

以上四個不等式均滿足要求,那是否有理由選擇其中的一種而不是另一種?

Dijkstra 說有理由的,選 1 和 2,因為這倆不等式有個很突出的優點,就是不等式邊界的差(不等式右邊 - 不等式左邊)正好等于連續序列的長度。

這里可以排除掉 3 和 4,那么 1 和 2 該如何選出最優的表示?

1 和 2 不等式的區別

  • 1 不等式左邊(下界)等于序列中的最小值,不等式右邊(上界)大于序列中的最大值

  • 2 不等式左邊(下界)小于序列中的最小值,不等式右邊(上界)等于序列中的最大值

對于第 2 個不等式來說,下界小于序列中的最小值,這會出現一個問題,比如我們的連續序列是 [0,1,2,3,4]

那么按照第 2 個不等式的寫法,不等式的左邊就是 -1,-1是非自然數,而我們需要表示的連續序列是自然數序列,所以第 2 個不等式很不優雅:我們需要用一個 非自然數 來作為 全是自然數的序列 的下界。

因此,綜上所述,不等式 1 是最優雅的選擇。

那么,選出一個看著非常順眼的不等式來表達長度為 N 的連續序列之后,下一個令人煩惱的問題是該為起始元素分配什么下標值?

遵循不等式 1 的規則:
當從下標 1 開始時,下標范圍 1 ≤ i < N+1
當從下標 0 開始時,下標范圍 0 ≤ i < N
哪個更優雅?

Dijkstra 是這樣解釋的:從下標 0 開始能夠給出更好的不等式,因為元素的下標就等于序列中它前面的元素數(或者說 “偏移量”)。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/23049.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/23049.shtml
英文地址,請注明出處:http://en.pswp.cn/web/23049.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

定制高溫隧道爐,如何判斷質量好壞

在現代工業生產中&#xff0c;高溫隧道爐扮演著不可或缺的角色。對于特定工藝要求&#xff0c;如陶瓷燒制、金屬熱處理等&#xff0c;定制化的高溫隧道爐更是不可或缺。然而&#xff0c;面對市場上琳瑯滿目的產品&#xff0c;如何判斷高溫隧道爐的質量好壞成為了企業決策者面臨…

js終止遞歸

終止遞歸 1. 實現目標&#xff1a;js 編寫遞歸方法 查找指定節點&#xff1b; 2. 需解決問題&#xff1a;找到所需節點后&#xff0c;遞歸不會終止&#xff0c;直到所有節點遍歷完成后才會停止&#xff0c;會消耗性能 3. 解決方案&#xff1a;優化遞歸方法&#xff0c;在找到…

解決vscode終端不顯示conda環境變量名稱問題【詳細步驟!實測可行!!】

最近在使用Visual Studio Code (VSCode) 時候&#xff0c;發現終端沒有正確顯示激活的conda環境名稱&#xff0c;搜了一下&#xff0c;找到原因&#xff0c;記錄一下&#xff0c;如果有人也遇到同樣的問題&#xff0c;可以收藏一下。 ??分別兩種情況&#xff0c;一是windows系…

一周學會Django5 Python Web開發 - Django5內置Auth認證系統-用戶登錄實現

鋒哥原創的Python Web開發 Django5視頻教程&#xff1a; 2024版 Django5 Python web開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 Django5 Python web開發 視頻教程(無廢話版) 玩命更新中~共計57條視頻&#xff0c;包括&#xff1a;2024版 Django5 Python we…

JVM學習-內存泄漏

內存泄漏的理解和分類 可達性分析算法來判斷對象是否是不再使用的對象&#xff0c;本質都是判斷一上對象是否還被引用&#xff0c;對于這種情況下&#xff0c;由于代碼的實現不同就會出現很多內存泄漏問題(讓JVM誤以為此對象還在引用&#xff0c;無法回收&#xff0c;造成內存泄…

旭日X3與英偉達Orin NX通過TCP傳輸圖片

觀前提醒&#xff1a;本文主要內容為使用Python在局域網內建立TCP連接并傳輸圖片信息&#xff0c;計算機為一塊旭日X3和一塊英偉達Orin NX。 一、什么是TCP TCP&#xff08;傳輸控制協議&#xff09;是一種可靠的、面向連接的協議&#xff0c;它確保數據包的順序傳輸和完整性…

關于教務排課的那些事

在辦學過程中&#xff0c;你是否被如下問題困擾&#xff1f; 1、排課功率低&#xff1a; 為了確保師資資源得到充分利用&#xff0c;教務教師排課要求了解每一個全職和兼職教師&#xff0c;了解每一個人的時刻組織和帶班狀況&#xff0c;因而在排課的時分需求處理很多的信息&a…

【Java數據結構】二叉樹詳解(四)

&#x1f512;文章目錄&#xff1a; 1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.給定一個二叉樹, 找到該樹中兩個指定節點的最近公共祖先 2.1第一種思路 2.2第二種思路 3.根據一棵樹的前序遍歷與中序遍歷構造二叉樹 4.根據一棵樹的中序…

vite相關配置

1、vite開發環境和生產環境的環境變量配置 1、環境變量配置 vite本身會直接讀取為什么會讀取&#xff0c;因為含有dotenv第三方庫 &#xff0c;會直接讀取 .env文件&#xff0c; 2、css模塊化簡單處理 css:{modules:{localsConvention: "camselCaseOnly" // 打包配…

機器學習_決策樹與隨機森林

決策樹是一種常用的監督學習算法&#xff0c;既可以用于分類任務也可以用于回歸任務。決策樹通過遞歸地將數據集劃分成更小的子集&#xff0c;逐步建立樹結構。每個節點對應一個特征&#xff0c;樹的葉子節點表示最終的預測結果。構建決策樹的關鍵是選擇最佳的特征來分割數據&a…

圖文型LED顯示屏的結構與安裝

隨著科技的不斷進步&#xff0c;LED顯示屏已成為商業廣告、公共信息顯示等領域不可或缺的一部分。圖文型LED顯示屏以其獨特的優勢和多樣化的應用場景&#xff0c;受到了市場的廣泛歡迎。本文將詳細介紹圖文型LED顯示屏的結構特點、工作原理以及安裝指南。 1、圖文型LED顯示屏的…

Python項目開發實戰:看圖猜成語小程序(案例教程)

一、項目背景與概述 在現代社會,隨著智能手機的普及和移動互聯網的快速發展,移動應用(App)已經成為人們日常生活中不可或缺的一部分。看圖猜成語作為一種集知識性和娛樂性于一體的游戲,深受大眾喜愛。本項目旨在開發一個基于Python的看圖猜成語小程序,讓用戶能夠通過簡單…

跨境電商|Facebook Marketplace怎么做?

2016 年&#xff0c;Facebook打造了同名平臺 Facebook Marketplace。通過利用 Facebook 現有的龐大客戶群&#xff0c;該平臺取得了立竿見影的成功&#xff0c;每月訪問量將超過 10 億。對于個人賣家和小企業來說&#xff0c;Facebook Marketplace是一個不錯的銷貨渠道&#xf…

Java內部類、枚舉類、注解類

Java 是一種面向對象的編程語言&#xff0c;它支持多種類型的類&#xff0c;包括內部類、枚舉類和注解類 一、內部類&#xff08;Inner Class&#xff09;&#xff1a; 內部類是定義在另一個類內部的類。它可以訪問外部類的成員&#xff08;包括私有成員&#xff09;&#xff…

AIGC在移動APP開發中的應用及未來前景

隨著科技的不斷進步&#xff0c;人工智能生成內容&#xff08;AIGC&#xff0c;Artificial Intelligence Generated Content&#xff09;在移動應用開發中的應用越來越廣泛。AIGC不僅能提高開發效率&#xff0c;還能帶來更好的用戶體驗。本文將探討AIGC在移動APP開發中的應用及…

通過ssr-echarts,服務端生成echarts圖

ssr-echarts &#xff1a;一個開源項目&#xff0c;它能夠服務端渲染 ECharts 圖表&#xff0c;并直接生成 PNG 圖片返回。該項目提供了多種主題&#xff0c;并且支持 GET 和 POST 請求。如果參數較多&#xff0c;建議使用 POST 方法。用戶可以自己部署這個服務。 1. 服務端安裝…

Three.js-實現加載圖片并旋轉

1.實現效果 2. 實現步驟 2.1創建場景 const scene new THREE.Scene(); 2.2添加相機 說明&#xff1a; fov&#xff08;視場角&#xff09;&#xff1a;視場角決定了相機的視野范圍&#xff0c;即相機可以看到的角度范圍。較大的視場角表示更廣闊的視野&#xff0c;但可能…

第 10 章 nodelet(自學二刷筆記)

重要參考&#xff1a; 課程鏈接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 講義鏈接:Introduction Autolabor-ROS機器人入門課程《ROS理論與實踐》零基礎教程 10.4 nodelet ROS通信是基于Node(節點)的&#xff0c;Node使用方便、易于擴展&#xff0c;可以滿足ROS中大多…

SBOM是如何幫助醫療器械制造商提高產品透明度的?

SBOM&#xff08;軟件物料清單&#xff09;通過以下方式幫助醫療器械制造商提高產品透明度&#xff1a; 1. 詳細記錄軟件組成 SBOM詳細列出了醫療器械所使用的所有軟件組件、版本、作者、許可證信息等。這使得制造商能夠清晰地了解產品的軟件組成&#xff0c;包括每個組件的來…

基于springboot實現民族婚紗預定系統項目【項目源碼+論文說明】

基于springboot實現民族婚紗預定系統的設計演示 摘要 現代經濟快節奏發展以及不斷完善升級的信息化技術&#xff0c;讓傳統數據信息的管理升級為軟件存儲&#xff0c;歸納&#xff0c;集中處理數據信息的管理方式。本民族婚紗預定系統就是在這樣的大環境下誕生&#xff0c;其可…