Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xlisp/algorithm-visualizer-gpter-fper
算法可视化开发,GPT辅助生成,函数式化后去递归的算法辅助开发脚手架平台
https://github.com/xlisp/algorithm-visualizer-gpter-fper
algorithm clojure clojurescript functional-programming mysql re-frame reagent redis visualizer
Last synced: 9 days ago
JSON representation
算法可视化开发,GPT辅助生成,函数式化后去递归的算法辅助开发脚手架平台
- Host: GitHub
- URL: https://github.com/xlisp/algorithm-visualizer-gpter-fper
- Owner: xlisp
- Created: 2020-04-10T05:42:43.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-04-27T05:12:25.000Z (8 months ago)
- Last Synced: 2024-09-06T17:10:29.786Z (4 months ago)
- Topics: algorithm, clojure, clojurescript, functional-programming, mysql, re-frame, reagent, redis, visualizer
- Language: Clojure
- Homepage:
- Size: 1.33 MB
- Stars: 10
- Watchers: 2
- Forks: 2
- Open Issues: 12
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 算法可视化开发,GPT辅助生成,函数式化后去递归的算法辅助开发脚手架平台
* 核心思想: 最先用函数式思想来写算法, 把一切复杂过程用高阶函数来描述, 不断写纯函数, 不断高阶化f(... f(f(x))), 直到递归, 找到递归停止条件和递增出递减入, 必要时使用Datalog/Prolog逻辑式编程语言(基于递归不定序运行)来当脚手架开发算法, 或借用图数据库Datomic的力量来帮助开发算法, 最后用GPT翻译为其他语言如Java或Go => 变成本能的反应,天下武功唯快不破: 常用的Scaffold代码写成Elisp/Yasnippet组合模版, 输入几个命令参数就生成特定的算法
- [ ] 写一个GPT的提示词工程界面, 用Python或最熟悉的Clojure作为提示词(高维输出高维度),辅助代码生成和运行的界面,通过项目和提示词历史,丰富提示词去提交,五六个UI界面窗口的实现
- [ ] GPT生成的代码解析,静态分析和Datalog结合判断其逻辑是否准确性
- [ ] 用Datalog来保存整个开发过程出现的提示词历史,还有repl历史, 以便更容易生成符合逻辑的提示词- [ ] 函数式递归的开发脚手架的实现:数据流可视化,分析递增递减
- [ ] 数据流的可视化设计开发,lambda化数据流, 通过可视化数据流来帮助快速理解问题
---
- [ ] [[递归算法]]
- 递归算法一般用干解决三类问题:- 1、数据的定义是按递归定义的(斐液那契数列)
- 2、问题解法按递归算法实现(回溯)
- 3、数据的结构形式是按递归定义的(树的逼历,图的搜索)
- [ ] [[贪心算法]]
- 经典案例:活动选择问题- 1、最小生成树
- 2、算法背包
- 3、问题单源最短路径的 Diikstra算法
- 4、Huffman压缩编码#快捷输入
- [ ] [[回溯算法]]
- 使用回湖算法的经典案例- 1、深度优先搜索
- 2、0-1背包问题
- 3、正则表达式匹配4、八皇后
- 5、数独6、全排列#快捷输入
- [ ] [[动态规划]]
- 使用动态规划求解的一些经典问题- 1、爬楼梯问题
- 2、背包问题
- 3、硬币找零4、图的全源最短路径
- 5、最长公共子序列#快捷输入
- [ ] [[枚举算法]]
- 使用枚举算法求解的一些经典问题- 1、判断阿姆斯特朗数
- 2、解百鸡问题#快捷输入
- [ ] [[分治算法]]
- 使用分治法求解的一些经典问题- 1、二分查找
- 2、归并排序
- 3、快速排序
- 4、汉诺塔问题
- 5、React时间分片#快捷输入
---
## 思想
* 太极来描述递归的对立统一的两面: eval,apply元解释器λ演算解释一切复杂算法
![](https://raw.githubusercontent.com/chanshunli/functional-programming-visualgo/master/太极来描述递归的对立统一的两面SICP_EVAL_APPLY_元解释器.png)* 函数式思想: 就是四两拨千斤, 就像太极一样 => FP的算法,递归描述算法是最简的统一算法的方式(解释器和所有算法的递归形式统一),接近数学,而不是堆栈的算法描述方式接近机器
![](https://raw.githubusercontent.com/chanshunli/functional-programming-visualgo/master/clojure-kungfu.jpg)- [函数式算法可视化 functional programming algorithm visualizer](#%E5%87%BD%E6%95%B0%E5%BC%8F%E7%AE%97%E6%B3%95%E5%8F%AF%E8%A7%86%E5%8C%96-functional-programming-algorithm-visualizer)
- [算法可视化开发第一性原则](#%E7%AE%97%E6%B3%95%E5%8F%AF%E8%A7%86%E5%8C%96%E5%BC%80%E5%8F%91%E7%AC%AC%E4%B8%80%E6%80%A7%E5%8E%9F%E5%88%99)
- [递归方法的总结](#%E9%80%92%E5%BD%92%E6%96%B9%E6%B3%95%E7%9A%84%E6%80%BB%E7%BB%93)
- [算法可视化导航](#%E7%AE%97%E6%B3%95%E5%8F%AF%E8%A7%86%E5%8C%96%E5%AF%BC%E8%88%AA)
- [如何在数组中找到直角三角形的组合?(map-reduce-filter式解法)](#%E5%A6%82%E4%BD%95%E5%9C%A8%E6%95%B0%E7%BB%84%E4%B8%AD%E6%89%BE%E5%88%B0%E7%9B%B4%E8%A7%92%E4%B8%89%E8%A7%92%E5%BD%A2%E7%9A%84%E7%BB%84%E5%90%88map-reduce-filter%E5%BC%8F%E8%A7%A3%E6%B3%95)
- [二叉搜索树](#%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91)
- [SICP找零钱问题(递推式递归解法)](#sicp%E6%89%BE%E9%9B%B6%E9%92%B1%E9%97%AE%E9%A2%98%E9%80%92%E6%8E%A8%E5%BC%8F%E9%80%92%E5%BD%92%E8%A7%A3%E6%B3%95)## 算法可视化开发第一性原则
* 用二维的表格或者矩阵存储数据(低维度的基本结构), 展示为高维的图或者树形结构, 而不要去存储高维结构,然后去解析高维结构生成高维结构
* 充分利用数据库或者atom来存储中间过程, 然后API传给前端展示出来
* 可视化前端驱动Repl lambda演算开发算法: 编写可视化的工具函数群,来快速可视化一个新的算法过程
* 高阶函数描述复杂过程`(fn ... (f2 (f1 x)))` => 递归脚手架: 找到递归(递推的通项公式)终止条件(不同的算法递归描述的终止条件都不一样) => 去递归 => 去for循环,向量化
* 先写死展示的数据,然后可视化开发结束(遵从易道),然后"吃饱"之后,最后变成灵活的自定义生成的数据,能够让人代入自身的易于理解的数据进去运行: 不要一上来就想着开发很完美的可视化过程,直接开发高维结构到高维结构的映射
* 算法可视化开发如同吃饭天天吃,每天不断接近目标的可视化效果,直到最后能够随意代入自身数据进去运行,直接展示该算法的物理或现实意义: 刚开始从一个GraphViz图描述算法开始,慢慢细化,直到最后全部开发完一个算法的可视化过程
* 先很粗暴的算法实现功能(暴力Repl人肉拟合未知函数), 然后对照旧的代码重写一遍
* 代数进去算法得到局部打印的数列: 用等差和等比数列来表示所有数据的规律, 离散数据的规律, 发现数列的规律找到通项公式 或者是递推公式
* 数学归纳法思想(有名(不同的算法的名字)万物(所有软件)之始,无名(数学归纳证明法)万物之母): 递归版本是最容易的, 运用万能的数学归纳法来证明所有复杂的公式定理,就算你完全不知道一个算法的名字,知道需求输入输出的样子,都能用递归描述出来 => 然后是非递归版本,用栈实现
* 一切都是高阶函数, 包括字符串和数字(邱奇数的观点): 把amount当成一个高阶函数, 金额5的阶数和金额10的阶数是不同的, 金额10的一定量衰减就是金额5 => 当前的高阶函数数字 和 前一个高阶函数数字的关系是什么?(数学归纳法)
* emacs yasnippad递归多分支的脚手架帮助开发算法
* 打印prn信息来文学编程: 写成你能理解的方式就行 => log文学编程化### 递归方法的总结
* 找到不可变的定点,即最基本的底维度的结构,衰减问题不可变的规律: 先降维度最简描述定点(最基本的简单结构), 然后升维度(递归低维,高维结果展示出来)
* 找到规律来缩小这个问题的搜索空间: 确定函数的定义域和值域的边界在哪里
* 分段函数来cond求和结果
* 尝试用代数穷举小的数字,来描述衰减前者和衰减后者的关系,如何消解问题: count_change(amount,n), count_change(amount,n-1), count_change(amount-衰减的钱,n) 抽取出来的因子的关系
* 用递归脚手架来爆栈来尝试衰减你的目标变量
* 平时独立思考和编码练习: 从几个衰减变量中找到前后者关系 => 从一个递推公式直接到递归脚手架写出代码
* 用公式来表达多个情况相加, 然后排出不可能的组合方式(A1 = A0 + A(?)): count_change(amount,n) = count_change(amount,n-1) + count_change(amount-amount_of_first_coin,n)## 算法可视化导航
![](https://raw.githubusercontent.com/chanshunli/functional-programming-visualgo/master/website_preview.png)
## 如何在数组中找到直角三角形的组合?(map-reduce-filter式解法)
![](https://raw.githubusercontent.com/chanshunli/functional-programming-visualgo/master/demo_fp_visualgo.gif)
## 二叉搜索树
![](https://raw.githubusercontent.com/chanshunli/functional-programming-visualgo/master/demo_bst_search.gif)## SICP找零钱问题(递推式递归解法)
![]()