博弈論 | 博弈論簡談、常見的博弈定律、巴什博弈

文章目錄

  • 博弈論
    • 什么是博弈論?
    • 博弈的前提
    • 博弈的要素
    • 博弈的分類
    • 非合作博弈——有限兩人博弈囚徒困境
    • 合作博弈——無限多人博弈囚徒困境
  • 常見的博弈定律
    • 零和博弈
    • 重復博弈
    • 智豬博弈
    • 斗雞博弈
    • 獵鹿博弈
    • 蜈蚣博弈
    • 酒吧博弈
    • 槍手博弈
    • 警匪博弈
    • 海盜分金
  • 巴什博弈


博弈論

什么是博弈論?

我個人的理解是,通過分析與事情有關的所有元素,在力所能及的范圍內尋求最好的結果 ,前半句即博弈,后半句為博弈的意義。

博弈的深層意義在于,所得的最優策略與對手在博弈中的操作沒有依存關系。簡言之,其理性思想就是 抱最好的希望,做最壞的打算。


博弈的前提

博弈理論假定參與博弈的人必須是理性的,理性的人在博弈過程中會將 自身利益最大化 作為目標。其實這未必不是博弈的局限性,記得前段時間看到的一篇博客很有意思:在一個狼吃羊的AI智障游戲中,狼發現自己吃不到羊,直接選擇了「自殺」。然而,狼選擇撞石的原因竟是「自殺分數高」!(全文在這里)

出現自殺這一博弈結果的主要原因當然是在訓練過程中將分數設置成了權重最大的項,甚至重于生命,但也側面印證了 局中人的絕對理性


博弈的要素

博弈需要具備的要素通常有五個方面:

局中人

兩人博弈 or 多人博弈

策略

  • 有限博弈:每個參與人明確的知道交易次數。不用給自己留后路,此種博弈下信譽沒有保障。
  • 無限博弈:每個參與人不知道博弈會在什么時候停止,誰都考慮為自己留后路。此種博弈中妥協會比較多,信譽也比較好。

得失

局中人博弈的得失與兩個因素相關:一是其自身所選定的策略,二是其他局中人所選定的策略。每個局中人在博弈結束時的得失可根據所有局中人選定的一組策略函數來判定,這個函數稱為 支付函數

次序

  • 動態博弈:局中人的行動有先后順序,且 后做出選擇的人 知道 先做出選擇之人 的行動。
  • 靜態博弈:局中人同時選擇要采取的策略。或者 后做出選擇的人 不知道 先做出選擇之人 的行動。

均衡

博弈通常都有一個 穩定的結果 ,謂之均衡,或稱平衡。


博弈的分類

上面講到的 動態博弈 與 靜態博弈 的劃分;有限博弈 與 無限博弈 的劃分。都是博弈的分類方法。而經濟學中通常將博弈分為:非合作博弈 和 合作博弈。

非合作博弈比合作博弈更簡單,理論也更成熟。根據復合特征來劃分,非合作博弈可分為四類:

  • 完全信息靜態博弈: 對應的均衡概念是 納什均衡

  • 完全信息動態博弈: 對應的均衡概念是 子博弈精煉納什均衡

  • 不完全信息靜態博弈: 對應的均衡概念是 貝葉斯納什均衡

  • 不完全信息動態博弈: 對應的均衡概念是 精煉貝葉斯納什均衡

  • 完全信息博弈:每位參與者都能準確地知道所有其他參與者的行為,以及整個博弈結構;

  • 不完全信息博弈:在這類博弈中,每位參與者對所有其他參與者的信息不夠了解,或不了解整個博弈結構。


非合作博弈——有限兩人博弈囚徒困境

在上文中提到,博弈的意義在于找到 最好結果,但要明白的是,在 有限博弈 中,這個最好結果是是個人最優解而非團體最優解。也就是 在保障自身利益的前提下,每個人的策略都是對其他人的策略的最優反應。 我們通過 約翰·納什 創造的 囚徒困境 博弈故事進一步解釋:

  • 兩個共謀犯罪的人被關入監獄,不能互相溝通情況。如果兩個人都不揭發對方,則由于證據不確定,每個人都坐牢五年;
  • 若一人揭發,而另一人沉默,則揭發者因為立功而坐牢一年,沉默者因不合作而判十年;
  • 若互相揭發,則因證據確鑿,二者都判刑八年。

雖然對于團體而言最優解是大家都不揭發對方,然而對于囚徒而言:

  • 如果對方沉默,自己揭發的話判一年、沉默的話判一年,揭發更好;
  • 如果同伙揭發,自己揭發的話判八年、沉默的話判十年,揭發更好。

這個結果說明了 納什平衡 的存在,即在非合作博弈中存在一個均衡解,這個解可使博弈雙方的利益都獲得保障,這個解并非團隊最優解,卻是個人最優解。

囚徒困境是一個 非合作博弈 ,原因在于博弈次數只有一次,即有限博弈。有限博弈下,無論之前選擇了多少次合作,最后一次局中人必然會選擇背叛對方以尋求個人利益最大化,可以理解為:

  • 如果不是最后一次博弈,你背叛人家的話人家一定會報復你,對方也一樣,大家都怕背叛對方的話下一次博弈中對方的報復,導致本來可以拿到的團隊最優解拿不到了。
  • 但如果是最后一次博弈的話,萬一對方背叛你,你就沒有報復機會了,那不如我先報復他。

但是,如果是 無限博弈 ,并且是 多人博弈 的話,就會呈現 合作博弈


合作博弈——無限多人博弈囚徒困境

在上一個囚徒困境的基礎上,如果抓緊來的是犯罪團伙,并且不告訴它們要審問他們多少次,只告訴他們還是剛才的規矩,不過每個人的坐牢時間是根據每次審訊結果累加。在這種情況下,囚徒們就會意識到:如果持續選擇都沉默,大家一起每輪多坐五年牢;如果持續選擇彼此揭發,大家每輪多坐八年牢。通過這樣的思考,參與者之間合作的動機就非常明顯了。

針對 無限多人博弈 ,羅伯特·阿克塞爾羅德制定了類似的實驗,最終取得 最好結果(對于變種囚徒困境而言就是坐牢時間最少的囚徒,阿克塞爾羅德的實驗中是得分最高的程序) 的程序一般具有三個特點:

  • 善良性:從不主動背叛別人;
  • 可激怒性:對于別人的背叛會進行報復;
  • 寬容性:對于別人的背叛不會無休止的報復。

這種一報還一報的策略不僅優秀而且清晰,其特性通常在幾次博弈后就能被清晰地辨識出來(其他程序:這個程序是個狼滅,不好惹,只有主動和他合作才能贏!),而其他復雜的策略并沒有得到優秀的結果,對手無法總結與其相處的規律。

羅伯特·阿克塞爾羅德的研究揭示了合作的必要條件:

  1. 博弈要持續進行下去,參與者在一次或幾次的博弈中是找不到合作動機的;
  2. 要對對手的行為做出回報,這個回報可以是好的,也可以是壞的,若一個人永遠選擇合作,那么是不會有太多人與他合作的。

常見的博弈定律

零和博弈

零和博弈是最常見的博弈,零和博弈屬于非合作博弈。即參與博弈賽局的雙方,在嚴格遵守博弈規則的前提條件下,若是其中一方可以獲得利益,也就意味著另一方的利益必然受損。所以,博弈雙方的收益和損失之和永遠為零,即博弈雙方不存在合作的可能。

與之對應的是 合作雙贏,即在某種程度上保證雙方達成 利己且不損人 的合作關系。通常是因為在零和博弈中雙方都沒有很大把握能一定勝出、而失敗的成本太大的情況下。


重復博弈

通過兩種囚徒困境的探討,我們發現當博弈僅進行一次,人們往往更加關心它的最終結果;當博弈重復多次,人們將舍棄眼前利益而選取更長遠的利益,即如單次博弈結果的利益讓步與總體博弈結果的利益。影響重復博弈最終結果的因素,主要是重復博弈所進行的次數以及信息的完整性。

可以將重復博弈總結成三個基礎特征:

  1. 在進行重復博弈的過程中并沒有結果上的關聯,簡言之就是 上一個階段所進行的博弈,并不會改變接下來所要進行的博弈結構。
  2. 在進行重復博弈的每個階段,所有的參與者都能夠看到前面的參與者所做出的決策。
  3. 對于參與重復博弈的參與者而言,他們所獲得的收益是在每個階段所獲得收益的加權平均數。

智豬博弈

智豬:有智慧的豬,哼哼~

智豬博弈是納什理論中的一個經典例子。若一個豬圈里有一頭大豬,還有一頭小豬,在豬圈的一邊有一個投放飼料的豬槽,豬槽旁邊安放著一個可以控制豬槽投食量的按鈕,假設我們按一下這個投食按鈕,豬槽內便會出現 10 個單位的豬食,但是想要按這個按鈕,則需要拿出 2 個單位的豬食作為成本。在此種情況下,

  • 假設大豬先走到豬槽邊,它跟小豬的進食量之比為 9:1
  • 假設大豬和小豬同時到達豬槽,它們的進食量之比則為 7:3
  • 若是小豬先走到豬槽,那么它們的進食量之比則為 6:4

若是兩頭豬都非常有智慧,那么小豬便會在豬槽邊等待著。

  • 若是小豬去按投食開關,大豬在豬槽邊等待,那么大豬小豬的進食量之比為 9:1 ,這樣計算得出小豬最后的凈收益為吃掉的 1 個單位減去按開關損失的 2 個單位(1-2=-1)單位的豬食。
  • 即當大豬去按下按鈕時,大豬小豬的進食量之比為 6:4,扣除按開關所需要的 2 個單位的豬食,大豬最終得到的只有 4 個單位的豬食;
  • 若是小豬和大豬同時去按開關,同時到達豬槽,那么它們所獲得豬食的比例為 1:5 (減去按開關的成本)。
  • 假設兩頭豬不去按開關,那么他們的純收益都將為 0

而對于博弈中的劣勢方小豬來講,自己去按開關,得到的純收益必定是 -1,但是如果自己不去按開關,一、大豬按開關,得到的純收益為 4。二、大豬也不按開關,兩只豬的純收益都是 0 .由此看來,不論大豬是選擇主動行動還是等待,小豬都選擇等待的收益要高于選擇行動所獲得的利益,這便是小豬在此次博弈中的占優策略。

通常將小豬的這種方法稱為 坐船搭便車 ,暗示人們在博弈中如果占據劣勢,且時間損失不會對最終受益造成影響時,等待也是一種明智之舉。


斗雞博弈

Chicken Game 又名懦夫博弈。假定這樣一種情景:狹路相逢,

  • 一方后退、另一方前進,稱前進一方勝利;
  • 兩方都后退,則稱平局;
  • 兩方都前進,則都失敗。

這種博弈思想的價值,私以為在于進一步證明納什均衡原理。在此博弈中,有兩個納什均衡點:A 進 B 退;A 退 B 進。

納什均衡點:其他參與者策略保持不變時,當前參與者的選擇是最優的,這樣就組成了一個混合收益最大化的策略組。


獵鹿博弈

最早出現在盧梭的《論人類不平等的起源和基礎》一書中,又名安全博弈、協調博弈。

獵鹿博弈源于一則故事:在一個村莊中有兩個獵人,這個村莊主要有兩種獵物:鹿和兔子。一個獵人只能捕捉到 4 只兔子,如果兩個獵人合作就能捕到 1 只鹿。而站在填飽肚子的角度看,捕到 4 只兔子能夠成為 4 天的食物,但是 1 只鹿足以讓兩個獵人在 10 天內都不用外出捕獵。

由此一來,這兩個獵人的行動策略就會產生兩個納什均衡點,即:

  • 兩個獵人單獨行動,每個人獲得4只兔子,并且每人能夠吃飽4天;
  • 或者兩個獵人建立合作,那么每個人可以吃飽10天。

雖然兩個獵人合作可以獲得的收益遠超單獨行動的收益。但是這要求兩個獵人在合作過程中,個人能力和付出是相等的。(能力不等的情況下大家都是理性人,當然會要求付出多的收獲占比多啦。)


蜈蚣博弈

蜈蚣博弈的提出者是羅森塞爾,它指參加博弈的 AB ,分別有 合作、背叛 兩種策略可供選擇。規則是 A 先進行選擇,再由 B 做出選擇,再輪 A 做出選擇……

舉個例子,如果雙方需要博弈十輪:
在這里插入圖片描述
網上的資料中沒有對收益結果進行解釋,所以我一直對最后一次不合作的結果是 (8,11)而不是(9,11)而感到困惑,我個人分析收益是這樣計算的:

  • 根據第一輪 A 就不合作雙方的收益仍是(1,1)可以推測博弈開始前,雙方手里就各有一個籌碼。
  • 根據第一輪 A 合作、B 不合作雙方的收益是(0,3),會發現 A 手里的一個籌碼沒了,但 B 多了兩個籌碼。

因此合作的前提可能是 A、B 都拿出來一個籌碼,如果雙方選擇合作則都收獲一個籌碼,之前拿出來的籌碼也可以收回;如果 A 選擇背叛則 B 不需要拿出來籌碼,博弈結束;如果 B 選擇背叛則 A 失去它拿出來的籌碼,B 自己獲得兩個籌碼。

如果一直合作,那么最終總體收益可達最大值 20 ,但根據理性人原則,B 會在最后一輪博弈中選擇背叛,以拿到 11 的收益,大于選擇合作的 10 收益。那么 A 亦會在 B 選擇背叛前先背叛,那么它就能拿到 9 收益,大于 B 背叛時的 8 收益……以此類推,得到的答案是 A 會在剛開始就選擇不合作,那么 AB 所獲得的最終收益是 1

蜈蚣博弈的悖論

不難看出,在上面的推理過程中,運用的是逆推法。從邏輯推理來看,逆推法是嚴密的,但結論是不合理的。雖然 A 一開始采取合作性策略有可能獲得 0 ,但 1 或者 010 相比實在是很小。直覺告訴我們采取 合作 策略是好的。而從邏輯的角度看,A一開始應選擇 不合作 的策略。人們在博弈中的真實行動偏離了運用逆推法關于博弈的理論預測,造成二者間的矛盾和不一致。


酒吧博弈

假設有 100 個人都喜歡去酒吧消遣娛樂,若我們設定酒吧的座位數是 60,那么想要去酒吧的人便會有兩種決策:一種是不去,待在家中,另外一種是去。假設所有的人都去酒吧,那么去酒吧的人就會感到不舒服,而這時他們會覺得待在家中要比去酒吧更好。那么,這 100 個喜歡去酒吧的人最終將會做何選擇呢?

其實這些喜歡去酒吧的人,往往會受上一次酒吧人數的影響,進而產生一些人數上的浮動,久而久之便會形成一種持續性波動的情況。這是由切斯特·艾倫·阿瑟博士提出的,他的理論如下:

  • 假設每個想要去酒吧的人都是理性的,那么酒吧每天接待的人數幾乎不會有過大的浮動。就會產生 神奇的 60% 客滿率定理 ,即當人們選擇去酒吧時,最初的觀察結果并未找到任何規律,但是通過長時間的觀察發現,每次去酒吧的人數和不去酒吧的人數之比接近 60:40
  • 但是人并不總能保持理性,當人們在第一次去酒吧時,若發現酒吧人數非常多,那么這種現象會成為他們下次選擇的一個參考,他們會認為酒吧人數太多、十分擁擠、喧鬧,大部分下次就不來了,但是少數人可能會選擇下次依然去酒吧,這時他們發現酒吧的人數并不多,然后便會在下一次叫上自己的朋友一起去酒吧,由此一來循環便正式開始了。

從心理學的角度來看,最初去酒吧的那些人可能互相不熟悉,但是由于經常去酒吧而且能夠遇見對方,久而久之便會由陌生人變成朋友,那么在這種情況下,便會由零散的個體變成一個大的群體,而這個整體中又會分支出小團體,而且這些小團體中的人,有一部分會占據主導地位,另一部分人會處在服從地位。這就意味著團體中的每個人的決策都會受到他人的影響。


槍手博弈

槍手博弈是指,槍手甲乙丙三人相互怨恨,以決斗的形式進行一場博弈。其中,甲的槍法最準,命中率 80%。乙的槍法在甲之下,命中率 60%。丙的槍法最差,命中率 40%。假設在三人都了解彼此實力并能理性判斷的情況下,會出現以下兩種情況:

  1. 三人同時開槍,誰活下來的可能最大?
  2. 若由丙開第一槍,隨后輪流開槍,他會如何選擇?

第一種情況:

  1. 第一輪:
  • 甲:最佳的策略是先對準乙,因為乙的槍法比丙好。
  • 乙:最佳的策略是先對準甲,因為三人中甲的槍法最準,這樣,在乙丙兩人中,乙活下來的概率更大。
  • 丙:同樣也會先解決槍法最準的甲,干掉甲后再考慮如何應對乙。

現在我們可以分別計算三人活下來的概率:

  • 甲活:即乙和丙都未命中。兩人都射偏的概率為:40%×60%,所以甲活下來的概率為 24%
  • 乙活:即甲射偏。甲有 20% 的未命中率,就相當于乙的存活率為 20%
  • 丙活:根據上面的分析,在這一種情況下,沒有任何人對準丙,因此丙的存活概率為 100%

由此我們可以看到,在這一輪的決斗中,丙槍法最差但活下來的概率卻最大。而甲和乙的槍法都遠大于丙,存活率卻都比丙低。

  1. 第二輪:

第一輪過后,有三種情況:

  • 若甲乙中有一方打偏,那么丙會面對甲或乙;
  • 若都打偏,那丙將同時面對甲乙兩人;
  • 甲乙都命中,甲乙皆死。

現在我們可以分別計算三人活下來的概率:

  • 如果丙只面對甲或乙,那丙的存活率最低。
  • 如果同時面對甲乙兩人,則返回第一輪的場景。
  • 如果甲乙皆死,那么無疑丙最終存活。

第二種情況:

由丙先開第一槍,那么可能如下:

  • 丙射中甲:乙與丙對決,且只能由乙先開槍,丙會處于不利位置。
  • 丙射中乙:同上,甲的命中率最高,丙的處境會更糟。
  • 丙都未射中的話:甲乙都不會選擇先射擊丙,而是會在甲乙雙方之間一決勝負,直至其中一人死亡,而這時就會又輪到丙。可以這樣說,只要丙誰都不打中,在接下來的對決中他就處于相對而言最有利的位置。

我們會發現,優勢最小的丙,反而可能是不是最先死掉的,因此,在多方非合作博弈中,優勢最小的往往可以在暫時安全的環境下,抓緊機會提升自己。當然,如果不能在暫時安全的環境下提升能力的話,當面對雙人非合作博弈時,難免處于失敗者的位置。簡言之,實力最差的并不一定是輸的最快的,但終究是需要提升自我的,否則即使能安全一時、但仍然難免落入敗局。


警匪博弈

在某個小鎮上只有一名警察,整個小鎮的治安全部由他負責。此時,我們假設這個小鎮上的一頭有一家銀行,存了 2 萬元;而小鎮的另一頭有一個酒館,存了 1 萬元。若這個小鎮上還有一名小偷,當這個小鎮上的警察在小鎮的一頭巡視時,小偷只能去小鎮的另一頭進行偷盜。

假想一下,當小鎮的警察正好在小偷采取行動的地方巡視,便能不費吹灰之力地抓住小偷;若是小鎮的警察的巡視方向恰好與小偷采取偷盜行為的方向相反,那么小偷便能在不被警察抓到的情況下成功偷盜。那么如何才能將小鎮的損失降到最低呢?

警察最好的做法是利用抽簽的方式決定去小鎮的銀行還是酒店。由于小鎮銀行中所需保護的財產是酒館的兩倍,因此用 1、2 號兩個簽表示小鎮的銀行,用 3 號簽表示酒館,這樣一來,警察去銀行巡視的機會將達到 2/3,而去酒館巡視的機會將是 1/3

在小鎮警察的此種策略下,小偷的占優策略則要與警察相反,同樣采用抽簽的方式,與警察不同的是小偷用 1、2 號簽表示去酒館行動,而用 3 號簽表示去銀行,由此一來,小偷去酒館行動的概率是 2/3,而去銀行的概率僅有 1/3

如果雙方都選擇最佳占優策略的話,警察和小偷的成功率是相等的(過程有些繁瑣,可選擇跳過),分析如下:

如果警察和小偷都是理性人的話,警察可以猜到小偷的概率,小偷也可以猜到警察的概率。

  • 雙方如果單純都是第一層的話,警察成功概率 2/3*1/3+1/3*2/3=4/9,小偷成功概率 1-4/9=5/9
  • 但是如果警察在第二層(警察反概率行動),小偷在第一層,警察成功概率 1/3*1/3+2/3*2/3=5/9,小偷成功概率 1-5/9=4/9
  • 警察在第一層,小偷在第二層,那么和上一個情況一樣,警察成功概率 5/9,小偷成功概率 4/9
  • 雙方都是第二層(都以相反概率行動),警察成功概率 4/9,小偷 5/9

最后相加綜合期望,雙方成功概率都為 1/2。(這波啊,這波疊加就是千層餅~)

而如果警察和小偷扔硬幣去決定守、偷哪出地點。這樣就模糊了自己策略的傾向性,結果就具有偶然性。博弈取勝的要點在于運用其中的偶然性,針對對方是否發現你的某些策略性行為做出及時應對,進而保證自己成功的概率。總結來講還是說明信息在博弈中的重要性。


海盜分金

有五個海盜(記為1、2、3、4、5號)掠得 10 枚金幣,決定以抽簽的方式依次提出分金方案,并由五人共同表決。要想通過方案,必須有超半數的人同意才可以,否則這個人將會被扔進大海。

與其從前往后一個一個地想每個人會怎樣選擇,不如先把問題簡單化,若只剩下最后兩人的話,他們會怎么做呢?

  • 倒推來看,若1、2、3號都被投入海中,那么 5 號必定反對 4 號把一百枚金幣全部收入囊中。因此 4 號只有同意 3 號的方案才有可能保命。
  • 3號猜到這一點,就會采取 (100、0、0) 的分金方案,因為他清楚地知道即便4號一枚金幣也分不到,也仍然會同意他的方案。
  • 2 號猜到 3 號的策略,就會采取 (98、0、1、1) 的方案,因為 2 號只要稍微照顧到 4、5 號的利益,4、5 號就會向他投贊成票,而不希望 2 號出局讓 3 號分配。
  • 1 號同樣猜到 2 號的意圖,就會采取 (97、0、1、2、0) 或者 (97、0、1、0、2) 的方案。對于 1 號來說,只要放棄 2 號,再分給 3 號一枚金幣,給 4 號或 5 號兩枚金幣。

巴什博弈

巴什博弈: 一堆物品有 n 個,兩個人輪流從這堆物品中取物,規定每次至少取一個,最多取 m 個。最后取光者得勝。

巴什博弈是一種 動態、完全信息博弈 ,即局中人的行動有先后順序,且后做出選擇的人知道先做出選擇之人的行動。

如果一方拿取時,還剩 m+1 個,那便是 必敗局,因為此時不論你拿走多少個,下次對方一定可以全部拿完。

其他情況則是 必勝局 。因為如果還剩 m+1+k 個(0 < k <= m),我只要拿走 k 個,那么對方就面臨 m+1 個。可能有人在想 0 > k > -m 怎么辦?沒什么多說的,還是必勝局,我直接拿走剩下的全部。

擴展:如果 n = x(m+1) ,先拿的依然面對必敗局,先拿的拿 p 個,后拿的拿 m+1-p 個,先拿的第二輪拿的時候,還剩 x-1(m+1) ,重復 x-2 輪,先拿的又面對 m+1 了。

反之,如果 n=x(m+1)+k ,先拿的面對必勝局,先拿的拿走 k 個,則后拿的面對 x(m+1) ,重復上一段的過程。

因此,可以得到代碼:

#include<iostream>
using namespace std;
int main()
{int n, m;cin >> n >> m;if (n % (m + 1) == 0)cout << "second win" << endl;else cout << "first win" << endl;return 0;
}

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

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

相關文章

MySQL命令(二)| 表的增刪查改、聚合函數(復合函數)、聯合查詢

文章目錄新增 (Create)全列插入指定列插入查詢 (Retrieve)全列查詢指定列查詢條件查詢關系元素運算符模糊查詢分頁查詢去重&#xff1a;DISTINCT別名&#xff1a;AS升序 or 降序更新 (Update)刪除 (Delete)分組&#xff08;GROUP BY&#xff09;聯合查詢內連接&#xff08;inne…

Spring3.1+Quertz1.8實現多個計劃任務

1.主要是配置文件&#xff1a;如下&#xff1a;(這里說明一下主要是看紅色部分的配置&#xff0c;其他的可以根據自己的實際情況修改&#xff0c;這里只是個思路。) <?xml version"1.0"?> <beans xmlns"http://www.springframework.org/schema/beans…

MySQL | 數據庫的六種約束、表的關系、三大范式

文章目錄數據庫約束NOT NULL&#xff08;非空約束&#xff09;UNIQUE&#xff08;唯一約束&#xff09;DEFAULT&#xff08;缺省約束&#xff09;PRIMARY KEY&#xff08;主鍵約束&#xff09;AUTO_INCREMENT 自增FOREIGN KEY&#xff08;外鍵約束&#xff09;CHECK&#xff08…

哈希 :哈希沖突、負載因子、哈希函數、哈希表、哈希桶

文章目錄哈希哈希&#xff08;散列&#xff09;函數常見的哈希函數字符串哈希函數哈希沖突閉散列&#xff08;開放地址法&#xff09;開散列&#xff08;鏈地址法/拉鏈法&#xff09;負載因子以及增容對于閉散列對于開散列結構具體實現哈希表&#xff08;閉散列&#xff09;創建…

C++ 泛型編程(一):模板基礎:函數模板、類模板、模板推演成函數的機制、模板實例化、模板匹配規則

文章目錄泛型編程函數模板函數模板實例化隱式實例化顯式實例化函數模板的匹配規則類模板類模板的實例化泛型編程 泛型編程旨在削減重復工作&#xff0c;如&#xff1a; 將一個函數多次重載不如將他寫成泛型。 void Swap(int& left, int& right) {int temp left;lef…

你真的了解靜態變量、常量的存儲位置嗎?

文章目錄引言C對內存的劃分如何落實在Linux上自由存儲區和堆之間的問題棧常量區靜態存儲區靜態局部變量靜態局部變量、靜態全局變量、全局變量的異同macOS系統的測試結果總結引言 在動態內存的博客中&#xff0c;我提到&#xff1a; 在Linux 內存管理的博客中&#xff0c;我提…

C++ 泛型編程(二):非類型模板參數,模板特化,模板的分離編譯

文章目錄非類型模板參數函數模板的特化類模板的特化全特化偏特化部分參數特化參數修飾特化模板分離編譯解決方法非類型模板參數 模板的參數分為兩種&#xff1a; 類型參數&#xff1a; 則是我們通常使用的方式&#xff0c;就是在模板的參數列表中在 class 后面加上參數的類型…

Java操作——獲取文件擴展名,去掉文件擴展名

昨天收郵件&#xff0c;得知要參加一個產品部的會議&#xff0c;猜想&#xff0c;也許是因為我做的這個產品demo問題。于是昨天忙活到凌晨3點半&#xff0c;結果早上一來才知道又被調戲了。發郵件的MM把郵件誤發給我了。悲催啊有木有&#xff0c;困啊有木有&#xff01;自己還是…

數據結構 | B樹、B+樹、B*樹

文章目錄搜索結構B樹B樹的插入B樹的遍歷B樹的性能B樹B樹的插入B樹的遍歷B*樹B*樹的插入總結搜索結構 如果我們有大量的數據需要永久存儲&#xff0c;就需要存儲到硬盤之中。但是硬盤的訪問速度遠遠小于內存&#xff0c;并且由于數據量過大&#xff0c;無法一次性加載到內存中。…

MySQL 索引 :哈希索引、B+樹索引、全文索引

文章目錄索引引言常見的索引哈希索引自適應哈希索引B樹索引聚集索引非聚集索引使用方法聯合索引最左前綴匹配規則覆蓋索引全文索引使用方法索引 引言 為什么需要索引&#xff1f; 倘若不使用索引&#xff0c;查找數據時&#xff0c;MySQL必須遍歷整個表。而表越大&#xff0c;…

服裝店怎么引流和吸引顧客 服裝店鋪收銀系統來配合

實體店的同城引流和經營是實體經濟的一個重要的一環&#xff0c;今天我們來分享服裝行業的實體店鋪怎么引流和吸引、留住顧客&#xff0c;并實現復購。大家點個收藏&#xff0c;不然劃走就再也找不到了&#xff0c;另外可以點個關注&#xff0c;下次有新的更好的招&#xff0c;…

約瑟夫環(丟手絹問題)

文章目錄問題描述思路代碼實現問題描述 有 1~N 個數字&#xff0c;從 1~m 依次報數&#xff0c;數到 m 的數字要被刪掉&#xff0c;求最后剩下的數字是&#xff1f; 思路 第一次報數第二次報數1n-m12n-m2……m-2n-2m-1n-1m被刪掉了m11m22……n-1n-1-mnn-m 通過上面的表格&…

MySQL 鎖的相關知識 | lock與latch、鎖的類型、簡談MVCC、鎖算法、死鎖、鎖升級

文章目錄lock與latch鎖的類型MVCC一致性非鎖定讀&#xff08;快照讀&#xff09;一致性鎖定讀&#xff08;當前讀&#xff09;鎖算法死鎖鎖升級lock與latch 在了解數據庫鎖之前&#xff0c;首先就要區分開 lock 和 latch。在數據庫中&#xff0c;lock 和 latch 雖然都是鎖&…

Hibernate使用原生SQL適應復雜數據查詢

HQL盡管容易使用&#xff0c;但是在一些復雜的數據操作上功能有限。特別是在實現復雜的報表統計與計算&#xff0c;以及多表連接查詢上往往無能為力&#xff0c;這時可以使用SQL&#xff08;Native SQL&#xff09;實現HQL無法完成的任務。 1、使用SQL查詢 使用SQL查詢可以通過…

MySQL 存儲引擎 | MyISAM 與 InnoDB

文章目錄概念innodb引擎的4大特性索引結構InnoDBMyISAM區別表級鎖和行級鎖概念 MyISAM 是 MySQL 的默認數據庫引擎&#xff08;5.5版之前&#xff09;&#xff0c;但因為不支持事務處理而被 InnoDB 替代。 然而事物都是有兩面性的&#xff0c;InnoDB 支持事務處理也會帶來一些…

MySQL 事務 | ACID、四種隔離級別、并發帶來的隔離問題、事務的使用與實現

文章目錄事務ACID并發帶來的隔離問題幻讀&#xff08;虛讀&#xff09;不可重復讀臟讀丟失更新隔離級別Read Uncommitted (讀未提交)Read Committed (讀已提交)Repeatable Read (可重復讀)Serializable (可串行化)事務的使用事務的實現Redoundo事務 事務指邏輯上的一組操作。 …

MySQL 備份與主從復制

文章目錄備份主從復制主從復制的作用備份 根據備份方法的不同&#xff0c;備份可劃分為以下幾種類型&#xff1a; 熱備(Hot Backup) &#xff1a; 熱備指的是在數據庫運行的時候直接備份&#xff0c;并且對正在運行的數據庫毫無影響&#xff0c;這種方法在 MySQL 官方手冊中又…

C++ 流的操作 | 初識IO類、文件流、string流的使用

文章目錄前言IO頭文件iostreamfstreamsstream流的使用不能拷貝或對 IO對象 賦值條件狀態與 iostate 類型輸出緩沖區文件流fstream類型文件模式文件光標函數tellg() / tellp()seekg() / seekp()向文件存儲內容/讀取文件內容string流istringstreamostringstream前言 我們在使用 …

Hibernate 更新部分更改的字段 hibernate update

Hibernate 中如果直接使用 Session.update(Object o);或則是Session.updateOrUpdate(Object o); 會把這個表中的所有字段更新一遍。 如&#xff1a; ExperClass4k e new ExperClass4k(); e.setTime(time); e.setQ_num(q_num); e.setK(k); if (str "finch_fix")…

C++ 類的行為 | 行為像值的類、行為像指針的類、swap函數處理自賦值

文章目錄概念行為像值的類行為像指針的類概念引用計數動態內存實現計數器類的swap概念swap實現自賦值概念 行為像值的類和行為像指針的類這兩種說法其實蠻拗口的&#xff0c;這也算是 《CPrimer》 翻譯的缺點之一吧。。。 其實兩者的意思分別是&#xff1a; 行為像值的類&am…