/images/avatar.png

vllbc

种花问题(新年快乐!2021第一题)

种花问题(新年快乐!2021第一题)

新年快乐!2021年第一题,每日一题!希望2021年LC和github可以全绿!加油!

https://leetcode-cn.com/problems/can-place-flowers/

代码如下:

class Solution:
    def canPlaceFlowers(self, flowerbed: List[int], n: int) -> bool:
        flowerbed = [0] + flowerbed + [0]
        for i in range(1,len(flowerbed)-1):
            if flowerbed[i-1] == 0 and flowerbed[i] == 0 and flowerbed[i+1] == 0:
                n -= 1
                flowerbed[i] = 1
        return n <= 0

思路很暴力,就是三个0在一起就可以插进去。。

零钱兑换

零钱兑换

https://leetcode-cn.com/problems/coin-change/

以我目前的水平做出来有点吃力,看了思路才做出来

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        dp = [float('inf')] * (amount + 1)
        dp[0] = 0
        for i in range(amount+1):
           for coin in coins: #
               if i >= coin:
                   dp[i] = min(dp[i],dp[i-coin]+1)
        
        return -1 if (dp[-1] == float("inf")) else dp[-1]

伪代码如下

# 伪码框架
def coinChange(coins: List[int], amount: int):

    # 定义:要凑出金额 n,至少要 dp(n) 个硬币
    def dp(n):
        # 做选择,选择需要硬币最少的那个结果
        for coin in coins:
            res = min(res, 1 + dp(n - coin))
        return res

    # 题目要求的最终结果是 dp(amount)
    return dp(amount)

去除重复字母

去除重复字母

一开始看到题目感觉挺简单的,没想到对现在的我挺有难度。。

https://leetcode-cn.com/problems/remove-duplicate-letters/

#1
class Solution:
    def removeDuplicateLetters(s: str):
        res = ""
        while s: #用递归也可以
            loc = min(map(s.rindex,s)) #s.rindex是返回列表各值最后出现的索引 求这个最小的索引
            a = min(s[:loc+1]) #求字典序最小的
            res += a
            s = s[s.index(a):].replace(a,"") #把已经加入的和与其重复的都去掉了
        return res



#2
#遍历字符串,压入栈,如果遇到比栈顶小的元素且当前字符后面还有与栈顶相同的元素时,移除栈顶元素
class Solution:
    def removeDuplicateLetters(s: str) -> str:
        stack = []
        for i, t in enumerate(s):
            if t in stack:
                continue
            while stack !=[] and t < stack[-1] and s[i:].find(stack[-1]) != -1:
                stack.pop()
            stack.append(t)
        return "".join(stack)

两个方法,第二个方法更好想点。第一个方法是copy的

Table file.mtime as "最后修改时间"
WHERE tags[0] = "Reading" and date(today) - file.mtime <= dur(7 days)
Sort file.mtime desc

Table rows.file.link as filename
WHERE todo and title != "<% tp.file.title %>"
Sort file.ctime desc
GROUP BY tags[1] as "category"

Table file.mtime as "最后修改时间"
WHERE !todo and date(today) - file.mtime <= dur(7 days) and tags[0] != "Reading" and title
Sort file.mtime desc

论文阅读情况

Table file.mtime as "最后修改时间"
WHERE tags[0] = "Reading" and this.file.ctime - file.mtime <= dur(7 days)
Sort file.mtime desc

PlAN-AND-ACT

PLAN-AND-ACT:Improving Planning of Agents for Long-Horizon Tasks 这篇论文解答了我心中一直存在的一个想法,就是计划和行动是分离的。在agent的执行过程中,要先制定计划,然后按照计划一步步执行,计划并不是可以执行的动作,因此需要一个转换。即分离规划器和执行器。

  1. World model:预测执行 action 后 state 的转换,从而选择最合适的 action,对 agent 的应用很重要。World model 也能对应我的第一个科研点,即意外事件,意外事件即世界状态的突然转变,如果有 world model ,可以通过执行正确的 action 来解决意外事件。
  2. Tool-use RL:通过强化学习增强模型调用工具的能力,deepresearch 属于一个细分的方向
  3. Reasoning 相关:熵、思维链压缩,都有可以做的东西

目前想通过对 verl 项目做贡献来做为以后的项目经历,可以贡献的地方:

  1. 将多轮 RL 引入到 vllm,目前只有 sglang 支持多轮 RL
  2. 建立一个 tiny-verl 仓库,抽离 verl 的核心逻辑,提供学习。