日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何判断两个时间段是否有交集

發(fā)布時(shí)間:2023/12/1 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何判断两个时间段是否有交集 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

給定兩個(gè)左閉右開時(shí)間段 [A, B)、[X, Y),如何判斷它們是否有交集?

由于時(shí)間可以轉(zhuǎn)換為時(shí)間戳,時(shí)間戳是一個(gè)數(shù)字,所以我們可以將問題轉(zhuǎn)換為:如何判斷兩個(gè)左閉右開的數(shù)字區(qū)間是否有交集。

結(jié)論是如果 X < B AND A < Y,那么有交集,證明過程見下方。

數(shù)軸示意圖

這是一個(gè)不完善的、不容易思考的證明。

我將他們想象成數(shù)軸上的兩段:

-------A.------B。------X.-------Y。------“.” 表示閉區(qū)間,“。”表示開區(qū)間。

然后令 [A, B) 不動(dòng),向左一直移動(dòng) [X, Y)。先是 X 進(jìn)入 [A, B),然后是 X 離開 [A, B),Y 進(jìn)入 [A, B)。所以只要 X 或 Y 在 [A, B) 間,那么兩者有交集。

上述算法遺漏了兩種情況,[X, Y) 完全在 [A, B) 中或者[A, B) 完全在 [X, Y) 中:

[X, Y) 完全在 [A, B):

-----A.-----X.----Y。----B。-----

所以這種證明方法不好,雖然比較形象,但是因?yàn)樽兞刻?#xff0c;容易遺漏。

使用排列組合[1]

使用排列組合獲取所有的可能情況,并定義當(dāng)前數(shù)小于等于下一個(gè)數(shù)字(因?yàn)檫@樣定義就能包含所有的情況):

Python 代碼:

from itertools import permutationsfor x in list(permutations('ABXY')):# 由于 A < B,X < Y,所以 A 的位置一定在 B 前面,X 的位置一定在 Y 前面if x.index('A') < x.index('B') and x.index('X') < x.index('Y'):print(x)

上方的輸出為:

('A', 'B', 'X', 'Y') # 因?yàn)? [A, B) 的最大值 < B 然后 B < X,然后 X 是 [X, Y) 的最小值,所以 [A, B) 的最大值小于 [X, Y) 的最小值,所以兩者無交集。 ('A', 'X', 'B', 'Y') # 當(dāng) X = B 時(shí),無交集,其余情況有交集。 ('A', 'X', 'Y', 'B') # 有交集 ('X', 'A', 'B', 'Y') # 有交集 ('X', 'A', 'Y', 'B') # 當(dāng) A = Y 時(shí),無交集,其余情況有交集 ('X', 'Y', 'A', 'B') # 無交集,與第一個(gè)的證明類似

所以無交集的所有可能情況是,A <= B <= X <= Y、X = B、A = Y、X <= Y <= A <= B。由于 A < B、X < Y,所以只要 B <= X,那么 A <= X,所以 A <= B <= X <= Y 變?yōu)?B <= X <= Y,同理可得 X <= Y <= A <= B => Y <= A <= B。去除條件自帶的 A < B、X < Y 的情況后,為 B <= X、X = B、A = Y、Y <= A,由于 B <= X 包含 X = B,Y <= A 包含 Y= A,所以 B <= X 或 Y <= A,對(duì)其取反,得到有交集的情況:X < B AND A < Y。

這里的證明是通過排列組合,獲取了所有的情況,然后從整理所有沒有交集的情況(更少的情況),然后推導(dǎo)出規(guī)律。

參考

  • http://world.std.com/~swmcd/steven/tech/interval.html
  • 轉(zhuǎn)載于:https://www.cnblogs.com/jay54520/p/9405132.html

    總結(jié)

    以上是生活随笔為你收集整理的如何判断两个时间段是否有交集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。