【人工智能】-- 搜索技術(狀態空間法)

2a20c54b85e042bfa2440367ae4807e9.gif

https://blog.csdn.net/2302_76516899?spm=1000.2115.3001.5343

個人主頁:歡迎來到?Papicatch的博客

?課設專欄 :學生成績管理系統

專業知識專欄:?專業知識?

文章目錄

🍉引言

🍈介紹

🍉狀態空間法

🍈狀態空間的構成

🍍狀態

🍍算符

🍍問題的解

🍈表示問題的步驟

🍍確定問題的初始狀態

🍍明確問題的目標狀態

🍍定義狀態的描述方式

🍍確定可能的算符

🍍建立狀態空間

🍍考慮約束條件

🍍評估和優化狀態空間表示

🍉示例

🍈十五數碼難題

🍍問題描述

🍍定義問題狀態

🍍確定操作符集合

🍍狀態空間的解

🍍代碼實現

🍈猴子和香蕉問題

🍍問題描述

🍍狀態定義

🍍操作符定義

🍍初始狀態

🍍目標狀態

🍍狀態空間

🍍解決思路

🍍代碼實現

🍉總結


2a20c54b85e042bfa2440367ae4807e9.gif

🍉引言

????????人工智能搜索技術是當今信息技術領域的一項重要突破。它利用了機器學習、自然語言處理和大數據分析等先進技術,為用戶提供更加智能、高效和精準的搜索體驗。

????????在傳統的搜索技術中,用戶需要輸入準確的關鍵詞來獲取相關信息,但往往難以準確表達自己的需求,導致搜索結果不盡人意。而人工智能搜索技術能夠理解用戶的自然語言輸入,甚至能夠根據上下文和用戶的歷史搜索行為來推測用戶的真正意圖。

🍈介紹

????????人工智能搜索是一種將人工智能技術應用于信息檢索和查找過程的方法。

????????它的核心在于利用智能算法和模型,理解用戶的需求,并從大量的數據中快速、準確地找到最相關和有用的信息。

????????與傳統的搜索方式相比,人工智能搜索不僅僅依賴于關鍵詞匹配,而是能夠深入理解用戶輸入的自然語言的含義和意圖。

????????例如,如果用戶輸入“適合老年人的輕便運動方式”,傳統搜索可能僅僅基于關鍵詞給出一些包含這些詞匯的頁面,但人工智能搜索能夠理解“老年人”“輕便”“運動方式”等關鍵元素的綜合含義,提供諸如太極、散步、廣場舞等更為精準和符合需求的結果。

????????人工智能搜索還會考慮用戶的上下文和歷史行為。比如說,如果用戶經常搜索與健康養生相關的內容,那么當他再次進行搜索時,系統會更傾向于提供與此類主題相關的結果。

其工作原理通常包括以下幾個關鍵步驟:

  1. 自然語言處理:將用戶輸入的文本轉換為機器能夠理解的形式,并提取關鍵信息。
  2. 知識圖譜和語義理解:利用知識圖譜來理解詞語之間的關系,從而更準確地把握用戶需求。
  3. 搜索算法和模型:通過各種智能算法,如深度學習算法、強化學習算法等,在大規模的數據中進行搜索和篩選。
  4. 結果排序和推薦:根據相關性、用戶偏好、信息質量等多種因素,對搜索結果進行排序和推薦。

🍉狀態空間法

🍈狀態空間的構成

  • 狀態空間法是一種用于解決問題和描述系統行為的重要方法。
  • 它將問題的可能狀態以及導致狀態之間轉換的操作或動作進行建模和表示。
  • 狀態是對問題在某一時刻的完整描述,包括了問題中所涉及的各種變量的值。例如,在一個機器人路徑規劃問題中,機器人的位置、方向、電池電量等都可以構成狀態的一部分。
  • 操作則是能夠改變狀態的動作或行為。比如機器人的向前移動、向左轉、向右轉等操作可以改變其位置和方向狀態。
  • 狀態空間可以用一個圖來表示,其中節點表示狀態,邊表示狀態之間的轉換,也就是操作的結果。
  • 通過構建狀態空間圖,我們可以對問題進行系統的分析和求解。
  • 例如,在一個八數碼謎題中,初始狀態是數字的一種排列,目標狀態是數字按特定順序的排列。我們可以定義移動數字的操作,然后通過在狀態空間中搜索從初始狀態到目標狀態的路徑來解決問題。

🍍狀態

  • 在狀態空間中,狀態是對問題在特定時刻的完整描述。它包含了問題中所涉及的各種要素和變量的具體取值。
  • 例如,在一個下棋的場景中,棋盤上棋子的布局就是一種狀態。每個棋子所在的位置、顏色等信息共同構成了這一時刻下棋的狀態。
  • 再比如,在機器人導航問題中,機器人的位置坐標、朝向、速度等參數的組合就是一個狀態。
  • 狀態能夠清晰地反映出問題在某一時刻的具體情況,是后續進行分析和決策的基礎。

🍍算符

  • 算符是用于改變狀態的操作或動作。
  • 以魔方為例,旋轉魔方的某個面就是一種算符。它會使魔方從一個狀態轉變為另一個狀態。
  • 在物流配送問題中,選擇不同的配送路線或運輸方式可以視為算符,這些操作會改變貨物的運輸狀態。
  • 算符具有明確的規則和效果,它們定義了狀態之間的可能轉換。

🍍問題的解

  • 問題的解在狀態空間中通常是指從初始狀態到目標狀態的一系列算符的組合。
  • 假設我們要在一個迷宮中找到出口,從起始點所在的狀態開始,通過一系列的移動(如向前、向左、向右等算符),最終到達出口所在的狀態,這一系列的移動步驟就是問題的解。
  • 又如在數學優化問題中,通過一系列的計算步驟(算符),使得目標函數達到最優值,這些計算步驟的組合就是問題的解。
  • 需要注意的是,可能存在多個解的情況,而最優解則是在滿足一定條件下(如最短路徑、最小成本等)最好的那個解。

🍈表示問題的步驟

🍍確定問題的初始狀態

  • 這是對問題起點的精確描述。需要仔細觀察和分析問題開始時的所有相關特征和條件。例如,在一個機器人尋路的問題中,初始狀態可能包括機器人的起始位置坐標、周圍環境的初始布局、機器人的初始能量水平等。要確保初始狀態的描述足夠詳細和準確,不遺漏任何對后續分析有重要影響的因素。
  • 舉例:在一個倉庫貨物搬運的問題中,初始狀態可能是貨物的初始擺放位置、搬運機器人的初始位置以及倉庫中通道的初始暢通情況。

🍍明確問題的目標狀態

  • 目標狀態是問題期望達到的最終結果。它應該是清晰、具體且可衡量的。對于復雜的問題,可能需要將目標分解為多個子目標。例如,在一個拼圖游戲中,目標狀態就是所有拼圖塊正確地組合在一起形成完整的圖像。
  • 舉例:在一個生產流程優化的問題中,目標狀態可能是在規定時間內以最低成本生產出一定數量且質量合格的產品。

🍍定義狀態的描述方式

  • 選擇合適的方法來準確表示問題中的每個狀態。這可能涉及到對數據結構和數學模型的選擇。狀態描述應該能夠捕捉到問題的關鍵特征,并且便于后續的操作和比較。例如,可以使用向量、矩陣、圖結構或者對象等數據結構來表示狀態。
  • 舉例:對于一個棋局問題,可以用一個二維數組來表示棋盤上棋子的分布情況作為狀態。

🍍確定可能的算符

  • 算符是能夠改變當前狀態的操作或動作。需要全面考慮所有可能的有效操作,并明確它們對狀態的具體影響。這些算符應該是基于問題的實際情況和規則來確定的。例如,在一個數獨游戲中,算符可以是在空白格子中填入合法的數字。
  • 舉例:在一個路徑規劃問題中,算符可以是向八個方向(上、下、左、右、左上、右上、左下、右下)移動一格。

🍍建立狀態空間

  • 將所有可能的狀態以及它們之間通過算符產生的轉換關系構建成一個整體的空間或圖。這需要對每個狀態和算符進行系統的梳理和組織。狀態空間的構建有助于直觀地理解問題的復雜性和可能的解決方案路徑。
  • 舉例:在一個迷宮問題中,狀態空間可以表示為迷宮中所有可能的位置以及從一個位置到另一個位置的可行移動。

🍍考慮約束條件

  • 約束條件是對狀態轉換和操作的限制。它們通常基于問題的物理、邏輯或資源限制等方面。例如,在資源分配問題中,可能存在資金、人力或時間的限制;在機器人運動問題中,可能存在障礙物或運動范圍的限制。
  • 舉例:在一個背包問題中,約束條件可能是背包的容量限制和物品的重量。

🍍評估和優化狀態空間表示

  • 對構建好的狀態空間表示進行檢查和評估,看其是否清晰、準確地反映了問題,是否便于進行搜索和求解。如果發現存在問題,如狀態描述過于復雜、算符定義不清晰或狀態空間規模過大等,需要對其進行優化和改進。
  • 舉例:如果在一個優化問題中,初始的狀態空間表示導致搜索效率低下,可以通過簡化狀態描述、減少不必要的算符或采用更有效的數據結構來優化狀態空間。

🍉示例

🍈十五數碼難題

🍍問題描述

????????十五數碼難題是在一個 4×4 的方格盤上,放有 15 個數碼(1 到 15),剩下一個位置為空(用 0 表示),允許空格周圍的數碼移至空格,通過移動數碼來將初始狀態轉變為目標狀態。

以下是用狀態空間法表示十五數碼難題的具體步驟:

🍍定義問題狀態

  • 初始狀態:S4×4 = 5,12,11,4,13,6,3,10,14,2,7,9,1,15,0,8 (其中 0 表示空格)
  • 目標狀態:G4×4 = 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0

🍍確定操作符集合

  • 操作符集合 F = {空格上移,空格下移,空格左移,空格右移}。這些操作可以改變空格的位置,從而產生新的狀態。

🍍狀態空間的解

  • 是一個有限的操作算子序列,它能使初始狀態轉化為目標狀態,即 S0 - f1 - S1 - f2 -... - fk - G。

????????例如,對于某個具體的十五數碼初始布局,通過不斷應用空格上移、下移、左移或右移這些操作,逐步改變狀態,最終達到目標狀態的過程,就是在狀態空間中搜索解的過程。

????????在解決十五數碼難題時,可以使用各種搜索算法,如 A*算法等,來找到從初始狀態到目標狀態的最優或較優的移動數碼序列。

????????以 A*算法為例,其基本原理是在搜索的每一步都利用估價函數 f(n) = g(n) + h(n) 對 open 表中的節點進行排序,以找出最有希望的節點作為下一次擴展的節點。其中 g(n) 是在狀態空間中從初始狀態到狀態 n 的實際代價,h(n) 是從狀態 n 到目標狀態的最佳路徑的估計代價(啟發函數)。

算法過程大致如下:

  1. 讀入初始狀態和目標狀態,并計算初始狀態評價函數值 f。
  2. 初始化 open 表和 closed 表,將初始狀態放入 open 表中。
  3. 如果 open 表為空,則查找失敗;否則:
    • 在 open 表中找到評價值最小的節點,作為當前結點,并放入 closed 表中。
    • 判斷當前結點狀態和目標狀態是否一致,若一致,跳出循環;否則進行下一步。
    • 對當前結點,分別按照上、下、左、右方向移動空格位置來擴展新的狀態結點,并計算新擴展結點的評價值 f 并記錄其父節點。
    • 對于新擴展的狀態結點,進行如下操作:
      • 新節點既不在 open 表中,也不在 closed 表中,則添加進 open 表。
      • 新節點在 open 表中,則計算評價函數的值,取最小的。
      • 新節點在 closed 表中,則計算評價函數的值,取最小的。
    • 把當前結點從 open 表中移除。

????????在實現 A*算法時,需要定義狀態節點類,包含深度、啟發距離、狀態、哈希值、父節點等屬性,還需實現生成子節點、計算距離函數(啟發函數 h(n))、計算評價函數 f(n) 等函數。

????????計算距離函數(啟發函數 h(n))可采用不同的方法,如曼哈頓距離(計算每一個位置的數據與它理論位置的橫縱坐標距離之和)或歐氏距離(計算每一個位置的數據與它理論位置的直線距離之和)等。評價函數 f(n) 通常取 f(n) = g(n) + h(n),其中 g(n) 為當前結點的深度,h(n) 為啟發距離。通過不斷從 open 表中選擇評價值最小的節點進行擴展,最終找到從初始狀態到目標狀態的最優路徑。

🍍代碼實現

import heapq
import copy# 計算曼哈頓距離作為啟發函數
def manhattan_distance(state, goal_state):distance = 0for i in range(4):for j in range(4):value = state[i][j]if value!= 0:goal_row, goal_col = divmod(value - 1, 4)distance += abs(i - goal_row) + abs(j - goal_col)return distance# 檢查狀態是否合法(每個數字只出現一次)
def is_valid_state(state):flat_state = [item for sublist in state for item in sublist]return len(set(flat_state)) == 16# 檢查狀態是否為目標狀態
def is_goal_state(state, goal_state):return state == goal_state# 生成可能的子狀態
def generate_children(state):children = []zero_row, zero_col = None, Nonefor i in range(4):for j in range(4):if state[i][j] == 0:zero_row, zero_col = i, jbreakdirections = [(0, -1), (0, 1), (-1, 0), (1, 0)]  # 左、右、上、下for dr, dc in directions:new_row, new_col = zero_row + dr, zero_col + dcif 0 <= new_row < 4 and 0 <= new_col < 4:new_state = copy.deepcopy(state)new_state[zero_row][zero_col] = new_state[new_row][new_col]new_state[new_row][new_col] = 0if is_valid_state(new_state):children.append(new_state)return children# A* 搜索算法
def a_star_search(initial_state, goal_state):open_set = [(manhattan_distance(initial_state, goal_state), 0, initial_state)]closed_set = set()parent = {tuple(map(tuple, initial_state)): None}while open_set:_, cost, current_state = heapq.heappop(open_set)closed_set.add(tuple(map(tuple, current_state)))if is_goal_state(current_state, goal_state):path = []while current_state is not None:path.append(current_state)current_state = parent[tuple(map(tuple, current_state))]return list(reversed(path))children = generate_children(current_state)for child in children:child_tuple = tuple(map(tuple, child))if child_tuple not in closed_set:new_cost = cost + 1priority = new_cost + manhattan_distance(child, goal_state)if child_tuple not in parent or new_cost < cost:parent[child_tuple] = current_stateheapq.heappush(open_set, (priority, new_cost, child))return None# 打印狀態
def print_state(state):for row in state:print(row)if __name__ == "__main__":# 初始狀態initial_state = [[5, 1, 2, 4],[9, 6, 3, 8],[13, 7, 10, 11],[0, 14, 15, 12]]# 目標狀態goal_state = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11, 12],[13, 14, 15, 0]]solution = a_star_search(initial_state, goal_state)if solution:for state in solution:print("Step:")print_state(state)print("-" * 20)else:print("No solution found.")

🍈猴子和香蕉問題

????????猴子和香蕉問題是人工智能中一個經典的問題表述,通常用于說明狀態空間搜索和規劃的概念。

以下是對猴子和香蕉問題的詳細分析:

🍍問題描述

????????房間里有一只猴子、一個箱子和掛在天花板上夠不著的香蕉。猴子可以在房間里走動、推箱子、爬上箱子夠到香蕉。

🍍狀態定義

  1. 猴子的位置(比如地面上的不同位置或在箱子上)。
  2. 箱子的位置。
  3. 猴子是否在箱子上。

????????例如,可以用以下方式表示狀態:

  • (猴子在地面 A 點,箱子在地面 B 點,猴子不在箱子上)
  • (猴子在地面 C 點,箱子在地面 C 點,猴子在箱子上)

🍍操作符定義

  1. goto(x):猴子從當前位置走到位置?x
  2. pushbox(x):猴子將箱子推到位置?x(前提是猴子和箱子在同一位置)。
  3. climbbox:猴子爬上箱子(前提是猴子和箱子在同一位置且猴子在地面)。
  4. grasp:猴子在箱子上時抓取香蕉(前提是猴子在箱子上且箱子在香蕉正下方)。

🍍初始狀態

(猴子在地面 A 點,箱子在地面 B 點,猴子不在箱子上)

🍍目標狀態

(猴子在箱子上且箱子在香蕉正下方,猴子抓取到香蕉)

🍍狀態空間

  • 由所有可能的合法狀態以及狀態之間通過操作符的轉換關系構成。狀態空間的規模取決于對位置的細分程度和問題的復雜設定。

🍍解決思路

  • 通過在狀態空間中應用操作符,從初始狀態逐步搜索到目標狀態。例如,先將猴子移動到箱子所在位置,然后推動箱子到合適位置,爬上箱子抓取香蕉。
  • 在實際解決過程中,可以使用不同的搜索算法,如廣度優先搜索、深度優先搜索或 A* 算法等來尋找從初始狀態到目標狀態的路徑。
  • 以廣度優先搜索為例,它會逐層地探索狀態空間,先訪問距離初始狀態較近的狀態,逐步擴展到更遠的狀態。在搜索過程中,需要維護一個已訪問狀態的集合,以避免重復訪問和陷入死循環。

🍍代碼實現

from collections import deque# 定義狀態類
class State:def __init__(self, monkey_pos, box_pos, on_box, has_banana):self.monkey_pos = monkey_posself.box_pos = box_posself.on_box = on_boxself.has_banana = has_bananadef __eq__(self, other):return (self.monkey_pos == other.monkey_pos and self.box_pos == other.box_pos andself.on_box == other.on_box and self.has_banana == other.has_banana)def __hash__(self):return hash((self.monkey_pos, self.box_pos, self.on_box, self.has_banana))def __str__(self):return f"Monkey at {self.monkey_pos}, Box at {self.box_pos}, On Box: {self.on_box}, Has Banana: {self.has_banana}"# 定義操作符
def goto(state, new_pos):if state.monkey_pos!= new_pos:new_state = State(new_pos, state.box_pos, state.on_box, state.has_banana)return new_statereturn Nonedef pushbox(state, new_pos):if state.monkey_pos == state.box_pos and new_pos!= state.box_pos:new_state = State(new_pos, new_pos, state.on_box, state.has_banana)return new_statereturn Nonedef climbbox(state):if state.monkey_pos == state.box_pos and not state.on_box:new_state = State(state.monkey_pos, state.box_pos, True, state.has_banana)return new_statereturn Nonedef grasp(state):if state.monkey_pos == state.box_pos and state.on_box and not state.has_banana:new_state = State(state.monkey_pos, state.box_pos, state.on_box, True)return new_statereturn None# 廣度優先搜索函數
def breadth_first_search(initial_state, goal_state):queue = deque([initial_state])visited = set()while queue:current_state = queue.popleft()if current_state == goal_state:return Truevisited.add(current_state)new_states = [goto(current_state, new_pos) for new_pos in ["A", "B", "C"] if goto(current_state, new_pos)]new_states += [pushbox(current_state, new_pos) for new_pos in ["A", "B", "C"] if pushbox(current_state, new_pos)]new_states += [climbbox(current_state) if climbbox(current_state)]new_states += [grasp(current_state) if grasp(current_state)]for new_state in new_states:if new_state not in visited:queue.append(new_state)return False# 定義初始狀態和目標狀態
initial_state = State("A", "B", False, False)
goal_state = State("C", "C", True, True)# 執行搜索
if breadth_first_search(initial_state, goal_state):print("Solution found!")
else:print("No solution found.")

🍉總結

????????狀態空間法是一種強大而系統的問題解決和分析方法

????????它的核心在于通過對問題狀態的精確描述、操作符的定義以及狀態空間的構建,來全面理解和解決問題。

????????首先,狀態的清晰定義能夠準確捕捉問題在不同時刻的具體情況,為后續的分析提供基礎。

操作符則規定了狀態之間的轉換方式,使我們能夠從一個狀態過渡到另一個狀態。

????????通過構建狀態空間,將所有可能的狀態以及它們之間的轉換關系以直觀的方式呈現出來,有助于我們從整體上把握問題的復雜性和潛在的解決方案。

????????狀態空間法具有廣泛的應用,適用于各種領域的問題,如人工智能中的搜索和規劃、工程系統的建模與控制、游戲策略的制定等。

????????它不僅能夠幫助我們找到問題的解,還能在解的過程中揭示問題的結構和特點。

????????然而,狀態空間法也面臨一些挑戰。對于復雜問題,狀態空間可能會變得非常龐大,導致計算和搜索的難度增加。因此,在實際應用中,常常需要結合啟發式信息、剪枝策略和優化算法來提高求解效率。

????????總的來說,狀態空間法為解決復雜問題提供了一種有條理、全面且可操作的框架,是許多領域中不可或缺的工具。

2a20c54b85e042bfa2440367ae4807e9.gif

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

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

相關文章

搜維爾科技:觸覺反饋數據手套CyberGlove擊鼓測試

觸覺反饋數據手套CyberGlove擊鼓測試 搜維爾科技&#xff1a;觸覺反饋數據手套CyberGlove擊鼓測試

辦公助手推薦?

辦公助手來啦&#xff01;? 辦公助手來啦&#xff01;?&#x1f31f; 主要亮點&#x1f4dd; 全新PDF編輯器&#x1f3a8; 豐富的幻燈片版式&#x1f30d; 改進的從右至左顯示&#x1f310; 新增本地化選項 &#x1f4ca; 應用場景在線辦公套件&#x1f4f1; 多平臺支持&…

IEC62056標準體系簡介-1.引言

隨著微電子技術和信息技術的發展&#xff0c;電力系統由智能計量儀表、自動化裝置、現代通信設備等組成的各類系統逐步取代過去由感應系計量表計、手動裝置、人工操作等組成的運行模式。為滿足電力市場變革和用戶管理中的抄表&#xff08;含自動&#xff09;、用戶服務、價格表…

torch.autograd.Function自定義前向傳播和反向傳播

torch.autograd.Function 是 PyTorch 提供的一個接口&#xff0c;用于自定義前向傳播和反向傳播的操作。自定義操作需要繼承 torch.autograd.Function 并重載 forward 和 backward 方法。 下面是一個簡單的示例&#xff0c;展示如何自定義一個平方操作的前向傳播和反向傳播。 …

idea創建dynamic web project

由于網課老師用的是eclipse,所以又得自己找教程了…… 解決方案&#xff1a; https://blog.csdn.net/Awt_FuDongLai/article/details/115523552

20240709每日后端--------最優解決Invalid bound statement (not found)

目標 最優解決Invalid bound statement (not found) 步驟 1、打包 2、查看target下是否成雙成對出現 3、核對無誤后&#xff0c;即可解決問題。

軟考高級里《系統架構設計師》容易考嗎?

我還是22年通過的架構考試。系統架構設計師屬于軟考高級科目&#xff0c;難度比初級和中級都要大&#xff0c;往年的通過率也比較低&#xff0c;一般在10-20%左右。從總體來說&#xff0c;這門科目確實是不好過的&#xff0c;大家如果想要備考系統架構設計師的話&#xff0c;還…

Kithara和OpenCV (一)

Kithara使用 OpenCV 目錄 Kithara使用 OpenCV簡介需求和支持的環境構建 OpenCV 庫使用 CMake 進行配置以與 Kithara 一起工作 使用 OpenCV 庫設置項目運行 OpenCV 代碼圖像采集和 OpenCV自動并行化限制和局限性1.系統建議2.實時限制3.不支持的功能和缺失的功能4.顯示 OpenCV 對…

【技術選型】FastDFS、OSS如何選擇

【技術選型】FastDFS、OSS如何選擇 開篇詞&#xff1a;干貨篇&#xff1a;FastDFS&#xff1a;OSS&#xff08;如阿里云OSS&#xff09;&#xff1a; 總結篇&#xff1a;我是杰叔叔&#xff0c;一名滬漂的碼農&#xff0c;下期再會&#xff01; 開篇詞&#xff1a; 文件存儲該選…

簡談設計模式之原型模式

原型模式是一種創建型設計模式, 用于創建對象, 而不必指定它們所屬的具體類. 它通過復制現有對象 (即原型) 來創建新對象. 原型模式適用于當創建新對象的過程代價較高或復雜時, 通過克隆現有對象來提高性能 原型模式結構 原型接口. 聲明一個克隆自身的接口具體原型. 實現克隆…

【鴻蒙學習筆記】屬性學習迭代筆記

這里寫目錄標題 TextImageColumnRow Text Entry Component struct PracExample {build() {Row() {Text(文本描述).fontSize(40)// 字體大小.fontWeight(FontWeight.Bold)// 加粗.fontColor(Color.Blue)// 字體顏色.backgroundColor(Color.Red)// 背景顏色.width(50%)// 組件寬…

展開說說:Android服務之實現AIDL跨應用通信

前面幾篇總結了Service的使用和源碼執行流程&#xff0c;這里再簡單分析一下如果需要Service跨進程通信該怎樣做。AIDL&#xff08;Android Interface Definition Language&#xff09;Android接口定義語言&#xff0c;用于實現 Android 兩個進程之間進行進程間通信&#xff08…

Clickhouse的聯合索引

Clickhouse 有了單獨的鍵索引&#xff0c;為什么還需要有聯合索引呢&#xff1f;了解過mysql的兄弟們應該都知道這個事。 對sql比較熟悉的兄弟們估計看見這個聯合索引心里大概有點數了&#xff0c;不過clickhouse的聯合索引相比mysql的又有些不一樣了&#xff0c;mysql 很遵循最…

深入解析Spring Boot的application.yml配置文件

目錄 引言Spring Boot配置文件簡介 application.yml的優點 基本結構與語法 YAML語法基礎Spring Boot中application.yml的基本結構 常見配置項詳解 服務器配置數據源配置日志配置其他常見配置 環境配置與Profile 多環境配置激活Profile 高級配置與技巧 屬性的占位符替換自定義配…

Spring源碼二十:Bean實例化流程三

上一篇Spring源碼十九&#xff1a;Bean實例化流程二中&#xff0c;我們主要討論了單例Bean創建對象的主要方法getSingleton了解到了他的核心流程無非是&#xff1a;通過一個簡單工廠的getObject方法來實例化bean&#xff0c;當然spring在實例化前后提供了擴展如&#xff1a;bef…

第5章-組合序列類型

#全部是重點知識&#xff0c;必須會。 了解序列和索引|的相關概念 掌握序列的相關操作 掌握列表的相關操作 掌握元組的相關操作 掌握字典的相關操作 掌握集合的相關操作1&#xff0c;序列和索引 1&#xff0c;序列是一個用于存儲多個值的連續空間&#xff0c;每一個值都對應一…

升級之道:精通Conda的自我升級藝術

升級之道&#xff1a;精通Conda的自我升級藝術 引言 Conda是Python和其他科學計算語言的強大包管理器&#xff0c;它不僅管理著包的安裝和依賴&#xff0c;還負責自身的更新。隨著開源社區的不斷發展&#xff0c;Conda定期發布新版本以修復已知問題、增加新功能和提高性能。本…

[面試愛問] https 的s是什么意思,有什么作用?

HTTPS 中的 "S" 代表 "Secure"&#xff0c;即安全的意思。HTTPS&#xff08;全稱是 HyperText Transfer Protocol Secure&#xff09;是HTTP&#xff08;HyperText Transfer Protocol&#xff09;的安全版本&#xff0c;主要作用是為互聯網通信提供安全保護…

靈活多變的對象創建——工廠方法模式(Python實現)

1. 引言 大家好&#xff0c;又見面了&#xff01;在上一篇文章中&#xff0c;我們聊了聊簡單工廠模式&#xff0c;今天&#xff0c;我們要進一步探討一種更加靈活的工廠設計模式——工廠方法模式。如果說簡單工廠模式是“萬能鑰匙”&#xff0c;那工廠方法模式就是“變形金剛”…

生成式人工智能:助攻開發者還是取代開發者?

引言 近年來&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;在軟件開發領域掀起了一場革命&#xff0c;為開發者帶來了全新的工具和可能性。從代碼生成、錯誤檢測到自動化測試&#xff0c;AI正在以各種方式改變著開發者的工作方式。然而&#xff0c;這也引發了人們對開…