一、定义
霍夫曼树
又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为
WPL =(W1*L1 + W2*L2 +[......]
There are 8 posts filed in Algorithm.
又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为
WPL =(W1*L1 + W2*L2 +[......]
最近在刷算法,遇到一个有意思的题,要求如下:
设计一个数据结构,可随时插入节点,且随时查询节点集合的中位数,要求插入节点的时间复杂度为 O(logN),查询中位数的时间复杂度为 O(1)。
中位数定义:节点个数为奇数个时,为有序情况下集合的中间节点;偶数时,为中间两节点的平均值。
[……]
八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?
尝试使用Julia实现一个回溯解:
回溯法进行暴力查找:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
function find_safe_coord(board::Array{Int}, curr_row, n; trace_back=false) start = 1 if trace_back start = board[curr_row] + 1 end for col = start : n has_menace = false for row = 1 : curr_row - 1 prev = board[row] if prev == col || curr_row - row == abs(col - prev) has_menace = true end end !has_menace && return col end nothing end function n_queens_puzzle(n) board = zeros(Int, n) curr_row = 1 while curr_row <= n coord = find_safe_coord(board, curr_row, n) if coord != nothing board[curr_row] = coord curr_row == n && produce(copy(board)) end if coord == nothing || curr_row == n while true curr_row -= 1 curr_row == 0 && return produce(nothing) coord = find_safe_coord(board, curr_row, n, trace_back=true) if coord != nothing board[curr_row] = coord break end end end curr_row += 1 end end # 逐行输出[x,y] solutions = @task n_queens_puzzle(8) for solution in solutions if solution != nothing for row in eachindex(solution) print("[$row,$(solution[row])] ") end println() end end |
很可惜,我[……]
最近看了本有意思的书,受到了一些启发,在此记录一下:
即 domain-specific language ,是指和业务域模型相关的语言,粗糙的说法:行(业黑)话。关于什么是DSL,见仁见智,比如我认为SQL是一种DSL,有人却认为不是。
最近参加了一次面试,虽无笔试环节,几位考官却都在算法和思路题上大作文章,颇为受益
有这么几个问题印象深刻: