我希望你们中的许多人都听说过Flipboard。这个 iPad 应用程序最令人惊奇的事情之一是它布局内容的方式,这些内容根据 iPad 的方向和基于流媒体内容而动态变化。
因此,给定一组文章,人们将使用什么算法来获得最佳布局。最佳的定义可能是 - 最有效的布局(如电路设计)或最美观的布局。
有人知道这样的算法吗?或解决此类问题的基本方法?这是否属于“计算几何”?
根据Jason Moore在他的回答中链接的博客文章中的屏幕截图和理论,我会说有十个左右的预定义块大小可以放置内容。一条内容放置在多大的盒子中取决于各种不同的参数——许多人转发或喜欢的东西可能被认为具有更高的优先级,因此获得更大的盒子,带有图片、视频或大量文本的项目也可能被优先考虑. 然后这些盒子(最好是经过深思熟虑的尺寸)在页面上以最佳方式包装(尽管这不是一个简单的问题,甚至 Flipbook 似乎也失败了,这可以从之前的 Facebook 流的第二次渲染中的奇怪空白证明链接的博客文章)。
从渲染的 Facebook 提要的外观来看,Flipbook (至少)具有以下预定义的框尺寸(宽度和高度以全宽/高度的百分比给出):
Designation | Width | Height | Example
---------------------------------------------------------------
full page | 100% | 100% | #12
2/3 page | 100% | 67% | #1
1/3 note | 50% | 33% | #3, #11
1/9 quote | 50% | 11% | #2, #8, #10, #15, #17, #18, #22
1/2 note | 50% | 50% | #16, #19
2/3 note | 50% | 67% | ?
其中一些具有相当明显的分组模式(例如,1/9 引号总是一次堆叠三个以形成与 1/3 音符相同大小的块),而另一些则可以更自由地打包。对呈现的 Twitter 提要的类似分析显示了一些额外的框。
因此,总而言之,该算法似乎相当简单。从几个预定义(明智地选择)的盒子尺寸开始。呈现新提要时,请执行以下操作:
这里的重点应该放在第 1 步,以及制作预定义的盒子上。
澄清一下:我在这里谈论的预定义框大小是为纵向定义的。对于横向,将使用一组不同的框大小,如问题中的图片所示。
我已经尝试了很多了解flipboard的布局安排。这是我想出的https://github.com/reefaq/FlipView
它背后没有复杂的算法,也没有复杂的代码,只是一个简单的代码,所有人都可以理解。
实现了一些功能,例如
希望它可以帮助你:)
由于声誉低,我无法发布图像 :-) 但这里有一些关于布局方法的博客文章的注释。
我想贪心算法会很好用。这仅取决于您尝试加载数据的顺序。如果你给每个部分的内容一个权重或“值”,并给它大量的选择,贪心算法可以找到具有最高值的最优布局。
我的预感是流媒体内容被分类为不同的类别(报价、文章、照片等)。根据每个类别中有多少项目以及这些类别中每个项目的排名,软件可能会将它们放入一些预先制作的布局中。
以下博客条目展示了许多试图破译 Flipboard 动态布局的深入分析: