關於二分法的個人見解

2021-10-10 19:57:49 字數 1220 閱讀 6912

一般而言,我們在使用二分法的時候通常定義乙個low乙個high然後去求mid,在此就出現了第乙個問題:

1. 如何保證在求取過程中不會出現資料的溢位?

我們採用的方法是(high-low)/2+low,其與(high+low)/2得到的結果是一樣的。

2. 在進行二分檢索的時候我們讓mid指標偏向中間的左側還是中間的右側?

在我個人看來,我通常認為偏左側和偏右側一樣,對於偏左側而言無非就是採用如下**:

mid=

(high-low)/2

+low;

if(target) high=mid-1;

else

if(target>a[mid]

) low=mid+1;

else

return

;

對於偏右側而言是採用如下**:

mid=

(high-low+1)

/2+low;

if(target) high=mid-1;

else

if(target>a[mid]

) low=mid+1;

else

return

;

然而,在今天做leetcode上面的乙個題目的時候,我發現並不是這樣的。有時候找到目標之後還不知道當前已經找到目標,需要繼續往下走一步才能知道我們已經找到目標了,如果我們仍然採用上述思想,那我們就需要另外乙個變數去維護上一步的結果,但是如果我們採用下面兩種演算法就不需要額外的變數。

對於中間偏右而言,只需要如下修改**:

while

(沒有找到結果)

return mid;

而對於中間偏左,我們則沒有辦法實現。其實,這種寫法更加具有通用性,即使我們能夠確定當前的mid不是我們要的結果,我們仍然可以把他賦值給low或者high,這樣我們複雜度仍然為o(nlogn)但是卻更加具有普遍性。所以,進行而分檢索的時候我們還是讓mid處於中間偏右的位置更好。

個人感覺:(在做一些其他演算法的時候似乎也是在中間有兩個數的時候選擇右側的似乎更好一些。)

關於ROS的個人見解

ros只是乙個程式開發框架而已,它主要有以下東西組成 1 ros執行環境,主要負責全域性資訊 訊息傳遞 名稱管理。2 ros專用函式庫,主要是規定ros各種規則 通訊 管理全域性資訊。3 各種能重複利用的package 4 一些方便開發的工具 ros本身執行在linux中 用ros開發框架,開發出來...

關於CAP的個人見解

在集群環境下,保證各個節點的資料在任一時刻訪問都是一致的 在集群環境下,保證任一時刻都能保證服務可用 在集群環境下,當部分服務不可用時,整體服務對外依舊可用,但分割槽容錯性理論來講不能達到100 的可能,因為既然是分布式,就會存在諸如網線之類的各種通訊故障問題,嚴格來講,只能說達到99.9999 網...

關於漏洞提交的個人見解

本文章僅以cnvd cnnvd cve三個大型公益平台為例,關於src另外再說,主要圍繞著漏洞挖掘 如何提交 如何拿到證書以及編號等,問題進行闡述.關於cve的闡述 首先說下國際性質的cve,個人認為cve最簡單也是最好拿到cve編號的漏洞大多數是cms,當然我這裡指的是小眾化的,一般大型cms例如...