合縱連橫: 從DP框架理解 最佳股票買賣系列題 的背後本質

閱讀時間約 21 分鐘

這篇文章,會帶著大家複習以前學過的FSM+DP框架
並且以有限狀態機 + DP狀態轉移的概念為核心,

貫穿一些相關聯最佳股票買賣系列的題目,
透過框架複現來幫助讀者理解這個實用的演算法框架。


基本的FSM + DP 框架,配合交易邏輯。


針對每一天,其實歸根究柢只有兩種狀態

第一種手上都持有現金。

第二種手上持有股票


每天進行的動作,也只有兩種可能情況:
假如今天結束的時候,是都持有現金
代表昨天就已經持有現金今天繼續持有;或者,昨天持有股票,今天選擇賣出股票

假如今天結束的時候,是持有股票
代表昨天就已經持有股票今天繼續抱著;或者,昨天持有現金,今天選擇買入股票


寫成虛擬碼或者演算法的話,可以這樣表達

DP[day_d, KeepCash] 
= max( DP[day_d-1, KeepCash], DP[day_d-1, HoldStack] + stockPrice[day_d] )

DP[day_d, HoldStock]
= max( DP[day_d-1, HoldStock], DP[day_d-1, KeepCash] - stockPrice[day_d] )


接下來,我們會用這個上面這種結構,貫穿一些同類型,有關聯的題目
(請讀者、或觀眾留意上面的這種 FSM+ DP 動態規劃 框架,之後的解說會反覆出現)


FSM有限狀態機 + DP 動態規劃框架 示意圖

raw-image

打鐵趁熱,現在來看最佳股票買賣系列題第一題。

Best time to buy and sell stock


這題的限制條件是只能做一組交易(也就是一次買入,一次賣出)。

只有一次買入,相當於會從某一天選擇買入,之後就只能選另一天賣出了。

某一天買入之前一定是沒賺沒賠,所以寫成式子就是 0 - stock_price


最後用FSM+DP框架的思考邏輯寫成程式碼,就是下方這個樣子

    
class Solution:
def maxProfit(self, prices: List[int]) -> int:

# It is impossible to have stock to sell on first day, so -infinity is set as initial value
cur_hold, cur_cash = -float('inf'), 0


for stock_price in prices:

prev_hold, prev_cash = cur_hold, cur_cash

# either keep in hold, or just buy today with stock price
cur_hold = max(prev_hold, 0-stock_price)

# either keep in cash, or just sell today with stock price
cur_cash = max(prev_cash, prev_hold + stock_price)


# max profit must be in Cash state
return cur_cash

接著來看變化題,最佳股票買賣系列題第二題。

Best time to buy and sell stock II

這題比較寬鬆,不限制交易組數,也就是可以交易任意多組
買入股票n次,賣出股票n次。

也就是說,某一天才買入的狀態會相依於前一天現金部位的狀態

所以寫成式子就是 dp[day-1, KEEP_CASH] - stock_price


最後用FSM+DP框架的思考邏輯寫成程式碼,就是下方這個樣子

class Solution:
def maxProfit(self, prices: List[int]) -> int:

# Use constant literal to help reader understand source code below.
HOLD_STOCK, KEEP_CASH = 0, 1

## Dictionary (Hash table)
# key: (day, state) pair
# value: coreesponding maximal profit
dp = {}

# No free lunch, it is impoosible to have stock before first trading day
dp[-1, HOLD_STOCK] = -math.inf

# No gain, no loss before first trading day
dp[-1, KEEP_CASH] = 0

# For each day with corresponding stock price in stock market
for day, stock_price in enumerate(prices):

# If today we have stock, either we already had it yesterday, or we just buy stock and hold it today.
dp[day, HOLD_STOCK] = max( dp[day-1, HOLD_STOCK], dp[day-1, KEEP_CASH] - stock_price)

# If today we keep cash, either we already kept cash yesterday, or we just sell out stock today
dp[day, KEEP_CASH] = max( dp[day-1, KEEP_CASH], dp[day-1, HOLD_STOCK] + stock_price)

#---------------------------------------------------------------
# To get maximal realized profit, final state must be KEEP_CASH.
last_day = len(prices)-1
return dp[last_day, KEEP_CASH]

Best time to buy and sell stock II 空間優化的程式碼實作

仔細觀察,可以發現每天的狀態只依賴前一天的狀態去更新

因此,可以用之前學過的狀態壓縮的技巧,把表格拿掉,
改成只用變數儲存狀態,節省空間,從O(n)空間降到O(1)常數級別。

class Solution:
def maxProfit(self, prices: List[int]) -> int:

# It is impossible to sell stock on first day, set -infinity as initial value for cur_hold
cur_hold, cur_cash = -float('inf'), 0

for stock_price in prices:

prev_hold, prev_cash = cur_hold, cur_cash

# either keep hold, or buy in stock today at stock price
cur_hold = max( prev_hold, prev_cash - stock_price )

# either keep cash, or sell out stock today at stock price
cur_cash = max( prev_cash, prev_hold + stock_price )

# maximum profit must be in Cash state
return cur_cash

有了狀態圖以後,再回來看程式碼清晰許多了,對吧!

接下來,為了再更逼真一點延伸題就是把交易的額外成本fee(稅, 手續費)也加入考量

延伸題就是

Best time to buy and sell stock with transaction fee

那也很容易,我們就在每組交易進行的時候,額外多扣一個費用fee即可。


註: 不失一般性,我們選擇在買入股票時付出額外的交易成本費用fee
讀者想要在賣出時扣掉也可以,可以試著改改看,也能通過測試


Best time to buy and sell stock with transaction fee 程式碼實作

class Solution:
def maxProfit(self, prices: List[int], fee: int) -> int:

cur_hold, cur_cash = -math.inf, 0

for stock_price in prices:

prev_hold, prev_cash = cur_hold, cur_cash

# either keep cash, or sell out today at stock price
cur_cash = max(prev_cash, prev_hold + stock_price )

# either keep hold, or buy in today at stock price and pay transaction fee for this trade
cur_hold = max(prev_hold, prev_cash - stock_price - fee)

# maximum profit must be in not-hold state
return cur_cash

好,接著來看進階題,最佳股票買賣系列題第三題。

Best time to buy and sell stock III

這題的限制條件是最多只能兩組交易(也就是各兩次買入,各兩次賣出)。

也就是說,第i次的買入並且持有股票的狀態,
前面會相依於第(i-1)次賣出並且持有現金的狀態。

所以寫成式子就是 dp[KEEP_CASH, i-1] - stock_price


最後用FSM+DP框架的思考邏輯寫成程式碼,就是下方這個樣子

class Solution:
def maxProfit(self, prices: List[int]) -> int:

HOLD_STOCK, KEEP_CASH = 0, 1

# dictionary
# key: state, kth-transaction
# value: corresponding profit
dp = defaultdict(int)

# No free lunch, impoosible to have stock before first trading day
dp[(HOLD_STOCK, 0)] = -math.inf
dp[(HOLD_STOCK, 1)] = -math.inf
dp[(HOLD_STOCK, 2)] = -math.inf


for stock_price in prices:

## For 1st transaction:
# Either we kept cash already, or we just sell out stock today
dp[KEEP_CASH, 1] = max(dp[KEEP_CASH, 1], dp[HOLD_STOCK, 1] + stock_price )

# Either we had stock already, or we just buy in stock today ( add one more transaction)
dp[HOLD_STOCK, 1] = max(dp[HOLD_STOCK, 1], dp[KEEP_CASH, 0] - stock_price)

## For 2nd transaction:
# Either we kept cash already, or we just sell out stock today
dp[KEEP_CASH, 2] = max(dp[KEEP_CASH, 2], dp[ HOLD_STOCK, 2] + stock_price)

# Either we had stock already, or we just buy in stock today ( add one more transaction)
dp[HOLD_STOCK, 2] = max(dp[HOLD_STOCK, 2], dp[KEEP_CASH, 1] - stock_price)

# Maximal profit must be KEEP_CASH on last day
# (This means we cash out and sell stocks finally)
return dp[KEEP_CASH, 2]


仔細觀察,其實for loop裡面包含著一個階梯迭代更新的關係。

第i組的交易狀態更新,只依賴第i組和第i-1組的狀態。

抽象化+結構化,可以寫成這個形式

for trans in range(1, k+1):

dp[HOLD_STOCK, trans] = max( dp[HOLD_STOCK, trans], dp[KEEP_CASH, trans-1 ] - stock_price )

dp[KEEP_CASH, trans] = max( dp[KEEP_CASH, trans], dp[HOLD_STOCK, trans] + stock_price )

寫成這個形式,也相當於推廣成

最多只能k組交易下的最佳股票買賣模式

當我們推導出這個通則的時候,其實無形中已經把下一題也解出來了! XD


下一題就是

Best time to buy and sell stock IV

這題的限制條件是最多只能k組交易(也就是各k次買入,各k次賣出)。

這邊承接第剛剛上面推導出來的通則,順著寫下來即可。

class Solution:
def maxProfit(self, k: int, prices: List[int]) -> int:

n = len(prices)

HOLD_STOCK, KEEP_CASH = 0, 1

dp = defaultdict(int)
for k in range (0, k+1):
dp[HOLD_STOCK, k] = -math.inf

for stock_price in prices:

for trans in range(1, k+1):
dp[HOLD_STOCK, trans] = max( dp[HOLD_STOCK, trans], dp[KEEP_CASH, trans-1 ] - stock_price )

dp[KEEP_CASH, trans] = max( dp[KEEP_CASH, trans], dp[HOLD_STOCK, trans] + stock_price )

return dp[KEEP_CASH, k]

萬變不離其宗,其實DP狀態轉移的觀念其實都是相通的。


最後一題是一個延伸變化題

Best Time to Buy and Sell Stock with Cooldown

這題的也是不限制交易組數,也就是可以交易任意多組

買入股票n次,賣出股票n次。

也就是說,某一天才買入的狀態會相依於前一天現金部位的狀態


但是,多了一個冷卻條件,
股票賣出之後,會強迫進入冷卻日一天,冷卻日的次日才可以再買入股票


畫成FSM有限狀態機的狀態圖就是

raw-image

順著狀態圖的更新邏輯寫下迭代耕新的程式碼即可

class Solution:
def maxProfit(self, prices: List[int]) -> int:

# initialization
cool_down, sell, hold = 0, 0, -float('inf')

for stock_price_of_Day_i in prices:

prev_cool_down, prev_sell, prev_hold = cool_down, sell, hold

# Max profit of cooldown on Day i comes from either cool down of Day_i-1, or sell out of Day_i-1 and today Day_i is cooling day
cool_down = max(prev_cool_down, prev_sell)

# Max profit of sell on Day_i comes from hold of Day_i-1 and sell on Day_i
sell = prev_hold + stock_price_of_Day_i

# Max profit of hold on Day_i comes from either hold of Day_i-1, or cool down on Day_i-1 and buy on Day_i
hold = max(prev_hold, prev_cool_down - stock_price_of_Day_i)


# The action of final trading day must be either sell or cool down
return max(sell, cool_down)

可以視為Best time to buy and sell stock II的延伸題(多了額外的冷卻條件)


結語

好,今天一口氣介紹了最精華的部分,

通用的FSM有限狀態機 + DP狀態轉移框架,還有相關的衍伸變化題與演算法建造流程。


希望能幫助讀者、觀眾徹底理解它的原理,

並且能夠舉一反三,洞察其背後的本質和了解相關的應用領域!


感謝收看囉! 我們下篇文章再見~

82會員
417Content count
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
最近會試著寫一些統整類的文章, 幫助讀者、觀眾整理、吸收、複習已經學習到的演算法框架。 找零錢框架 在以前學過的題目中,我們已經學會了考零錢的抽象思考邏輯與框架,就是試著用每一種銅板去湊出n元(也就是找零錢的過程) 寫成虛擬碼或演算法,找零錢用了幾枚銅板可以這樣表達 # 銅板數目累加​
題目敘述 給定一個正整數n,請找出最少用幾個完全平方數,可以讓他們的總和為n? 例如 n=12,最少用3個完全平方數就可讓他們的總和為n,因為12 = 4 + 4 + 4 題目的原文敘述 測試範例 Example 1: Input: n = 12 Output: 3 Explanat
題目敘述 題目會給我們一個輸入陣列nums,和一個指定的k值。 請問,在輸入陣列nums中,有幾個子陣列的元素總合恰好為k ? 例如: nums = [1,2,3], k = 3 則有兩個子陣列的元素總合為3,分別是[1,2] 和 [3] 如果是第一次聽到或接觸前綴和prefix的同學
題目敘述 題目會給定我們一個字串s,和一組字庫wordDict。 問我們能不能透過字串串接的方式,從字庫裡面的字拼成原本的字串s? 可以的話,返回True。 無解的話,返回False。 註: 題目還允許重複使用字庫裡面的字去串接。
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
題目敘述 題目會給我們一個二維陣列matrix,分別代表每個格子的成本,請問我們從最頂端到底部的下墜路徑的最小成本總和是多少? 每次下墜到下一排的時候,可以有三種選擇: 1.往左下角移動。 2.往正下方移動。 3.往右下角移動。 題目的原文敘述 測試範例 Example 1:
最近會試著寫一些統整類的文章, 幫助讀者、觀眾整理、吸收、複習已經學習到的演算法框架。 找零錢框架 在以前學過的題目中,我們已經學會了考零錢的抽象思考邏輯與框架,就是試著用每一種銅板去湊出n元(也就是找零錢的過程) 寫成虛擬碼或演算法,找零錢用了幾枚銅板可以這樣表達 # 銅板數目累加​
題目敘述 給定一個正整數n,請找出最少用幾個完全平方數,可以讓他們的總和為n? 例如 n=12,最少用3個完全平方數就可讓他們的總和為n,因為12 = 4 + 4 + 4 題目的原文敘述 測試範例 Example 1: Input: n = 12 Output: 3 Explanat
題目敘述 題目會給我們一個輸入陣列nums,和一個指定的k值。 請問,在輸入陣列nums中,有幾個子陣列的元素總合恰好為k ? 例如: nums = [1,2,3], k = 3 則有兩個子陣列的元素總合為3,分別是[1,2] 和 [3] 如果是第一次聽到或接觸前綴和prefix的同學
題目敘述 題目會給定我們一個字串s,和一組字庫wordDict。 問我們能不能透過字串串接的方式,從字庫裡面的字拼成原本的字串s? 可以的話,返回True。 無解的話,返回False。 註: 題目還允許重複使用字庫裡面的字去串接。
題目敘述 題目會給定一個指定高度和寬的方格版,還有一顆小球的起始位置,和最大移動步數。 小球每一步可以選擇向上、下、左、右移動一格,請問小球能走到方格版界外的路徑方法數總共有幾種? 方法數可能很大,題目要求,最後回傳答案時,先對10^9+7做除法取餘數再回傳。 題目的原文敘述 約束條件
題目敘述 題目會給我們一個二維陣列matrix,分別代表每個格子的成本,請問我們從最頂端到底部的下墜路徑的最小成本總和是多少? 每次下墜到下一排的時候,可以有三種選擇: 1.往左下角移動。 2.往正下方移動。 3.往右下角移動。 題目的原文敘述 測試範例 Example 1:
本篇參與的主題策展
國統 9/11 召開法說會,之後股價連 3 漲表現不錯,只要基本面不變我持股續抱。法說會影音並沒有最重要的 QA,剛好幾位熱心網友提供券商投信的資料給我,再加上網路資訊整理成本文。目前時序 9 月處於豐水期 5~10 月的尾聲,根據公司法說會表示 ......
「西瓜偎大平」這句話真正的含意是:西瓜這種水果,有一種特質,就是「扶強不扶弱」,身體好的人愈吃愈補,身體虛的人則愈吃愈虛,這才是「偎大平」的真正涵義。
終於開始看施昇輝老師的書了,之前主要是看他在節目上發言,這次算是靜下來真的第一次看他的書。這算是他特別為了小資族打造的書,所以針對的收入跟各種也走向小資,力求簡單無腦投資,捨棄一些不需要的動作。下面就來看看書中我覺得很不錯的概念吧。
市值型ETF包括美股和臺股,美股因手續費推薦長抱,而臺股則適合進出。不斷買進又賣出可能錯過配發股息和獲利時機,增加成本。定期定額投資則能享受複利效應,建議躺平投資以獲得最大效益。結論永遠留在市場享受複利,若需要現金流可配置到市值型ETF或債券型ETF,不要必須賣股換現金。
在高股息ETF的投資中,重要的是要找到適合的買入時間和賣出時間。一般來說,計算股價和股利的比值可以判斷是否適合買入,而在賣出時,可以以總股利收益作為參考。股票投資的關鍵在於持續的買入和加碼,以及在合適的時間出場,以最大化收益。
國統 9/11 召開法說會,之後股價連 3 漲表現不錯,只要基本面不變我持股續抱。法說會影音並沒有最重要的 QA,剛好幾位熱心網友提供券商投信的資料給我,再加上網路資訊整理成本文。目前時序 9 月處於豐水期 5~10 月的尾聲,根據公司法說會表示 ......
「西瓜偎大平」這句話真正的含意是:西瓜這種水果,有一種特質,就是「扶強不扶弱」,身體好的人愈吃愈補,身體虛的人則愈吃愈虛,這才是「偎大平」的真正涵義。
終於開始看施昇輝老師的書了,之前主要是看他在節目上發言,這次算是靜下來真的第一次看他的書。這算是他特別為了小資族打造的書,所以針對的收入跟各種也走向小資,力求簡單無腦投資,捨棄一些不需要的動作。下面就來看看書中我覺得很不錯的概念吧。
市值型ETF包括美股和臺股,美股因手續費推薦長抱,而臺股則適合進出。不斷買進又賣出可能錯過配發股息和獲利時機,增加成本。定期定額投資則能享受複利效應,建議躺平投資以獲得最大效益。結論永遠留在市場享受複利,若需要現金流可配置到市值型ETF或債券型ETF,不要必須賣股換現金。
在高股息ETF的投資中,重要的是要找到適合的買入時間和賣出時間。一般來說,計算股價和股利的比值可以判斷是否適合買入,而在賣出時,可以以總股利收益作為參考。股票投資的關鍵在於持續的買入和加碼,以及在合適的時間出場,以最大化收益。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
  兩部電影都是導演濱口龍介於去年(2021)上映的電影,且內容都描寫了人生的荒謬。   生活中,會不會剛好前任是好友的新男友?會不會剛好打錯一個字母寄錯e-mail?會不會剛好在路上巧遇的兩個人,都將對方誤認為是曾經的同學?上述這些是《偶然與想像》中的劇情,由3個短篇故事(〈魔法〉(
Thumbnail
  本書作者為後現代主義之父─李歐塔(Lyotard, 1924-1998),副標題為:「法國哲學家利歐塔給大一學生的四堂講課」,看完的第一個感想是,這是給哲學研究生的四堂課吧XD。哲學本身是一門後設的學科,本書試圖後設哲學思考的思考、試圖找到哲學的「合法性」(Inprinciple,由哲學
Thumbnail
金草葉這次就從摯愛、至親、摯友當中,從那「缺陷」的角度切入故事。我們或許有受不了這個世界的原因,但也有那一兩個愛上這世界的理由。深愛又無法忍受的關係,於我來說需要一點距離,這個距離有可能反而讓對立短暫交會,也會發現你我愛的能力並沒有因此消失。
Thumbnail
當我們談論「從問題的背後發現問題」,這個概念不僅僅適用於個人成長和決策,還可以應用於我們日常生活中的各個層面。跟朋友的晚餐,談及紫微斗數,讓我想起這本書的感覺
Thumbnail
向來在國際社會中遇到跟『紛爭』有關的事情時,日本總是不願表明立場;但今年俄國入侵烏克蘭後,國際上看到的是一個積極穿梭各國,急呼「今日烏克蘭,明日東亞」的日本!究竟這個轉變是怎麼回事? 作者認為『一五體制』--也就是安倍晉三的「戰後70年談話」,是理解國際新日本形成的起點;內容請詳見作者的分析。
隨著Coinbase在今年4月14日正式上市,將比特幣的市值帶上63,000美元歷史新高,儼然為現今最熱門的投資題材,但火熱的交易市場到底怎麼形成,其中又可能有些什麼問題,不同的觀點互相分享。
Thumbnail
現在的國文課對學生或對老師而言,最大的挑戰可能是教學「思維」的轉變。 如果從最現實面的學測角度來看,這對老師及學生而言,最困擾而焦慮的應該會有以下幾種情況。第一,課本裡的知識基本功、重要選文必須要確實掌握,第二,會覺得混合題組到底是什麼東西,有點可怕,第三,國寫的分數占一半,又有知性跟情意,這個也很
Thumbnail
人,每天上班在大盒子裡,下班苦等小盒子載人回家,家是另一種打著小方格子的空間,床不只是平面方形,電視叫做立體方形,等那中午好不容易松一口氣可以品嘗薪水變為食物的辛酸,還是面對一個便當盒──這就突然明
Thumbnail
在日本,論及十九世紀末、二十世紀初期日本的重要作家時,森鷗外絕對不會被忽略,是地位與夏目漱石齊名的作家。森鷗外最出名的作品是他的出道作《舞姬》,以他在德國留學時結識一女子的現實生活,寫成的一則跨國戀情。然而,他的小說背景不限於當時的社會,對於歷史故事也多有著墨,〈高瀨舟〉和〈山椒大夫〉就是代表作之一
Thumbnail
本文將簡述Camelbak水袋背包從運動用品變成軍用裝備的過程.
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
  兩部電影都是導演濱口龍介於去年(2021)上映的電影,且內容都描寫了人生的荒謬。   生活中,會不會剛好前任是好友的新男友?會不會剛好打錯一個字母寄錯e-mail?會不會剛好在路上巧遇的兩個人,都將對方誤認為是曾經的同學?上述這些是《偶然與想像》中的劇情,由3個短篇故事(〈魔法〉(
Thumbnail
  本書作者為後現代主義之父─李歐塔(Lyotard, 1924-1998),副標題為:「法國哲學家利歐塔給大一學生的四堂講課」,看完的第一個感想是,這是給哲學研究生的四堂課吧XD。哲學本身是一門後設的學科,本書試圖後設哲學思考的思考、試圖找到哲學的「合法性」(Inprinciple,由哲學
Thumbnail
金草葉這次就從摯愛、至親、摯友當中,從那「缺陷」的角度切入故事。我們或許有受不了這個世界的原因,但也有那一兩個愛上這世界的理由。深愛又無法忍受的關係,於我來說需要一點距離,這個距離有可能反而讓對立短暫交會,也會發現你我愛的能力並沒有因此消失。
Thumbnail
當我們談論「從問題的背後發現問題」,這個概念不僅僅適用於個人成長和決策,還可以應用於我們日常生活中的各個層面。跟朋友的晚餐,談及紫微斗數,讓我想起這本書的感覺
Thumbnail
向來在國際社會中遇到跟『紛爭』有關的事情時,日本總是不願表明立場;但今年俄國入侵烏克蘭後,國際上看到的是一個積極穿梭各國,急呼「今日烏克蘭,明日東亞」的日本!究竟這個轉變是怎麼回事? 作者認為『一五體制』--也就是安倍晉三的「戰後70年談話」,是理解國際新日本形成的起點;內容請詳見作者的分析。
隨著Coinbase在今年4月14日正式上市,將比特幣的市值帶上63,000美元歷史新高,儼然為現今最熱門的投資題材,但火熱的交易市場到底怎麼形成,其中又可能有些什麼問題,不同的觀點互相分享。
Thumbnail
現在的國文課對學生或對老師而言,最大的挑戰可能是教學「思維」的轉變。 如果從最現實面的學測角度來看,這對老師及學生而言,最困擾而焦慮的應該會有以下幾種情況。第一,課本裡的知識基本功、重要選文必須要確實掌握,第二,會覺得混合題組到底是什麼東西,有點可怕,第三,國寫的分數占一半,又有知性跟情意,這個也很
Thumbnail
人,每天上班在大盒子裡,下班苦等小盒子載人回家,家是另一種打著小方格子的空間,床不只是平面方形,電視叫做立體方形,等那中午好不容易松一口氣可以品嘗薪水變為食物的辛酸,還是面對一個便當盒──這就突然明
Thumbnail
在日本,論及十九世紀末、二十世紀初期日本的重要作家時,森鷗外絕對不會被忽略,是地位與夏目漱石齊名的作家。森鷗外最出名的作品是他的出道作《舞姬》,以他在德國留學時結識一女子的現實生活,寫成的一則跨國戀情。然而,他的小說背景不限於當時的社會,對於歷史故事也多有著墨,〈高瀨舟〉和〈山椒大夫〉就是代表作之一
Thumbnail
本文將簡述Camelbak水袋背包從運動用品變成軍用裝備的過程.