每日一題——Python實現PAT乙級1073 多選題常見計分法(舉一反三+思想解讀+逐步優化)9千字好文


一個認為一切根源都是“自己不夠強”的INTJ

個人主頁:用哲學編程-CSDN博客
專欄:每日一題——舉一反三
Python編程學習
Python內置函數

Python-3.12.0文檔解讀

目錄

初次嘗試

再次嘗試

有何不同

版本一(原始版本):

版本二(優化版本):

總結:

代碼結構和邏輯

時間復雜度分析

空間復雜度分析

總結

我要更強

優化方法

優化后的代碼

優化說明

時間復雜度和空間復雜度分析

哲學和編程思想

1. 抽象和封裝

2. 效率和優化

3. 簡潔和清晰

4. 模塊化和可擴展性

5. 防御性編程

6. 函數式編程思想

7. 面向對象編程思想

8. 敏捷開發思想

舉一反三

1. 抽象和封裝

2. 效率和優化

3. 簡潔和清晰

4. 模塊化和可擴展性

5. 防御性編程

6. 函數式編程思想

7. 面向對象編程思想

8. 敏捷開發思想

通用技巧


題目鏈接:https://pintia.cn/problem-sets/994805260223102976/exam/problems/type/7?problemSetProblemId=994805263624683520&page=0

初次嘗試

N_students_num, M_ques_num = map(int, input().split())  # 讀取學生人數和題目數量
answers = {}  # 初始化答案字典
for i in range(M_ques_num):full_score, option_num, right_option_num, *right_options = input().split()full_score = int(full_score)option_num = int(option_num)right_option_num = int(right_option_num)#print(full_score, option_num, right_option_num, *right_options)#3 4 2 a canswers[i+1] = [right_option_num, ''.join(right_options), full_score, option_num]  # 將題目的正確選項和分數等信息存入字典#print(answers)
#{1: [2, 'ac', 3, 4], 2: [1, 'b', 2, 5], 3: [2, 'bc', 5, 3], 4: [4, 'abde', 1, 5]}options_wrong_times = {}  # 初始化錯誤選項次數字典for i in range(N_students_num):student_options = input()student_options = student_options.replace(' ', '')student_options = student_options.replace(')', '')student_options = student_options[1:].split('(')#print(student_options)#['2ac', '2bd', '2ac', '3abe']for j in range(M_ques_num):student_options[j] = int(student_options[j][0]), student_options[j][1:]  # 將學生答案轉換為元組列表,每個元組包含選項數量和選項字符串#print(student_options)#[(2, 'ac'), (2, 'bd'), (2, 'ac'), (3, 'abe')]this_student_score = 0for j in range(M_ques_num):if answers[j+1][0] == student_options[j][0] and answers[j+1][1] == student_options[j][1]:this_student_score += answers[j+1][2]  # 完全正確,加上全部分數continueelif set(student_options[j][1]) < set(answers[j+1][1]):this_student_score += 0.5 * answers[j+1][2]  # 部分正確,加上一半分數wrong_options = list(set(student_options[j][1]) ^ set(answers[j+1][1]))  # 計算錯誤選項wrong_options.sort()for option in wrong_options:if str(j+1) + '-' + option not in options_wrong_times:options_wrong_times[str(j+1) + '-' + option] = 1  # 記錄錯誤選項次數else:options_wrong_times[str(j+1) + '-' + option] += 1print(f"{this_student_score:.1f}")  # 輸出每個學生的得分if len(options_wrong_times) == 0:print("Too simple")  # 如果沒有錯誤選項,輸出"Too simple"
else:tmp = max(options_wrong_times.values())output = [option for option in options_wrong_times if options_wrong_times[option] == tmp]for i in range(len(output)):print(tmp, output[i])  # 輸出錯誤次數最多的選項及其錯誤次數

再次嘗試

N_students_num, M_ques_num = map(int, input().split())  # 讀取學生人數和題目數量
answers = {}  # 初始化答案字典
for i in range(M_ques_num):full_score, option_num, right_option_num, *right_options = input().split()full_score = int(full_score)option_num = int(option_num)right_option_num = int(right_option_num)answers[i+1] = [right_option_num, set(right_options), full_score]  # 將題目的正確選項和分數等信息存入字典options_wrong_times = {}  # 初始化錯誤選項次數字典for i in range(N_students_num):student_options = input().replace(' ', '').replace(')', '')[1:].split('(')student_options = [set(opt[1:]) for opt in student_options]  # 將學生答案轉換為集合列表this_student_score = 0for j in range(M_ques_num):student_option_set = student_options[j]correct_option_set = answers[j+1][1]if student_option_set == correct_option_set:this_student_score += answers[j+1][2]  # 完全正確,加上全部分數elif student_option_set.issubset(correct_option_set):this_student_score += 0.5 * answers[j+1][2]  # 部分正確,加上一半分數wrong_options = student_option_set.symmetric_difference(correct_option_set)  # 計算錯誤選項for option in wrong_options:key = f"{j+1}-{option}"options_wrong_times[key] = options_wrong_times.get(key, 0) + 1  # 記錄錯誤選項次數print(f"{this_student_score:.1f}")  # 輸出每個學生的得分if not options_wrong_times:print("Too simple")  # 如果沒有錯誤選項,輸出"Too simple"
else:max_wrong_times = max(options_wrong_times.values())for option, times in sorted(options_wrong_times.items(), key=lambda x: (int(x[0].split('-')[0]), x[0].split('-')[1])):if times == max_wrong_times:print(max_wrong_times, option)  # 輸出錯誤次數最多的選項及其錯誤次數

有何不同

這兩個版本的代碼在功能上是相同的,都是為了計算每個學生的得分并找出錯得最多的題目選項。然而,它們在實現上有一些差異,主要體現在代碼的簡潔性、效率和可讀性上。以下是兩個版本的主要差異分析:

版本一(原始版本):
  1. 字符串操作較多:
    • 使用多次字符串替換和分割操作,例如?student_options = student_options.replace(' ', '').replace(')', '')?和?student_options = student_options[1:].split('(')。
    • 將學生答案轉換為元組列表,例如?student_options[j] = int(student_options[j][0]), student_options[j][1:]。
  2. 使用列表和集合操作:
    • 使用列表操作來處理學生答案和正確答案,例如?wrong_options = list(set(student_options[j][1]) ^ set(answers[j+1][1]))。
    • 使用集合操作來判斷部分正確的情況,例如?set(student_options[j][1]) < set(answers[j+1][1])。
  3. 錯誤選項次數的記錄:
    • 使用字典來記錄錯誤選項次數,例如?options_wrong_times[str(j+1) + '-' + option] = 1。
  4. 輸出錯誤次數最多的選項:
  • 使用列表推導式來找出錯誤次數最多的選項,例如?output = [option for option in options_wrong_times if options_wrong_times[option] == tmp]。
版本二(優化版本):
  1. 減少字符串操作:
    • 通過一次性的字符串替換和分割操作,減少了多次的字符串操作,例如?student_options = input().replace(' ', '').replace(')', '')[1:].split('(')。
  2. 使用集合操作:
    • 將學生答案和正確答案都轉換為集合,利用集合的快速操作,例如?student_options = [set(opt[1:]) for opt in student_options]?和?correct_option_set = answers[j+1][1]。
  3. 錯誤選項次數的記錄:
    • 使用字典的?get?方法來簡?編輯文章化錯誤選項次數的更新,例如?options_wrong_times[key] = options_wrong_times.get(key, 0) + 1。
  4. 輸出錯誤次數最多的選項:
  • 使用排序來確保輸出順序正確,例如?for option, times in sorted(options_wrong_times.items(), key=lambda x: (int(x[0].split('-')[0]), x[0].split('-')[1]))。
總結:
  • 優化版本在代碼簡潔性、效率和可讀性上都有所提升。
  • 優化版本減少了不必要的字符串操作,利用集合操作提高了處理速度。
  • 優化版本使用字典的?get?方法簡化了錯誤選項次數的更新,并使用排序確保輸出順序正確。

總體來說,優化版本在性能和代碼質量上都有顯著提升。

這段代碼的主要功能是計算每個學生的得分,并找出錯得最多的題目選項。下面是對這段代碼的專業點評,包括時間復雜度和空間復雜度的分析。

代碼結構和邏輯

  1. 輸入處理:
    • 首先讀取學生人數?N_students_num?和題目數量?M_ques_num。
    • 然后讀取每個題目的詳細信息(包括滿分、選項數量、正確選項數量和正確選項)并存儲在字典?answers?中。
  2. 學生得分計算:
    • 對于每個學生,讀取其答案并轉換為集合列表。
    • 計算每個學生的得分,并記錄每個錯誤選項的出現次數。
  3. 輸出結果:
  • 輸出每個學生的得分。
  • 如果沒有錯誤選項,輸出 "Too simple"。
  • 否則,輸出錯誤次數最多的選項及其錯誤次數。

時間復雜度分析

  1. 初始化答案字典:
    • 這部分的時間復雜度是 O(M),其中 M 是題目數量。
  2. 學生得分計算:
    • 對于每個學生,需要處理其答案并計算得分。這部分的時間復雜度是 O(N * M),其中 N 是學生人數,M 是題目數量。
    • 在計算得分時,需要比較學生答案和正確答案,這部分的時間復雜度是 O(M * K),其中 K 是每個題目的選項數量。
    • 記錄錯誤選項的出現次數,這部分的時間復雜度是 O(M * K)。
  3. 輸出結果:
  • 輸出每個學生的得分,這部分的時間復雜度是 O(N)。
  • 輸出錯誤次數最多的選項,這部分的時間復雜度是 O(M * K log(M * K)),因為需要對錯誤選項進行排序。

綜合來看,整個代碼的時間復雜度是 O(N * M * K + M * K log(M * K))。

空間復雜度分析

  1. 答案字典:
    • 存儲每個題目的詳細信息,空間復雜度是 O(M * K)。
  2. 錯誤選項次數字典:
    • 存儲每個錯誤選項的出現次數,空間復雜度是 O(M * K)。
  3. 學生答案:
  • 存儲每個學生的答案,空間復雜度是 O(N * M * K)。

綜合來看,整個代碼的空間復雜度是 O(N * M * K)。

總結

  • 時間復雜度:O(N * M * K + M * K log(M * K))
  • 空間復雜度:O(N * M * K)

這段代碼在邏輯上是清晰的,但在處理大量數據時可能會面臨性能問題。特別是當 N、M 和 K 都很大時,時間復雜度和空間復雜度都會顯著增加。優化方向可以考慮減少不必要的字符串操作和集合操作,以及優化數據結構的使用。


我要更強

優化時間復雜度和空間復雜度的方法通常涉及減少不必要的計算和數據結構的使用。以下是一些可能的優化方法,并附上相應的代碼和注釋。

優化方法

  1. 減少字符串操作:減少不必要的字符串替換和分割操作。
  2. 使用高效的集合操作:利用集合的快速操作來減少比較時間。
  3. 避免重復計算:緩存一些計算結果以避免重復計算。
  4. 優化數據結構:選擇合適的數據結構來存儲和處理數據。

優化后的代碼

from collections import defaultdict# 讀取學生人數和題目數量
N_students_num, M_ques_num = map(int, input().split())# 初始化答案字典
answers = {}
for i in range(M_ques_num):full_score, option_num, right_option_num, *right_options = input().split()answers[i+1] = [int(right_option_num), set(right_options), int(full_score)]# 初始化錯誤選項次數字典
options_wrong_times = defaultdict(int)# 計算每個學生的得分并記錄錯誤選項次數
for _ in range(N_students_num):student_options = input().replace(' ', '').replace(')', '')[1:].split('(')student_options = [set(opt[1:]) for opt in student_options]this_student_score = 0for j in range(M_ques_num):student_option_set = student_options[j]correct_option_set = answers[j+1][1]if student_option_set == correct_option_set:this_student_score += answers[j+1][2]elif student_option_set.issubset(correct_option_set):this_student_score += 0.5 * answers[j+1][2]wrong_options = student_option_set.symmetric_difference(correct_option_set)for option in wrong_options:key = f"{j+1}-{option}"options_wrong_times[key] += 1print(f"{this_student_score:.1f}")# 輸出錯誤次數最多的選項
if not options_wrong_times:print("Too simple")
else:max_wrong_times = max(options_wrong_times.values())for option, times in sorted(options_wrong_times.items(), key=lambda x: (int(x[0].split('-')[0]), x[0].split('-')[1])):if times == max_wrong_times:print(max_wrong_times, option)

優化說明

  1. 減少字符串操作:
    • 使用?input().replace(' ', '').replace(')', '')[1:].split('(')?一次性完成字符串替換和分割操作。
  2. 使用高效的集合操作:
    • 使用集合的?symmetric_difference?方法來計算錯誤選項,這比手動比較更高效。
  3. 避免重復計算:
    • 使用?defaultdict?來簡化錯誤選項次數的更新,避免重復的?get?操作。
  4. 優化數據結構:
  • 使用?defaultdict?來存儲錯誤選項次數,這樣可以減少初始化字典時的復雜度。

時間復雜度和空間復雜度分析

  • 時間復雜度:O(N * M * K + M * K log(M * K)),與之前相比沒有顯著變化,但減少了不必要的操作。
  • 空間復雜度:O(N * M * K),與之前相比沒有顯著變化,但優化了數據結構的使用。

通過這些優化,代碼在處理大量數據時會更加高效。


哲學和編程思想

這些優化方法體現了多種哲學和編程思想,具體包括:

1. 抽象和封裝

  • 抽象:將問題的核心邏輯抽象出來,例如將題目的正確答案和學生的答案抽象為集合,便于進行集合操作。
  • 封裝:將數據和操作數據的函數封裝在一起,例如使用字典來存儲題目的詳細信息,并使用集合操作來處理答案。

2. 效率和優化

  • 效率:關注代碼的執行效率,通過減少不必要的操作和選擇合適的數據結構來提高效率。
  • 優化:不斷尋找和實施優化措施,例如使用?defaultdict?來簡化字典操作,減少重復計算。

3. 簡潔和清晰

  • 簡潔:追求代碼的簡潔性,避免冗余和復雜的代碼結構,例如使用一行代碼完成字符串的替換和分割。
  • 清晰:保持代碼邏輯的清晰性,使代碼易于理解和維護,例如通過合理的命名和注釋來提高代碼的可讀性。

4. 模塊化和可擴展性

  • 模塊化:將代碼分解為獨立的模塊,每個模塊負責一個特定的功能,例如將輸入處理、得分計算和結果輸出分為不同的部分。
  • 可擴展性:設計代碼時考慮未來的擴展需求,例如使用字典和集合來存儲數據,便于未來添加新的功能或修改現有功能。

5. 防御性編程

  • 防御性編程:在代碼中加入一些防御性措施,例如使用?defaultdict?來避免鍵不存在的錯誤,提高代碼的健壯性。

6. 函數式編程思想

  • 不可變數據:盡量使用不可變數據結構,例如集合,避免數據被意外修改。
  • 高階函數:使用高階函數來簡化代碼,例如使用?sorted?函數來對字典進行排序。

7. 面向對象編程思想

  • 對象:將數據和操作數據的方法封裝在對象中,例如使用字典來存儲題目的信息。
  • 繼承和多態:雖然在這個例子中沒有直接體現,但面向對象編程中的繼承和多態思想可以用于設計更復雜的系統。

8. 敏捷開發思想

  • 迭代和反饋:通過不斷迭代和反饋來改進代碼,例如在優化過程中不斷測試和調整代碼。
  • 持續集成:持續集成優化后的代碼,確保代碼的質量和穩定性。

通過這些哲學和編程思想的運用,代碼不僅在性能上得到了優化,而且在可讀性、可維護性和可擴展性上也得到了提升。


舉一反三

根據上述哲學和編程思想,以下是一些通用的技巧,可以幫助你在解決類似問題時舉一反三:

1. 抽象和封裝

  • 抽象問題核心:識別問題的核心要素,并將其抽象為數據結構或對象。例如,將題目和答案抽象為字典和集合。
  • 封裝邏輯:將相關的數據和操作封裝在一起,形成模塊或函數,提高代碼的可讀性和可維護性。

2. 效率和優化

  • 選擇合適的數據結構:根據問題的特點選擇最合適的數據結構,例如使用字典來快速查找,使用集合來進行高效的集合操作。
  • 避免重復計算:緩存計算結果,避免重復計算,例如使用?defaultdict?來記錄錯誤選項的次數。

3. 簡潔和清晰

  • 簡化代碼:盡量使用簡潔的表達方式,減少冗余代碼,例如使用一行代碼完成多個字符串操作。
  • 清晰命名:使用有意義的變量和函數名,提高代碼的可讀性。

4. 模塊化和可擴展性

  • 分解問題:將復雜問題分解為多個小問題,每個小問題由一個模塊或函數處理。
  • 設計可擴展的接口:設計靈活的接口,便于未來添加新功能或修改現有功能。

5. 防御性編程

  • 處理異常情況:考慮并處理可能的異常情況,例如使用?defaultdict?避免鍵不存在的錯誤。
  • 驗證輸入:對輸入數據進行驗證,確保數據的正確性。

6. 函數式編程思想

  • 使用不可變數據:盡量使用不可變數據結構,避免數據被意外修改。
  • 利用高階函數:使用高階函數來簡化代碼,例如使用?sorted?函數對數據進行排序。

7. 面向對象編程思想

  • 設計對象:將數據和操作封裝在對象中,形成清晰的類和對象結構。
  • 利用繼承和多態:在設計復雜系統時,利用繼承和多態來提高代碼的復用性和靈活性。

8. 敏捷開發思想

  • 迭代改進:通過不斷迭代和測試來改進代碼,確保代碼的質量。
  • 持續集成:將優化后的代碼持續集成到項目中,確保代碼的穩定性和一致性。

通用技巧

  • 閱讀優秀代碼:閱讀和分析優秀的開源代碼,學習其中的設計思想和編程技巧。
  • 實踐和總結:通過實際編碼實踐,不斷總結經驗,形成自己的編程風格和技巧。
  • 參與社區討論:參與編程社區的討論,與他人交流經驗,獲取新的思路和技巧。

通過這些技巧的實踐和應用,你將能夠更好地理解和解決類似問題,并在編程實踐中不斷提升自己的技能。

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

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

相關文章

ISO 19110全局要求類中的/req/global/binding-constraints詳細解釋

/req/global/binding-constraints 要求: 如果模型中包含對綁定實體的約束&#xff0c;則這些約束必須由一個具有字符串值的描述屬性的約束實體&#xff08;Constraints entity&#xff09;表示。綁定實體必須通過“constrainedBy”角色鏈接到這個約束實體。 具體解釋 定義 …

修復vcruntime140.dll方法分享

修復vcruntime140.dll方法分享 最近在破解typora的時候出現了缺失vcruntime140.dll文件的報錯導致軟件啟動失敗。所以找了一番資料發現都不是很方便的處理&#xff0c;甚至有的dll處理工具還需要花錢&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff0c;我本來就是為…

python實現網頁自動化(自動登錄需要驗證的網頁)

引言: python作為實現網頁自動化的一個重要工具,其強大的各種封裝的庫使得程序運行更加簡潔,只需要下載相應的庫,然后調用庫中的函數就可以簡便的實現我們想要的網頁相關操作。 正文: 我的前幾篇文章寫了關于初學爬蟲中比較容易上手的功能,例如爬取靜態網頁的數據、動…

ThreadPoolExecutor 工作線程Worker自身鎖設計

個人博客 ThreadPoolExecutor 工作線程Worker自身鎖設計 | iwts’s blog 總集 想要完整了解下ThreadPoolExecutor&#xff1f;可以參考&#xff1a; 基于源碼詳解ThreadPoolExecutor實現原理 | iwts’s blog Worker-工作線程管理 線程池設計了內部類Worker&#xff0c;主…

【python】python知名品牌調查問卷數據分析可視化(源碼+調查數據表)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

CleanShot X - 超好用蘋果電腦截圖錄屏工具

Mac 自帶的截圖工具十分雞肋&#xff0c;不僅功能少&#xff0c;無法長截圖外&#xff0c;也不支持 GIF 制作&#xff0c;很難滿足日常做圖需求。 CleanShot X 是一款 Mac 平臺近乎無可挑剔的專業截圖錄屏工具 &#xff0c;能完美代替 Mac 自帶截圖。它提供超過 50 項功能&…

嵌入式學習——硬件(s3c2440外部中斷、定時器中斷)——day54

1. start.s preserve8area reset, code, readonlycode32entryldr pc, startnopnopnopnopnop ldr pc, interrupt_handlernopstartldr sp, 0x40001000mrs r0, cpsrbic r0, r0, #0x1Forr r0, r0, #0x12;IRQbic r0, r0, #(1 << 7);打開IRQ中斷允許msr cpsr_c, r0ldr …

【ARM CoreLink 系列 7.1 -- TZC-400 控制器 programmers model】

請閱讀【ARM CoreLink 文章專欄導讀】 文章目錄 TZC-400 programmers modelBuild configuration registerAction registerGate keeper registerSpeculation control registerInterrupt status registerTZC-400 programmers model ARM TZC-400(TrustZone地址空間控制器)是一種…

Nacos配置中心客戶端源碼分析(一): 客戶端如何初始化配置

本文收錄于專欄 Nacos 推薦閱讀&#xff1a;Nacos 架構 & 原理 文章目錄 前言一、NacosConfigBeanDefinitionRegistrar二、NacosPropertySourcePostProcessor三、AbstractNacosPropertySourceBuilder總結「AI生成」 前言 專欄前幾篇文章主要講了Nacos作為服務注冊中心相關…

zram壓縮機制看swapon系統調用

1.swapon開啟zram交換分區 swapon /dev/block/zram0 mkswap /dev/block/zram0 上面命令調用了linux的swapon系統調用啟動zram0交換分區;mkswap命令向塊設備文件/dev/block/zram0寫入了swap_header信息 問題:實際安卓平臺是哪里觸發swapon和mkswap調用的,我們已MTK8195平臺…

平衡三進制類腦計算

PS:用來記錄一些新奇又有趣的想法。。。 1、量子的世界 1.1薛定諤的貓 這感覺是個有趣的話題。 在宏觀中可以觀測到的&#xff0c;是穩定的兩種狀態&#xff0c;但隨著尺寸不斷縮小&#xff0c;直至達到微觀尺度&#xff0c;這一切都變的有趣了起來&#xff0c;一只“既死又活…

zabbix server client 安裝配置

Zabbix Server 采用源碼包部署&#xff0c;數據庫采用 MySQL8.0 版本&#xff0c;zabbix-web 使用 nginxphp 來實現。具體信息如下&#xff1a; 軟件名 版本 安裝方式 Zabbix Server 6.0.3 源碼安裝 Zabbix Agent 6.0.3 源碼安裝 MySQL 8.0.28 yum安裝 Nginx 1.20…

Ubuntu20.04安裝vimplus插件

參考文章&#xff1a; Ubuntu Linux下vimplus的安裝及使用安裝vimplus之后亂碼問題解決 1、安裝步驟&#xff1a; $ git clone https://github.com/chxuan/vimplus.git ~/.vimplus$ cd ~/.vimplus$ ./install.sh2、./install.sh 過程 出現選擇是否備份 /home/yin-roc/.vim…

一個中文和越南語雙語版本的助貸平臺開源源碼

一個中文和越南語雙語版本的助貸平臺開源源碼。后臺試nodejs。 后臺 代理 前端均為vue源碼&#xff0c;前端有中文和越南語。 前端ui黃色大氣&#xff0c;邏輯操作簡單&#xff0c;注冊可對接國際短信&#xff0c;可不對接。 用戶注冊進去填寫資料&#xff0c;后臺審批&…

庫存管理系統基于spingboot vue的前后端分離倉庫庫存管理系統java項目java課程設計java畢業設計

文章目錄 庫存管理系統一、項目演示二、項目介紹三、部分功能截圖四、部分代碼展示五、底部獲取項目源碼&#xff08;9.9&#xffe5;帶走&#xff09; 庫存管理系統 一、項目演示 庫存管理系統 二、項目介紹 基于spingboot和vue前后端分離的庫存管理系統 功能模塊&#xff…

熱題系列章節7

劍指 Offer 04. 二維數組中的查找 題目描述&#xff1a; 在一個二維數組中&#xff08;每個一維數組的長度相同&#xff09;&#xff0c;每一行都按照從左到右遞增的順序排序&#xff0c;每一列都按照從上到下遞增的順序排序。請完成一個函數&#xff0c;輸入這樣的一個二維數…

Go 語言環境搭建

本篇文章為Go語言環境搭建及下載編譯器后配置Git終端方法。 目錄 安裝GO語言SDK Window環境安裝 下載 安裝測試 安裝編輯器 下載編譯器 設置git終端方法 總結 安裝GO語言SDK Window環境安裝 網站 Go下載 - Go語言中文網 - Golang中文社區 還有 All releases - The…

策略模式在金融業務中的應用及其框架實現

引言 策略模式&#xff08;Strategy Pattern&#xff09;是一種行為設計模式&#xff0c;它允許在不修改客戶端代碼的情況下&#xff0c;動態地改變一個類的行為。它通過定義一系列算法并將它們封裝在獨立的策略類中&#xff0c;使這些算法可以互相替換&#xff0c;而不會影響…

Spark Cache 的用武之地

在什么情況下適合使用 Cache 我建議你在做決策的時候遵循以下 2 條基本原則&#xff1a; 如果 RDD/DataFrame/Dataset 在應用中的引用次數為 1&#xff0c;就堅決不使用 Cache如果引用次數大于 1&#xff0c;且運行成本占比超過 30%&#xff0c;應當考慮啟用 Cache第一條很好…

各維度卷積神經網絡內容收錄

各維度卷積神經網絡內容收錄 卷積神經網絡&#xff08;CNN&#xff09;&#xff0c;通常是指用于圖像分類的2D CNN。但是&#xff0c;現實世界中還使用了其他兩種類型的卷積神經網絡&#xff0c;即1D CNN和3D CNN。 在1D CNN中&#xff0c;內核沿1個方向移動。1D CNN的輸入和…