【優先算法】專題——前綴和

目錄

一、【模版】前綴和

參考代碼:

二、【模版】 二維前綴和

參考代碼:

三、尋找數組的中心下標

參考代碼:

四、除自身以外數組的乘積

參考代碼:

五、和為K的子數組

參考代碼:

六、和可被K整除的子數組

參考代碼:

七、連續數組

參考代碼:

八、矩陣區域和

參考代碼:

總結


一、【模版】前綴和

【模版】前綴和

題目描述:

數組的元素是從標為1開始的,n是數組的個數,q是查詢的次數,查詢lr這段區間的和。

解法一:暴力解法,直接查找l到r這段區間之和,但是效率太低,查詢q次每次遍歷一遍數組時間復雜度O(q*N)n和q的數據范圍是1到10^5,暴力解法過不了。

解法二:前綴和,快速求出數組中某一個連續區間的和,時間復雜度O(q)+O(N)

第一步:預處理出來一個前綴和數組,我們要要求1到3的和我們用dp[i-1]+arr[i]就是1到3的和了。

dp[i]表示:表示[1,i]區間內所有元素的和。

dp[i] = dp[i-1] + arr[i]

第二步:使用前綴和數組

如下比如我們要查找l~r這段區間的和那么我們直接去dp數組取出下標為r的這個元素,此元素就是1~r的之和我們減去l-1得到的就是l~r這段區間之和。

這里還有一個問題就是為什么下標要從1開始計數:為了處理邊界情況

初始化:添加虛擬結點(輔助結點)

參考代碼:

#include <iostream>
#include <vector>
using namespace std;int main() 
{//1.讀入數據int n,q;cin>>n>>q;vector<int>arr(n+1);for(int i = 1;i<= n;i++) cin>>arr[i];//2.預處理出來一個前綴和數組vector<long long>dp(n+1); //防止溢出for(int i = 0;i<=n;i++) dp[i] = dp[i-1] + arr[i];//3.使用前綴和數組int l,r;while(q--){cin>>l>>r;cout<<dp[r] -dp[l-1]<<endl;}}

時間復雜度:O(q)+O(n)?


二、【模版】 二維前綴和

題目鏈接:二維前綴和

題目描述:

題目解析:?

1.從第一行第一列開始到第二列,到二行二列。(如下)

2.從第一行第一列開始到第三列,到三行三列。

3.從第一行第二列開始到4列,到三行四列。

算法原理:

解法一:暴力解法,模擬,讓我求哪段區間我就加到哪段區間,如下比如讓我們全部求出來那就從頭加到尾,時間復雜度高,這道題過不了因為時間復雜度為O(n*m*q)

解法二:前綴和

1.預處理出來一個前綴和矩陣

dp[i][j]表示:從[1,1]位置到[i,j]位置,這段區間里面所有元素和。

如下圖我們把它抽象出來,這里我們分為四塊面積分別為A、B、C、D,我們要求得dp[i][j]這段區間的和,我們A+B+C+D就等于dp[i][j],我們求B和C這段區間的和是不太好求的,所以我們這樣求(A+B) + (A + C) + D - A這里減A是因為多算了一個A所以要減掉,A+B這段區間的值非常好求就是dp[i-1][j]這個位置,A+C就是dp[i][j-1]再加上D這個位置的值就是數組里面的arr[i][j]減去A也就是dp[i-1][j-1],這樣就推出了我們預處理的公式。如下圖:

2.使用前綴和矩陣

如下假如我們要求D這段區間的和那么我們又被分成了四個部分,竟然要求D這段區間的和我們就A+B+C+D求得結果之后我們先減去上面這部分就是A+B這部分因為A+B這部分可以直接算出了,也就是下圖綠色小方塊那個位置,在減去A+C這部分但是這樣我們發現多減了一個A所以我們要加上一個A,D = A+B+C+D - (A+B)-(A+C)+A(通分之后就等于D),A+B+C+D其實就等于dp[x2][y2]然后減去A+B也就是dp[x1 - 1][y2]再減去A+C也就是dp[x2][y1-1]在加上A也就是dp[x1-1][y1-1],我們直接套用公式就能用O(1)的時間復雜度得出結果。

參考代碼:

#include <iostream>
#include <vector>
using namespace std;int main() 
{//1.讀入數據int n = 0,m = 0,q = 0;cin>>n>>m>>q;vector<vector<long long>>arr(n+1,vector<long long>(m+1));for(int i = 1;i <=n;i++)for(int j = 1;j <=m ;j++)cin>>arr[i][j];//2.預處理前綴和矩陣vector<vector<long long>>dp(n+1,vector<long long>(m+1));//防止溢出for(int i = 1; i<=n; i++)for(int j = 1; j<=m ;j++)dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1];//3.使用前綴和矩陣int x1=0,y1=0,x2=0,y2=0;while(q--){cin>> x1 >> y1 >> x2 >>y2;cout<<dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]<<endl;}return 0;}

時間復雜為:O(n*m) + O(q)


三、尋找數組的中心下標

題目鏈接:尋找數組的中心下標

題目描述:

題目解析:?

如下圖兩邊都等于11那么就返回6的下標,如果全是0那么就返回最左邊的下標也就是0因為有多個中心下標,不存在則返回-1

解法一:暴力解法,枚舉中心下標左邊相加的值是否等于右邊相加的值,每次枚舉一次中心下標都要左邊相加右邊相加,枚舉下標時間復雜O(N),求和依舊使用O(N)的時間復雜度,最終時間復雜度O(N^2)。

解法二:前綴和

我們利用前綴和的思想來實現,竟然要求某一段區間的和那么前綴和預處理出來的那個數組不就可以,我們還要求后面那一段區間的和我們把前綴和改一下改成后綴和就可以了。

我們用f來表示前綴和數組:f[i]表示:[0,i-1]區間,所有元素的和。

f [i]? = f [i-1] + nums[i-1]

g:后綴和數組:g[i]表示:[i+1,n-1]區間,所有元素的和

g [i] = g?[i+1] + nums[i+1]

最后進行判斷,枚舉所有的中心下標從0~n-1然后判斷f[i] == g[i],如果有很多中心下標要返回最左邊的,所以我們枚舉所有的中心下標i,然后判斷f[i] == g[i],因為f[i]表示的就是左邊所有元素的和g[i]保存的就是右邊所有元素的和,判斷是否相等如果相等返回i不相等繼續往后面找,找到最后一個位置依舊沒找到就返回-1

細節問題:

當我們的f等于0的時候我們代入上面發現會越界訪問,0~-1這里沒有元素所以f(0)= 0

當g等于n-1的時候我們代入上面也會發生越界訪問,n-1的右邊是沒有任何元素的所以g(0) = 0

填寫元素順序,f表是正著填的從左到右,g表是倒著填的從右到左

參考代碼:

class Solution {
public:int pivotIndex(vector<int>& nums) {int n = nums.size();vector<int>f(n),g(n);//1.預處理前綴和數組以及后綴和數組for(int i = 1;i<n;i++)f[i] = f[i-1] + nums[i-1];for(int j = n-2;j>= 0;j--)g[j] = g[j + 1] + nums[j+1];//2.使用for(int i = 0;i<n;i++){if(f[i] == g[i])return i;}return -1;}
};

時間復雜度:O(N)


四、除自身以外數組的乘積

題目鏈接:除自身以外數組的乘積

題目描述:

舉個例子:?

除1以為2*3*4等于24,除2以外1*3*4等于12,除3以為1*2*4等于8,除4以為1*2*3等于6,題目已經提示我們了使用前綴和 后綴和。

解法一:暴力解法

暴力解法其實和我們上面舉的例子一樣,比如我們要求除第一個位置以外的值我們就從頭遍歷尾,要求第二個位置就從第一個開始遍歷跳過我們自己然后依次遍歷,以此類推。

但是時間復雜度太高了,O(N^2)

解法二:前綴積

本題的思路和上題的思路一樣,但是有些細節有變化。

1.預處理前綴積以及后綴積

我們不需要i位置的元素,只要0~i-1位置的元素即可。表示如下:

f:表示前綴積:f [0,i -1 ] 區間內所有元素的乘積

我們要求i-1位置的乘積的時候我們知道i-2位置的乘積讓它乘以i-1位置的值就可以了

f[i] = f [i-1] * nums[i-1]

注意:我們上面的f [i-1 ]位置是上圖i-2的位置,因為我們f[i]表示的是i-1位置。

我們知道了i+2位置的乘積之后用它乘以i+1位置的值即可。

g:表示后綴積:g[i]表示:[i+1,n-1]

g[i] = g[i+1] * nums[i+1]

2.使用

我們在i這個位置填寫數據的時候我們用f[i] * g[i]因為f[i]表示左邊的乘積g表示右邊的乘積

3.細節問題

當我們i等于0的時候,其實會越界訪問所以我們需要處理,那么我們f(0)給什么值合適上面那道題我們給的是0,這道題我們不能給0因為0*nums[i-1]還是0,那么會影響我們的結果所以我們要給1,f(0) = 1,g(n-1) = 1

參考代碼:

class Solution {
public:vector<int> productExceptSelf(vector<int>& nums) {int n = nums.size();vector<int>f(n,1),g(n,1);vector<int> answer(n);//1.預處理前綴積 后綴積for(int i = 1;i<n;i++)f[i] = f[i-1] * nums[i-1];for(int i = n-2;i>=0;i--)g[i] = g[i+1] * nums[i+1];//2.使用for(int i = 0;i<n;i++){answer[i] = f[i] * g[i];}return answer;}
};

時間復雜度:O(N)


五、和為K的子數組

題目鏈接:560. 和為 K 的子數組 - 力扣(LeetCode)

題目描述:

前綴和+哈希表

以i位置為結尾的所有的子數組在[0,i-1]區間內,有多少個前綴和等于sum[i] - k就有多少個和為k的子數組,哈希表中分別存儲前綴和、次數。

細節問題:

1.在計算i位置之前,哈希表里面只保存[0,i-1]位置的前綴和

2.不用真的創建一個前綴和數組,用一個變量sum來標記前一個位置的前綴和即可

3.如果整個前綴和等于k那么我們需要提前把hash[0] = 1。<0,1>

注意:不能使用滑動窗口來做優化(雙指針)因為有0和負數,如下圖這種情況我們left不斷向右移動,那么有可能中間還有子數組和為 k

參考代碼:

class Solution {
public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int>hash;int sum = 0,ret = 0;hash[0] = 1;for(auto x : nums){sum += x;if(hash.count(sum - k)) ret += hash[sum - k];hash[sum]++;}return ret;}
};

時間復雜度為 O(n),空間復雜度也為 O(n)?


六、和可被K整除的子數組

題目鏈接:和可被K整除的子數組

題目描述:

補充知識:

1.同余定理:

(a - b) / p = k.....0? ? =>?a % p = b % p

舉個例子:(26-12) / 7? ?=>? ?26 % 7 = 12 % 7

7 % 2 = 1? ?-> 7 - 2 = 5 - 2 =3 -2 = 1

取余數的本質就是你這個數有多少個2的倍數就把2的倍數干掉,減到這個數比2小

(1+2 * 3) % 2 = 1(相當于有3個2的倍數,得出等式:(a + p * k) % p = a % p

證明:

(a- b) / p = k

a - b = p * k

a = b + p * k(左右相等,那么左右%p也相等)

a %p = (b + p * k) % p = b % p(p * k有k個p可以直接干掉)

2.C++,java:[負數 % 正數]的結果以及修正

負 % 正 = 負 修正 a % p + p 正負統一(a %p +p) % p(如果a為正數那么就多加了一個p所以再模一個p結果是不變的,如果是負數加上一個p剛好就是正確答案)

我們使用前綴和 + 哈希表

在[0,i-1]區間內,找到有多少個前綴和的余數等于(sun % k + k)?% k,哈希表分別存儲前綴和的余數、次數

大部分邏輯和上題差不多?

參考代碼:

class Solution {
public:int subarraysDivByK(vector<int>& nums, int k) {unordered_map<int,int>hash;hash[0] = 1;//0這個數的余數int sum = 0,ret = 0;for(auto x : nums){sum += x;//算出當前位置的前綴和int r = (sum % k + k) % k;//修正后的余數if(hash.count(r)) ret +=hash[r%k];//統計結果hash[r]++;}return ret;}
};

時間復雜度為 O(n),空間復雜度也為 O(n)?


七、連續數組

題目鏈接:連續數組

題目描述:

我們把問題轉化一下:

1.將所有的0修改為-1

2.在數組中,找出最長的子數組,使子數組中所有的元素和為0

和為k的子數組 ->和為0的子數組

前綴和 + 哈希表

1.哈希表中分別存儲前綴和、下標

2.使用完之后,丟進哈希表

3.如果有重復的<sum,i>只保留前面的那一對<sum,i>

4.默認的前綴和為0的情況hash[0] = -1,當我們的這段區間和為sum的時候我們要去0的前面也就是-1的位置找和為0的子區間(存的下標)

5.長度計算i - j + 1 - 1? ? =>? i - j

參考代碼:

class Solution {
public:int findMaxLength(vector<int>& nums) {unordered_map<int,int> hash;hash[0] = -1; //默認有一個前綴和為0的情況int sum = 0,ret = 0;for(int i = 0 ; i<nums.size();i++){sum += nums[i] == 0 ? -1 : 1;if(hash.count(sum))  ret = max(ret,i - hash[sum]);else hash[sum] = i;}return ret;}
};

八、矩陣區域和

題目鏈接:矩陣區域和

題目描述:

題目要求:以5為中心分別像上左下右分別擴展k個單位,圍城一個長方形的所有元素的和,這是假設k = 1,那么擴展一個單位。

假設求1這個位置,上左下右分別擴展1個單位,然后圍成一個正方形,最后相加即可。1+2+4+5

求2這個位置,上左下右分別擴展1個單位然后圍成正方形,相加即可,超出矩陣的范圍不需要。1+2+3+4+5+6

求5這個位置,上左下右分別擴展1個單位然后圍成正方形,相加即可。1+2+3+4+5+6+7+8+9

解法:使用二維前綴和

dp[i][j] = dp[i-1][j]? + dp[i][j-1] -? dp[i-1][j-1] + mat[i][j]

因為多加了一個dp[i-1][j-1]所以再減去一個dp[i-1][j-1]。

如上就是初始化前綴和矩陣的遞推公式,直接代入公式即可。

answer= dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]

這里加dp[x1-1][y1-1]是因為多減了一個dp[x1-1][y1-1]所以要加上

1.我們要求ans[i][j]位置

我們(i-k,j-k)用(x1,y2)表示

因為這個區間可能會越界,也就是說是(0,0)這個位置的時候我們不能越過,所以我們求一個最大值,如果小于0那么取最大值還是0如果大于0那么就是一個合法的區間。

x1 = max(0,i-k)

y1 = max(0,j-k)

我們(i+k,j+k)用(x2,y2)表示

我們的i+k,j+k可能會超過我們的(m-1,n-1)所以我們需要讓它回到我們的m-1,n-1

x2 = min(m-1,i+k)

y2 = min(n-1,j+k)?

2.映射位置?

當我們dp數組要填1,1這個位置的值我們要去mat數組0,0這個位置找。dp(x,y)? -> mat(x-1,y-1)。

所以我們需要把dp[i][j] = dp[i-1][j]? + dp[i][j-1] -? dp[i-1][j-1] + mat[i][j]改為dp[i][j] = dp[i-1][j]? + dp[i][j-1] -? dp[i-1][j-1] + mat[i-1][j-1]

我們在填ans數據的時候使用dp數組需要+1因為ans(0,0)對應dp(1,1)位置。(x,y)? -> (x+1,y+1)。

這里有兩種方式:

方法一:

answer[i][j] = dp[x2+1][y2+1] - dp[x1-1+1][y2+1]-dp[x2+1][y1-1+1] +dp [x1-1+1][y1-1+1];

方法二:我們在求下標那里進行+1即可,然后直接在dp數組拿值即可

x1 = max(0,i-k)+1

y1 = max(0,j-k)+1

x2 = min(m-1,i+k)+1

y2 = min(n-1,j+k)?+1

參考代碼:

class Solution {
public:vector<vector<int>> matrixBlockSum(vector<vector<int>>& mat, int k) {int m = mat.size(),n = mat[0].size();//1.預處理前綴和矩陣vector<vector<int>> dp(m+1,vector<int>(n+1));for(int i = 1;i <= m;i++)for(int j = 1;j<=n;j++)dp[i][j] = dp[i-1][j] + dp[i][j-1] - dp[i-1][j-1] + mat[i-1][j-1];//2.使用vector<vector<int>> answer(m,vector<int>(n));for(int i = 0;i < m;i++){for(int j = 0;j<n;j++){int x1 = max(0,i-k) + 1,y1 = max(0,j-k)+1;int x2 = min(m-1,i+k) + 1,y2 = min(n-1,j+k)+1;answer[i][j] = dp[x2][y2] - dp[x1-1][y2]-dp[x2][y1-1] +dp [x1-1][y1-1];}}return answer;}
};

總結

前綴和這個算法,重要思想就是預處理,當我們在解決一個問題的時候不太好解決的時候我們可以先預處理一下,預處理之后在解決效率是非常高的,直接解決時間復雜度是N^2級別,預處理一下直接變O(N),這種就是典型的用空間換時間,因為我們多創建了一個數組,但是時間復雜度提高了一個級別。

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

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

相關文章

CDDIS從2025年2月開始數據遷移

CDDIS 將從 2025 年 2 月開始將我們的網站從 cddis.nasa.gov 遷移到 earthdata.nasa.gov&#xff0c;并于 2025 年 6 月結束。 期間可能對GAMIT聯網數據下載造成影響。

谷歌Titans模型論文解析,Transformer迎來變革拐點——DeepSeek能否“接招”?

一、引入 Titans 模型 我們將深入探討谷歌研究院的一篇新論文《Titans: Learning to Memorize at Test Time》&#xff0c;該論文介紹了一種名為 Titans 的新模型架構。 Titans 在緩解 Transformer 二次方成本問題的同時&#xff0c;展現出了令人期待的成果。Titans 模型的設…

新春賀歲,共赴AGI之旅

點擊藍字 關注我們 AI TIME歡迎每一位AI愛好者的加入&#xff01; 往期精彩文章推薦 季姮教授獨家文字版干貨 | 面向知識淵博的大語言模型 關于AI TIME AI TIME源起于2019年&#xff0c;旨在發揚科學思辨精神&#xff0c;邀請各界人士對人工智能理論、算法和場景應用的本質問題…

Baklib推動數字化內容管理解決方案助力企業數字化轉型

內容概要 在當今信息爆炸的時代&#xff0c;數字化內容管理成為企業提升效率和競爭力的關鍵。企業在面對大量數據時&#xff0c;如何高效地存儲、分類與檢索信息&#xff0c;直接關系到其經營的成敗。數字化內容管理不僅限于簡單的文檔存儲&#xff0c;更是整合了文檔、圖像、…

【memgpt】letta 課程4:基于latta框架構建MemGpt代理并與之交互

Lab 3: Building Agents with memory 基于latta框架構建MemGpt代理并與之交互理解代理狀態,例如作為系統提示符、工具和agent的內存查看和編輯代理存檔內存MemGPT 代理是有狀態的 agents的設計思路 每個步驟都要定義代理行為 Letta agents persist information over time and…

測試方案和測試計劃相同點和不同點

在軟件測試領域&#xff0c;測試方案與測試計劃皆為舉足輕重的關鍵文檔&#xff0c;盡管它們有著緊密的關聯&#xff0c;但在目的與內容層面存在著顯著的差異。相同點&#xff1a; 1.共同目標&#xff1a;測試方案和測試計劃的核心目標高度一致&#xff0c;均致力于保障軟件的…

詳細介紹:網站背景更換功能

目錄 1. HTML 部分 2. JavaScript 部分 3. 完整流程 4. 總結 5. 適用場景 本文將介紹如何通過文件上傳實現網站背景圖片的更換。通過使用 JavaScript 和 Axios&#xff0c;我們可以允許用戶上傳圖片文件并將其作為網站的背景圖片。上傳的圖片 URL 會保存在瀏覽器的 localSt…

嵌入原則:數據特征如何 融入 模型的 損失地形

嵌入原則&#xff1a;數據特征如何 融入 模型的 損失地形 第一節&#xff1a;嵌入原則的基本概念與公式解釋 機器學習中的嵌入原則&#xff0c;就像 “雕刻師” 將 “石塊的紋理” 逐漸融入到 “雕塑的造型” 中。數據特征不再是獨立的輸入&#xff0c;而是被模型 “吸收” 和…

FPGA|例化生成的PLL功能IP核

1、例化上一篇文章中調用的IP核&#xff0c;新建文件PLL_test.v 2、代碼如圖 timescale 1ns / 1ps module PLL_test(input clk,input rst_n,output clkout0,output clkout1,output clkout2,output clkout3,output clkout4);wire locked;PLL pll_inst(.inclk0(clk),.c0(clkout0)…

【C++】P5734 【深基6.例6】文字處理軟件

博客主頁&#xff1a; [小????????] 本文專欄: C 文章目錄 &#x1f4af;前言&#x1f4af;題目描述&#x1f4af;題目描述輸入格式輸出格式示例輸入與輸出輸入&#xff1a;輸出&#xff1a; &#x1f4af;我的做法操作1&#xff1a;在文檔末尾插入字符串操作2&…

后盾人JS -- 原型

沒有原型的對象 也有沒有原型的對象 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document<…

洛谷 P1130 紅牌 C語言

題目描述 某地臨時居民想獲得長期居住權就必須申請拿到紅牌。獲得紅牌的過程是相當復雜&#xff0c;一共包括 N 個步驟。每一步驟都由政府的某個工作人員負責檢查你所提交的材料是否符合條件。為了加快進程&#xff0c;每一步政府都派了 M 個工作人員來檢查材料。不幸的是&…

【線程】基于環形隊列的生產者消費者模型

1 環形隊列 環形隊列采用數組來模擬&#xff0c;用取模運算來模擬環狀特性。 1.如何判斷環形隊列為空或者為滿? 當環形隊列為空時&#xff0c;頭和尾都指向同一個位置。當環形隊列為滿時&#xff0c;頭和尾也都指向同一個位置。 因此&#xff0c; 可以通過加計數器或者標記…

二分/雙指針/單調棧隊列專題

1.4924. 矩陣 - AcWing題庫 一開始打表找規律以為是右上角向左下角遞增,但當n很大的時候就不對了,因此我們得去觀察 i * i 100000 * (i - j) j * j i * j 這個式子,我們關心的是這個式子的單調性因此我們可以分別將i和j看作常數來對式子進行求導,可以得到 f(i) 2 * i 10…

Shell $0

個人博客地址&#xff1a;Shell $0 | 一張假鈔的真實世界 我們已經知道在Shell中$0表示Shell腳本的文件名&#xff0c;但在有腳本調用的情形中&#xff0c;子腳本中的$0會是什么值呢&#xff1f;我們通過下面的實例來看。 已測試系統列表&#xff1a; Mac OS X EI Capitan 1…

商品列表及商品詳情展示

前言 本文將展示一段結合 HTML、CSS 和 JavaScript 的代碼&#xff0c;實現了一個簡單的商品展示頁面及商品詳情&#xff0c;涵蓋數據獲取、渲染、搜索及排序等功能。 效果展示 點擊不同的商品會展示對應的商品詳情。 代碼部分 代碼總體實現 <!DOCTYPE html> <htm…

[ VS Code 插件開發 ] 使用 Task ( 任務 ) 代替 createTerminal (終端) 來執行命令

VSCode 官方自己的插件就是這樣執行命令的. 使用體驗 比 默認的終端 好太多了. 重用終端, Shell 集成 , 按任意鍵關閉, 任務是否成功, 左側命令操作 (菜單中功能很多) 等 import * as vscode from vscode; // 執行的命令 let command_str "npm run dev" // 工作目…

大模型綜述一鏡到底(全文八萬字) ——《Large Language Models: A Survey》

論文鏈接&#xff1a;https://arxiv.org/abs/2402.06196 摘要&#xff1a;自2022年11月ChatGPT發布以來&#xff0c;大語言模型&#xff08;LLMs&#xff09;因其在廣泛的自然語言任務上的強大性能而備受關注。正如縮放定律所預測的那樣&#xff0c;大語言模型通過在大量文本數…

Python處理數據庫:MySQL與SQLite詳解

Python處理數據庫&#xff1a;MySQL與SQLite詳解 在數據處理和存儲方面&#xff0c;數據庫扮演著至關重要的角色。Python提供了多種與數據庫交互的方式&#xff0c;其中pymysql庫用于連接和操作MySQL數據庫&#xff0c;而SQLite則是一種輕量級的嵌入式數據庫&#xff0c;Pytho…

【C++】B2124 判斷字符串是否為回文

博客主頁&#xff1a; [小????????] 本文專欄: C 文章目錄 &#x1f4af;前言&#x1f4af;題目描述輸入格式&#xff1a;輸出格式&#xff1a;樣例&#xff1a; &#x1f4af;方法一&#xff1a;我的第一種做法思路代碼實現解析 &#x1f4af;方法二&#xff1a;我…