function call can be expire

This commit is contained in:
Cai
2025-10-28 09:55:12 +08:00
parent 4a390adb2a
commit f5d5077278
5 changed files with 165 additions and 1236 deletions

View File

@@ -22,7 +22,30 @@
<body>
<h1>效率的重要性与实践验证</h1>
<h2>效率</h2>
<h3>理论热身:算法选择的智慧</h3>
<h3>算法是什么</h3>
<h4>算法就是解决某一个问题的做法,其实它在生活中无处不在</h4>
<p>比如从学校宿舍走到食堂:</p>
<ol>
<li>要先宿舍下楼</li>
<li>然后到食堂楼之间可能有3条路
A. 直线方向穿过曲折难走的小路,
B. 先走远路到平坦的道上,
C. 等一会校车,</li>
<li>从3者选择一条走过去最后再上楼。</li>
</ol>
<h4>算法的5大组成</h4>
<ol>
<li>输入</li>
<li>输出</li>
<li>有穷性</li>
<li>确定性</li>
<li>可行性</li>
</ol>
<p>这5大组成其实暗示了一个特性
其实对于所有的可以被算法描述的问题,
一定会有一种算法有解的。
至少有一种方法称为”暴力搜索“”穷举法“,穷尽一切可能。</p>
<h3>效率的重要性与验证</h3>
<h4>任务:分析与决策</h4>
<p>项目组目前有两套备选的交通信号灯同步算法,它们将在不同性能的服务器上运行:</p>
<ul>
@@ -34,7 +57,7 @@
</li>
</ul>
<p>你的项目经理右侧的Agent希望你通过分析来判断哪个方案更具前景。请与TA对话逐一回答以下问题。</p>
<h4>思考</h4>
<h4></h4>
<p>与右侧的Agent对话回答以下问题</p>
<ol>
<li>
@@ -52,7 +75,8 @@
</ol>
<h3>编程实践:验证算法的真实性能</h3>
<h4>任务:编码与分析</h4>
<p>理论分析让你认识到了算法效率的重要性。现在,你需要通过编程来亲身感受不同交通状况对同一算法性能的巨大影响。我们将以“插入排序”为例,来处理三种典型的交通流量数据,这分别对应算法分析中的<strong>最好</strong><strong>最坏</strong><strong>平均</strong>情况。</p>
<p>理论分析让你认识到了算法效率的重要性。现在,你需要通过编程来亲身感受不同交通状况对同一算法性能的巨大影响。
我们将以“插入排序”为例,来处理三种典型的交通流量数据,这分别对应算法分析中的<strong>最好</strong><strong>最坏</strong><strong>平均</strong>情况。</p>
<h5>题目:模拟交通流量排序</h5>
<p>实现插入排序算法,并验证其在处理“畅通无阻”(数据有序)、“交通大堵塞”(数据逆序)和“随机车流”(数据随机)三种模式时的效率差异。</p>
<h5>代码框架</h5>
@@ -127,6 +151,27 @@ for size in network_sizes:
<p><strong>融会贯通</strong>:结合第一关的理论分析和第二关的编程实验,你对“算法是解决问题的核心”这句话有了怎样更深的理解?</p>
</li>
</ol>
<h3>规模与增长率</h3>
<h4>算法复杂度定义</h4>
<p>为了更好地描述算法优化的效果,定义为当问题规模趋于无穷大时算法运行时间(算法复杂度,也可以理解为计算机运行的步骤数)</p>
<p>符号:<code>Θ( f(n) )</code> 相对常用,
称为“渐进等于”表示算法复杂度随着问题规模n的增大而增大的速率和函数f(n)在常数倍率上相同。</p>
<h4>算法复杂度的计算</h4>
<p>计算时间复杂度是一件比较重要的技能,我们来用一些例子试着计算:
假设你是一个收银员有n个人排队1分钟你只能收银1个人随着n增大你收银的时间复杂度时长增长和哪一个函数增长“渐进等于”呢</p>
<h5>增加一点难度</h5>
<p>你这个收银员有超能力可以越来越熟练第1个人用时1分钟第2人用时1/2分钟第3人只用1/4分钟随着n增大时间复杂度怎么样呢</p>
<h5>再难一点</h5>
<p>如果你这个超能力是这样的第1个人用时1分钟后面2个人用时1分钟后面4个人用时1分钟后面8个人用时1分钟那么这种情况下随着用户n的增大时间复杂度可以用那个函数描述呢</p>
<h4>另外两个符号</h4>
<p>最后还有两个符号:</p>
<ul>
<li>O 记号:渐近 “小于”f (n)“≤”g (n)</li>
<li>Ω 记号:渐近 “大于”f (n)“≥”g (n)
比如上面Θ( n ) &gt; Θ( log_2(n) ) &gt; Θ( 1 ),就可以写作Θ( 1 )= O ( log_2(n) ) = O ( n ),或者写作Θ( n ) = Ω( log_2(n) ) = Ω( 1 )</li>
</ul>
<p>当然事实上上面的写法比较不常见只是让大家理解一下常函数的增长渐进小于log_2(n)也渐进小于n。</p>
<p>在具体的使用中由于渐进大于没什么意义我们不会去找一个更差的算法我们常混用Θ、O也就是只研究函数上界研究一个算法复杂度渐进小于哪一个函数</p>
</body>
</html>

View File

@@ -1,6 +1,19 @@
var socket;
let system_message_idx = 0
const activeApprovals = {};
// 清理过期的批准记录
function cleanupExpiredApprovals() {
const now = Date.now();
for (const name in activeApprovals) {
if (now - activeApprovals[name] > 30000) { // 30秒过期
delete activeApprovals[name];
}
}
}
// 定时清理过期记录
setInterval(cleanupExpiredApprovals, 3000); // 每3秒检查一次
document.addEventListener('DOMContentLoaded', function () {
data = window.appData;
const host = window.location.host;
@@ -52,14 +65,32 @@ document.addEventListener('DOMContentLoaded', function () {
if (typeof data === 'object') {
data = [data];
}
cleanupExpiredApprovals();// 先清理一次过期记录
for (let i = 0; i < data.length; i++) {
const element = data[i];
const funcName = element.data.name;
if (activeApprovals.hasOwnProperty(funcName)) {
// 如果存在,找到并移除之前的元素
const existingElements = document.querySelectorAll(`.approve-message[data-function="${funcName}"]`);
existingElements.forEach(el => el.remove());
}
activeApprovals[funcName] = Date.now();
const requestMessage = document.createElement('div');
requestMessage.className = 'chat-message server-message approve-message';
requestMessage.setAttribute('data-function', funcName);
const description = document.createElement('div');
description.innerHTML = `<b>Function:</b> ${element.data.name}(${JSON.stringify(element.data.args)})`;
const argsDescription = JSON.stringify(element.data.args);
if (argsDescription) {
description.innerHTML = `<b>Function:</b> ${element.data.name}(${argsDescription})`;
}else {
description.innerHTML = `<b>Function:</b> ${element.data.name}()`;
}
const approveButton = document.createElement('button');
approveButton.innerHTML = '√'; // 使用勾选符号
approveButton.innerHTML = '<i class="fas fa-check-circle-check"></i>';
approveButton.data = element;
approveButton.className = 'approve-button';
approveButton.onclick = function (event) {

View File

@@ -44,7 +44,7 @@
<img src="{{course.image_url}}"
class="course-img" alt="课程封面">
<div class="card-body d-flex flex-column">
<span class="course-category">艺术设计</span>
<span class="course-category">算法设计</span>
<h5 class="course-title">{{course.name}}</h5>
<p class="course-instructor">{{course.description}}</p>
<div class="course-meta">

View File

@@ -14,6 +14,7 @@
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/1.1.1/marked.min.js"></script>
<script src="https://cdn.socket.io/4.0.0/socket.io.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://unpkg.com/split.js/dist/split.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>