我正在尝试使用 kmeans 寻找在首尔地铁站附近开设咖啡店的最佳地点。
包括的功能有:
我决定使用肘点来找到最好的 k。在运行 kmeans 之前,我确实对所有功能进行了标准化。
现在肘点似乎是 k=3(或者 k=2),但我认为 SSE 对于肘点来说太高了。
同样使用 k=3,很难从集群中获得洞察力,因为只有三个集群。
使用 k=5 是获得洞察力的最佳选择。
即使不是肘点,使用 k=5 是否合理?
还是首先 kmeans 不是一个好的选择?
我不得不编写一个超过 600 行和大约 25 个函数的 C 程序。这是我写过的最长的 C 代码。
我注意到一些函数有超过 5 个参数。直接从 main() 调用的那些有更多的参数。它离 main() 越远,越少。
我还注意到我经常不得不将参数传递给函数,不是因为该函数直接使用该参数,而是该函数调用另一个需要该参数的函数。
所以它看起来像
void f1(int a, int b,..., int bar){
int foo = f2(bar); // the only time 'bar' is used in f1
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我试图尽量减少全局变量的使用,但我不得不声明一些全局变量,因为有些参数变得过于冗余。基本上我必须将这些参数传递给每个函数。
我不是一个有经验的程序员,但是当我用 Java 编程时,我认为我不需要编写一个超过 5 个参数的方法。
在 C 中传递比其他语言更多的参数是否正常?这只是过程式编程与面向对象编程的本质吗?还是我只是在写不好的 C 代码?
char data;
char *ptr = &data;
*ptr = 3;
*(ptr+1) = 5;
Run Code Online (Sandbox Code Playgroud)
所以我正在研究指针,有一件事我很不明白。
当使用指针数组,你怎么知道地址ptr+1或ptr+2等没有被其他变量占用?
例如,该地址ptr + 1已被使用,如果我尝试将 5 放入其中,程序是否有可能崩溃?
或者更极端的例子是什么ptr + 1000?
还是编译器确保它永远不会发生?