因为 Telegram 一直连不上,白白浪费了很多时间!
This media is not supported in your browser
VIEW IN TELEGRAM
效率.... 🤐
那既然已经花了很多时间就再多花一点(皮)
演示一下这个功能:
[DuangSUSE@duangsuse]
~/WallpapperSlide% cd ~/Projects/RandomPicture
~/Projects/RandomPicture% ./gradlew build
BUILD SUCCESSFUL in 1s
12 actionable tasks: 9 executed, 3 up-to-date
~/Projects/RandomPicture% cp build/libs/server-1.0-SNAPSHOT.jar ~/bin; cd -
四月 01, 2019 11:29:18 上午 org.duangsuse.fushion.RandomPicture
信息: Checking with regex /^.*\.(png|jpg|jpeg|gif|webp|raw|bmp|img|svg)$/
Server started at http://localhost:8080
信息: Registering refresh list signal handler...
信息: Finished registration
严重: Failed in deploying verticle
io.vertx.core.impl.NoStackTraceThrowable: Input path /app/favourite (RANDOM_PICTURE) should be exists and is folder
(其实我应该用 then 而不是 all 的,不过机不可失,逃跑)
信息: Begin indexing images
四月 01, 2019 11:29:31 上午 org.duangsuse.fushion.RandomPicture
信息: Begin >
四月 01, 2019 11:29:31 上午 org.duangsuse.fushion.RandomPicture
信息: Finished > (.) costs 1 ms
信息: Finished > (png) costs 0 ms
四月 01, 2019 11:29:31 上午 org.duangsuse.fushion.RandomPicture
警告: Ignoring non-picture file ./png
警告: 8 files ignored, 75 files added
信息: Finished indexing images size 75 costs 19 ms
Server started at http://localhost:8080
信息: Registering refresh list signal handler...
信息: Finished registration
<Ctrl-C(INT)
信息: Refreshing pictures list...
== All files
0: /home/DuangSUSE/WallpapperSlide/昨日青空/./后来谁又在这里装作不经意的看过谁.jpg
...
74: /home/DuangSUSE/WallpapperSlide/昨日青空/./l-2.jpg
信息: Begin Cleaning old list
信息: Finished Cleaning old list costs 1 ms
信息: Begin Indexing new images...
警告: 8 files ignored, 75 files added
信息: Finished Indexing new images... 0 files added costs 14 ms
<Ctrl+Z(HUP)
mv origin.jpg.bak origin.jpg
fg %RANDOM_PICTURE=.
警告: 7 files ignored, 76 files added
信息: Finished Indexing new images... 1 files added costs 7 ms
== New files
/home/DuangSUSE/WallpapperSlide/昨日青空/./origin.jpg
<Ctrl+Z
kill -TERM %RANDOM_PICTURE=.
🤔 SIGQUIT 都被 HotSpot 占用了... 欸
如果是生产环境的话,可以用 USR1、USR2 代替这种操作,毕竟也不常用(可以用于不停服刷新静态数据)。
当然,Java 也提供了文件夹更新监听器,所以这种操作完全不用手工弄,也不用完全重新扫描整个文件树,直接用 fs watcher 监听就好 #backend #Kotlin #Java
其他操作,比如输出更新 log 什么的,可以试试 UNIX Signal
那既然已经花了很多时间就再多花一点(皮)
演示一下这个功能:
[DuangSUSE@duangsuse]
~/WallpapperSlide% cd ~/Projects/RandomPicture
~/Projects/RandomPicture% ./gradlew build
BUILD SUCCESSFUL in 1s
12 actionable tasks: 9 executed, 3 up-to-date
~/Projects/RandomPicture% cp build/libs/server-1.0-SNAPSHOT.jar ~/bin; cd -
##~/WallpapperSlide% java -jar ~/bin/server-1.0-SNAPSHOT.jar
四月 01, 2019 11:29:18 上午 org.duangsuse.fushion.RandomPicture
信息: Checking with regex /^.*\.(png|jpg|jpeg|gif|webp|raw|bmp|img|svg)$/
Server started at http://localhost:8080
信息: Registering refresh list signal handler...
信息: Finished registration
严重: Failed in deploying verticle
io.vertx.core.impl.NoStackTraceThrowable: Input path /app/favourite (RANDOM_PICTURE) should be exists and is folder
(其实我应该用 then 而不是 all 的,不过机不可失,逃跑)
##
RANDOM_PICTURE=. java -jar ~/bin/server-1.0-SNAPSHOT.jar信息: Begin indexing images
四月 01, 2019 11:29:31 上午 org.duangsuse.fushion.RandomPicture
信息: Begin >
四月 01, 2019 11:29:31 上午 org.duangsuse.fushion.RandomPicture
信息: Finished > (.) costs 1 ms
信息: Finished > (png) costs 0 ms
四月 01, 2019 11:29:31 上午 org.duangsuse.fushion.RandomPicture
警告: Ignoring non-picture file ./png
警告: 8 files ignored, 75 files added
信息: Finished indexing images size 75 costs 19 ms
Server started at http://localhost:8080
信息: Registering refresh list signal handler...
信息: Finished registration
<Ctrl-C(INT)
信息: Refreshing pictures list...
== All files
0: /home/DuangSUSE/WallpapperSlide/昨日青空/./后来谁又在这里装作不经意的看过谁.jpg
...
74: /home/DuangSUSE/WallpapperSlide/昨日青空/./l-2.jpg
信息: Begin Cleaning old list
信息: Finished Cleaning old list costs 1 ms
信息: Begin Indexing new images...
警告: 8 files ignored, 75 files added
信息: Finished Indexing new images... 0 files added costs 14 ms
<Ctrl+Z(HUP)
mv origin.jpg.bak origin.jpg
fg %RANDOM_PICTURE=.
警告: 7 files ignored, 76 files added
信息: Finished Indexing new images... 1 files added costs 7 ms
== New files
/home/DuangSUSE/WallpapperSlide/昨日青空/./origin.jpg
<Ctrl+Z
kill -TERM %RANDOM_PICTURE=.
🤔 SIGQUIT 都被 HotSpot 占用了... 欸
如果是生产环境的话,可以用 USR1、USR2 代替这种操作,毕竟也不常用(可以用于不停服刷新静态数据)。
当然,Java 也提供了文件夹更新监听器,所以这种操作完全不用手工弄,也不用完全重新扫描整个文件树,直接用 fs watcher 监听就好 #backend #Kotlin #Java
其他操作,比如输出更新 log 什么的,可以试试 UNIX Signal
duangsuse::Echo
最后完整注释的版本 #Android
最后,快速了解一下 #Android 系统服务吧,看来这个星期又是啥都没干成... 🤐
== 简而言之
就是简单的『强类型』 C/S 架构喽
(下面的 Class#method% 方法表示我不想提及 method 的方法列表,但它是方法不是实例字段)
Service,就是 Android IPC 的 OOService
Service Server 使用 ServiceManager#addService% 和 ServiceManager#getService% 注册和获取 IBinder
一般要进行权限认证,Context#checkCallingOrSelfPermission
没有 Context,使用 ActivityThread 拿到 system main thread,再拿 system Context。
检查相等性 PackageManager.PERMISSION_GRANTED
XML 符号:
tag permission-group { android:name android:icon android:label }
tag permission { android:name android:icon android:label android:permission-group android:protectionLevel }
Client,就是 OO,它找 ServiceManager 拿到一个 IBinder 对象,然后进行 IOOService.Stub.asService 转换,保证接口是清真无混乱的(IBinder 好比果的 HTTP 协议、AIDL 则是我们自己对协议的约束)
API,就是 IOOService,可以使用 AIDL 语言定义,用来利用 Android IPC 系统传递我们自己的消息
Manager,就是你自己提供一些辅助函数,比如
—> 应用程序
class Vibrator
class android.os.SystemVibrator extends Vibrator
AIDL interface IVibratorService
abstact class IVibratorService.Stub
public class VibratorService extends IVibratorService.Stub implements InputManager.InputDeviceListener
public void VibratorService#vibrate(int uid, String opPkg, long milliseconds, int usageHint, IBinder token)
Context#getSystemService(@ServiceName String! serviceId)
Context.VIBRATOR_SERVICE
—> SystemServer
class com.android.server.SystemServer
traceBeginAndSlog(String)
ServiceManager.addService(String, IBinder)
traceEnd()
SystemServer#startOtherServices()
SystemServer#main()
SystemServer#run()
SystemServiceManager#startService()
ServiceManager#addService(String, IBinder)
ServiceManager#getService(String)
—> Services API
class android.app.SystemServiceRegistry
abstract class CachedServiceFetcher<T> { T createService(ContextImpl ctx); }
registerService(name, ServiceFetcher)
abstract class ServiceConnection
onServiceConnected(ComponentName name, IBinder service)
IXXXService.Stub.asInterface(service);
—> Android API
class android.os.Looper
Looper#prepareMainLooper();
Looper#loop%
activityThread.getSystemContext%
ActivityThread#systemMain
android.permission.SHUTDOWN
IPowerManager
IPowerManager#shutdown
Context.POWER_SERVICE
PowerManager.SHUTDOWN_USER_REQUESTED
Context#checkCallingOrSelfPermission
http://androidxref.com/8.0.0_r4/xref/frameworks/base/services/java/com/android/server/SystemServer.java#475
== 简而言之
就是简单的『强类型』 C/S 架构喽
(下面的 Class#method% 方法表示我不想提及 method 的方法列表,但它是方法不是实例字段)
Service,就是 Android IPC 的 OOService
Service Server 使用 ServiceManager#addService% 和 ServiceManager#getService% 注册和获取 IBinder
abstract class ServiceConnection但是注册 Service 对象的程序应该持续运行,一般使用 Looper 的 mainLooper
onServiceConnected(ComponentName name, IBinder service)
一般要进行权限认证,Context#checkCallingOrSelfPermission
没有 Context,使用 ActivityThread 拿到 system main thread,再拿 system Context。
检查相等性 PackageManager.PERMISSION_GRANTED
XML 符号:
tag permission-group { android:name android:icon android:label }
tag permission { android:name android:icon android:label android:permission-group android:protectionLevel }
Client,就是 OO,它找 ServiceManager 拿到一个 IBinder 对象,然后进行 IOOService.Stub.asService 转换,保证接口是清真无混乱的(IBinder 好比果的 HTTP 协议、AIDL 则是我们自己对协议的约束)
API,就是 IOOService,可以使用 AIDL 语言定义,用来利用 Android IPC 系统传递我们自己的消息
Manager,就是你自己提供一些辅助函数,比如
getOOService()
== 根据符号们:—> 应用程序
class Vibrator
class android.os.SystemVibrator extends Vibrator
AIDL interface IVibratorService
abstact class IVibratorService.Stub
public class VibratorService extends IVibratorService.Stub implements InputManager.InputDeviceListener
public void VibratorService#vibrate(int uid, String opPkg, long milliseconds, int usageHint, IBinder token)
Context#getSystemService(@ServiceName String! serviceId)
Context.VIBRATOR_SERVICE
—> SystemServer
class com.android.server.SystemServer
traceBeginAndSlog(String)
ServiceManager.addService(String, IBinder)
traceEnd()
SystemServer#startOtherServices()
SystemServer#main()
SystemServer#run()
SystemServiceManager#startService()
ServiceManager#addService(String, IBinder)
ServiceManager#getService(String)
—> Services API
class android.app.SystemServiceRegistry
abstract class CachedServiceFetcher<T> { T createService(ContextImpl ctx); }
registerService(name, ServiceFetcher)
abstract class ServiceConnection
onServiceConnected(ComponentName name, IBinder service)
IXXXService.Stub.asInterface(service);
—> Android API
class android.os.Looper
Looper#prepareMainLooper();
Looper#loop%
activityThread.getSystemContext%
ActivityThread#systemMain
android.permission.SHUTDOWN
IPowerManager
IPowerManager#shutdown
Context.POWER_SERVICE
PowerManager.SHUTDOWN_USER_REQUESTED
Context#checkCallingOrSelfPermission
http://androidxref.com/8.0.0_r4/xref/frameworks/base/services/java/com/android/server/SystemServer.java#475
blog.yuuta.moe
从 Vibrator 到系统服务
这是一篇从前博客迁移来的文章。
This media is not supported in your browser
VIEW IN TELEGRAM
Forwarded from Doge
欢迎回来,亲爱的Doge AxuUnW !
获得了本月 3466 MB 流量,下月 1603.5 MB 流量
获得了本月 3466 MB 流量,下月 1603.5 MB 流量
啊看来这种公益项目还是救命啊,可惜我网上经济不自由不能使用付费服务
duangsuse::Echo
好了,闲杂事物已经处理完毕,现在来干 ♂ 正事 ❤️ #weekly #tech 这星期(虽然就一天)的事情,将会包含: + 两个到三个 Excited 的项目(BinaryStreamIO 1.0、SimpleCat)(Android 的 Perferences 封装) + 两个小型 PoC 项目(PartitionSortableList、Delete/Insert/Modify sorted Lists Android 应用、TextTag)(吐槽:其实 duangsuse 也不会多少排序算法呢,他连…
我只能最后改正之前错误的 NP-hard 问题什么的了... 其余的,下周说、下周做吧。 🤐
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
我只能最后改正之前错误的 NP-hard 问题什么的了... 其余的,下周说、下周做吧。 🤐
0. 这是什么
本频道上上周讲事的时候,讲错了一点,必须即时修正(皮一下,玩个个人的梗)
(我是在强调我修错修的快!)(所以不要告 typo)(是即时编译的即)
虽然我这周很多事情没有做(比如重写别人的 TextTag,比如写 SimpleCat 解释器和策划 NaiveCat、还有写 BinaryStreamIO、用 GeekSpec 1.0 重写 GeekApk 服务定义... 等等十几项)
(也会导致我下周在学校里不能看新书了,我要看文学书.... 这么多都是必须写的堆在哪里...)
但是我这个人呢,一直重视改错的,我和王垠一样总是在更新自己(又皮一下,又玩个个人的梗)(终于说了句大实话)
(好啦 duangsuse 毒舌...)
(只是玩梗而已,无恶意啦)
1. 这个问题出在哪里
-> 某条历史回顾消息广播
2. 是啥类型的问题
很智障的计算机科学定义混淆
3. 你打算怎么改
👇
本频道上上周讲事的时候,讲错了一点,必须即时修正(皮一下,玩个个人的梗)
(我是在强调我修错修的快!)(所以不要告 typo)(是即时编译的即)
虽然我这周很多事情没有做(比如重写别人的 TextTag,比如写 SimpleCat 解释器和策划 NaiveCat、还有写 BinaryStreamIO、用 GeekSpec 1.0 重写 GeekApk 服务定义... 等等十几项)
(也会导致我下周在学校里不能看新书了,我要看文学书.... 这么多都是必须写的堆在哪里...)
但是我这个人呢,一直重视改错的,我和王垠一样总是在更新自己(又皮一下,又玩个个人的梗)(终于说了句大实话)
(好啦 duangsuse 毒舌...)
(只是玩梗而已,无恶意啦)
1. 这个问题出在哪里
-> 某条历史回顾消息广播
2. 是啥类型的问题
很智障的计算机科学定义混淆
3. 你打算怎么改
👇
Telegram
duangsuse::Echo
所以呢,细心的大佬们仔细观察一下 duangsue 这条消息,你们会发现 duangsuse 开始决定走出之前某次导致某 Android 开发者频道被删的事件的阴影了
#statement #Android #dev
自然,情绪平复是需要时间的。 ⏲
大佬们看垃圾 duangsuse 之前的广播,会注意到可能有表现得很难受的消息,甚至有些消息,是有莫名讽刺意味的
实际上这非常的智障,首先,我自己在那个领域(指 Android 应用程序开发/计算机图形图像/图形用户界面和布局设计)(这个领域基本还需要基本的异步编程和…
#statement #Android #dev
自然,情绪平复是需要时间的。 ⏲
大佬们看垃圾 duangsuse 之前的广播,会注意到可能有表现得很难受的消息,甚至有些消息,是有莫名讽刺意味的
实际上这非常的智障,首先,我自己在那个领域(指 Android 应用程序开发/计算机图形图像/图形用户界面和布局设计)(这个领域基本还需要基本的异步编程和…
duangsuse::Echo
0. 这是什么 本频道上上周讲事的时候,讲错了一点,必须即时修正(皮一下,玩个个人的梗) (我是在强调我修错修的快!)(所以不要告 typo)(是即时编译的即) 虽然我这周很多事情没有做(比如重写别人的 TextTag,比如写 SimpleCat 解释器和策划 NaiveCat、还有写 BinaryStreamIO、用 GeekSpec 1.0 重写 GeekApk 服务定义... 等等十几项) (也会导致我下周在学校里不能看新书了,我要看文学书.... 这么多都是必须写的堆在哪里...) 但是我这…
=> 最后一次,drakeet 提到一个数组(线性表)优先级排序的问题(OI 入门内容,所谓初等内容都是 dfs bfs 这种的,计算机可解的数学问题,游戏模拟、递归算法、关系代数,稍微搞基一点的离散化、编译原理、神经网络)
就是你们之前看到纯纯支持 Book 的 Chapter 手动排序的特性,他在群里讨论了一下,(想了一段时间)说是逻辑上冲突无法实现,我表达了一下自己的看法『你可以做 Pin Chapter 的功能啊,我觉得应该会用得到』,但是 drakeet 觉得这依然是 NP-hard 问题(他觉得这类似停机问题,是不能解决的,我的观点大概就是不必须使用优先级排序,排序什么的有很多方法,都好说,『半自动排序半手动』是完全可行的),我最后甚至用 Ruby 写了个算法实现(就是能够 Pin 数据的 Array,并且可以自动 sort,sort 完手动 pin 的数据依然在表头部),结果就被踢了.... 🙁
出错的部分在这段话里,这里提到的 Chapter 现在在纯纯写作中被称为『文章』应该,反正纯纯写作把文章集合称为『书』Book,然后文章就是你们编辑(随机插入删除)的东西,我对这些名称不负责,就是表示这些。『drakeet 觉得这依然是 NP-hard 问题』
👉 后面和『
停机问题』逻辑并列这是错误的,因为停机问题和 NP-hard 不是一种概念
并且,停机问题也不是『不能解决』的,实际上,停机问题早就被证实了
好了这周就这么多
Wikipedia
停机问题
停机问题(英語:halting problem)是逻辑数学中可计算性理论的一个问题。通俗地说,停机问题就是判断任意一个程序是否能在有限的时间之内结束运行的问题。该问题等价于如下的判定问题:是否存在一个程序P,对于任意输入的程序w,能够判断w会在有限时间内结束或者死循环。
Forwarded from duangsuse Throws
Forwarded from duangsuse Throws
三天里不打算熬夜。
duangsuse::Echo
=> 最后一次,drakeet 提到一个数组(线性表)优先级排序的问题(OI 入门内容,所谓初等内容都是 dfs bfs 这种的,计算机可解的数学问题,游戏模拟、递归算法、关系代数,稍微搞基一点的离散化、编译原理、神经网络) 就是你们之前看到纯纯支持 Book 的 Chapter 手动排序的特性,他在群里讨论了一下,(想了一段时间)说是逻辑上冲突无法实现,我表达了一下自己的看法『你可以做 Pin Chapter 的功能啊,我觉得应该会用得到』,但是 drakeet 觉得这依然是 NP-hard 问题(他觉…
This media is not supported in your browser
VIEW IN TELEGRAM
#CS #fix 下面我来给大家解释一下停机问题和 NP 困难到底是什么,和我这里提到的 NP-hard 和停机问题指的是什么。
== 上个消息里,我对 NP-hard 和 停机问题 的理解
NP-hard: 就是 NP 完全问题,算法上,就是指很难解决的问题,比如旅行商问题和集合覆盖问题,这类问题的最优解通常要枚举出幂(mì)集(所有可能出现的子集甚至序列),使用穷举法,他们的时间复杂度甚至可能是
这是相当恐怖的时间复杂度,这意味着只要需要处理的数据集足够大 — 并不需要太大的数据输入,程序就无法在一个合理的时间内得到解了。
故此,一般使用贪婪算法得到近似解。
也可以了解一下 Ackerman 函数,但由于我不是特别了解算法和线性代数、离散数学什么的.... 也要学啦。
啊因为提到了 Ackerman 函数,不如再提一下 Collatz 函数 Collatz 猜想
这是错误的理解(指 NP-hard = NP-complete),而且 NP-hardness 和 NP-completeness 也不是一个概念
停机问题: 一个确定性问题,当时被我当成了一个命题(误会,因为确定性问题不一定是命题...)
就是说:有没有一个
这应该不是一个命题(不是陈述句)
不过可以改成陈述句的形式,这涉及到自然语言处理(语言学)的内容... 欸话说大家知道啥是谓词么?谓词(predicate)在计算机科学中也是一个专业术语。
猫"是"动物
—
欸话说,机器学习是个好东西,让程序自己根据数据来造更有意义的数据是很有趣的事情,对 NLP 来说,可是我不知道 HMM(隐马尔科夫链) 这些东西... 话说 Regex 模式匹配用的状态机 DFA, NFA 什么的也不清楚,只是刚好入门软件工程而已,电子电路和数控、CAD、PLC/PLA 什么的也不了解... 尤其是线性代数和优化问题、机器学习、DIP、3D Modeling(欸怎么跨界了?) 什么的...
https://github.com/hankcs/HanLP/
但其实呢,停机问题是(在图灵完全的模型里)
(没抄到... 忘记哪篇博文了)
The halting problem is the problem of determining, when running an arbitrary program with an input, whether the program halts (finish running) or does not halt (run forever).
也可以参考理发师悖论
因为如果有一个程序可以判断它自己是否停机,它就可以利用判断的结果进行相反的操作(比如判断是否停机,如果是,则直接无限循环,否则就真正让程序停机)
https://weblogs.asp.net/dixin/lambda-calculus-via-c-sharp-24-undecidability-of-equivalence #CSharp
借用一下里面直接的结果(过程很长,而且 Lambda calculus 比较需要一些时间 beta-reduction...):
So
Therefore, if
+ If
This proves
👆 一言蔽之:如果能定义出函数
+
+
枚举停机函数可以给出的任何答案(True,False)都无法给出让
所以就无法回答这个问题。这其实是逻辑问题。
至于 Drakeet 开始提出的那个问题呢,涉及到偏序理论,明天我会解释一下。
—
== 上个消息里,我对 NP-hard 和 停机问题 的理解
NP-hard: 就是 NP 完全问题,算法上,就是指很难解决的问题,比如旅行商问题和集合覆盖问题,这类问题的最优解通常要枚举出幂(mì)集(所有可能出现的子集甚至序列),使用穷举法,他们的时间复杂度甚至可能是
O(n!) (n! 代表 factorial(n))这是相当恐怖的时间复杂度,这意味着只要需要处理的数据集足够大 — 并不需要太大的数据输入,程序就无法在一个合理的时间内得到解了。
故此,一般使用贪婪算法得到近似解。
也可以了解一下 Ackerman 函数,但由于我不是特别了解算法和线性代数、离散数学什么的.... 也要学啦。
啊因为提到了 Ackerman 函数,不如再提一下 Collatz 函数 Collatz 猜想
这是错误的理解(指 NP-hard = NP-complete),而且 NP-hardness 和 NP-completeness 也不是一个概念
停机问题: 一个确定性问题,当时被我当成了一个命题(误会,因为确定性问题不一定是命题...)
就是说:有没有一个
程序,可以判断所有程序是否能在有限的时间内完成计算?这应该不是一个命题(不是陈述句)
不过可以改成陈述句的形式,这涉及到自然语言处理(语言学)的内容... 欸话说大家知道啥是谓词么?谓词(predicate)在计算机科学中也是一个专业术语。
猫"是"动物
—
我(r)"爱"(v)你
(r)
主 动(谓词) 宾汉语的谓词包括动词和形容词
欸话说,机器学习是个好东西,让程序自己根据数据来造更有意义的数据是很有趣的事情,对 NLP 来说,可是我不知道 HMM(隐马尔科夫链) 这些东西... 话说 Regex 模式匹配用的状态机 DFA, NFA 什么的也不清楚,只是刚好入门软件工程而已,电子电路和数控、CAD、PLC/PLA 什么的也不了解... 尤其是线性代数和优化问题、机器学习、DIP、3D Modeling(欸怎么跨界了?) 什么的...
https://github.com/hankcs/HanLP/
但其实呢,停机问题是(在图灵完全的模型里)
判断一个程序是否能在有限时间内完成的确定性问题,并且,当然地,这个解决方案得是停机的
这是不可能解决的问题。因为如果能判断的话,就只能证明这个问题不可判断了,或者说(从某王博客上抄的,我记得他有发)(没抄到... 忘记哪篇博文了)
The halting problem is the problem of determining, when running an arbitrary program with an input, whether the program halts (finish running) or does not halt (run forever).
也可以参考理发师悖论
因为如果有一个程序可以判断它自己是否停机,它就可以利用判断的结果进行相反的操作(比如判断是否停机,如果是,则直接无限循环,否则就真正让程序停机)
https://weblogs.asp.net/dixin/lambda-calculus-via-c-sharp-24-undecidability-of-equivalence #CSharp
借用一下里面直接的结果(过程很长,而且 Lambda calculus 比较需要一些时间 beta-reduction...):
So
(IsNotHalting IsNotHalting) is reduced to True, which means IsNotHalting halts with IsNotHalting.Therefore, if
IsHalting exists, it leads to IsNotHalting with the following properties:+ If
IsNotHalting halts with IsNotHalting, then IsNotHalting does not halt with IsNotHalting
+ If IsNotHalting does not halt with IsNotHalting, then IsNotHalting halts with IsNotHalting.This proves
IsNotHalting and IsHalting cannot exist.👆 一言蔽之:如果能定义出函数
停机?,就能定义出一个不停机?函数(define 不停机?然后,如果
λf. If (停机? (f f))
(λx. (eternity))
(λx. True))
+
(停机? (不停机? 不停机?)) 是停机的(True),则它反而不停机+
(停机? (不停机? 不停机?)) 是不停机的(False),则它反而是停机的枚举停机函数可以给出的任何答案(True,False)都无法给出让
(停机? (不停机? 不停机?)) 满足其定义的结果所以就无法回答这个问题。这其实是逻辑问题。
至于 Drakeet 开始提出的那个问题呢,涉及到偏序理论,明天我会解释一下。
—
5 没有被手动排序过,5 排在 1 前面,4 被手动排序过,4 也在 1 前面,但 5 和 4 却无法得出谁在谁前Baidu
贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。